Организация плейбуков: - все .yml плейбуки перенесены из корня в playbooks/ - Makefile и entrypoint.sh обновлены — все пути с playbooks/ префиксом - k8s-user.yml переработан: include_tasks → include_role (корректная работа из подкаталога) Сохранение ключей и kubeconfig локально: - k8s-user.yml: новый play сохраняет k8s SSH ключи в ./keys/ на машине запуска - переменная k8s_local_keys_dir: "./keys" (настраивается в group_vars) - .gitignore: keys/k8s_id_rsa исключён (публичный ключ можно коммитить) - kubeconfig уже сохранялся роль k3s (k3s_kubeconfig_local_path: "./kubeconfig") Автоматическая ротация сертификатов K3S (роль k3s-certs): - K3S выпускает сертификаты на 1 год (hardcoded), таймер обеспечивает их обновление - скрипт k3s-cert-check.sh: проверяет срок через openssl, ротирует при k3s_cert_rotate_before_days - systemd service + timer: запуск по расписанию k3s_cert_check_schedule (по умолчанию monthly) - RandomizedDelaySec: снижает нагрузку при одновременном запуске на нескольких нодах - переменные: k3s_cert_validity_years: 5, k3s_cert_rotate_before_days: 90 - добавлен в site.yml (тег certs) и отдельный плейбук playbooks/k3s-certs.yml - make k3s-certs и команда k3s-certs в entrypoint.sh
120 lines
5.0 KiB
YAML
120 lines
5.0 KiB
YAML
---
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# k8s-user: создание сервисного пользователя k8s на всех серверах
|
||
#
|
||
# Последовательность:
|
||
# 1. Создать пользователя k8s + sudo на всех нодах кластера
|
||
# 2. Сгенерировать RSA 4096 ключевую пару на первом мастере (один раз)
|
||
# 3. Сохранить ключи локально в ./keys/
|
||
# 4. Разложить ключи на все ноды кластера (SSH в любую сторону)
|
||
# 5. Обновить /etc/hosts на нодах кластера
|
||
# 6. То же самое для lab_hosts (через пароль из vault)
|
||
#
|
||
# Запуск: ansible-playbook playbooks/k8s-user.yml --ask-vault-pass
|
||
# Только кластер: ansible-playbook playbooks/k8s-user.yml --limit k3s_cluster
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
|
||
# ── 1. Создать пользователя k8s на всех нодах кластера ───────────────────────
|
||
- name: Create k8s service user on cluster nodes
|
||
hosts: k3s_cluster
|
||
gather_facts: true
|
||
become: true
|
||
roles:
|
||
- role: k8s-user
|
||
|
||
# ── 2. Сгенерировать ключевую пару на первом мастере ─────────────────────────
|
||
- name: Generate k8s SSH key pair (first master only)
|
||
hosts: "{{ groups['k3s_master'][0] }}"
|
||
gather_facts: false
|
||
become: true
|
||
tasks:
|
||
- name: Generate RSA key pair and store facts
|
||
ansible.builtin.include_role:
|
||
name: k8s-user
|
||
tasks_from: generate_keys.yml
|
||
|
||
# ── 3. Сохранить ключи локально в ./keys/ ────────────────────────────────────
|
||
- name: Save k8s SSH keys to local machine
|
||
hosts: "{{ groups['k3s_master'][0] }}"
|
||
gather_facts: false
|
||
tasks:
|
||
- name: Create local keys directory
|
||
ansible.builtin.file:
|
||
path: "{{ k8s_local_keys_dir }}"
|
||
state: directory
|
||
mode: '0700'
|
||
delegate_to: localhost
|
||
become: false
|
||
|
||
- name: Save private key locally
|
||
ansible.builtin.copy:
|
||
content: "{{ k8s_ssh_private_key }}"
|
||
dest: "{{ k8s_local_keys_dir }}/k8s_id_rsa"
|
||
mode: '0600'
|
||
delegate_to: localhost
|
||
become: false
|
||
|
||
- name: Save public key locally
|
||
ansible.builtin.copy:
|
||
content: "{{ k8s_ssh_public_key }}\n"
|
||
dest: "{{ k8s_local_keys_dir }}/k8s_id_rsa.pub"
|
||
mode: '0644'
|
||
delegate_to: localhost
|
||
become: false
|
||
|
||
- name: Show where keys were saved
|
||
ansible.builtin.debug:
|
||
msg: "SSH keys saved to {{ k8s_local_keys_dir }}"
|
||
|
||
# ── 4. Разложить ключи на все ноды кластера ──────────────────────────────────
|
||
- name: Distribute k8s SSH keys to all cluster nodes
|
||
hosts: k3s_cluster
|
||
gather_facts: false
|
||
become: true
|
||
tasks:
|
||
- name: Deploy keys to node
|
||
ansible.builtin.include_role:
|
||
name: k8s-user
|
||
tasks_from: distribute_keys.yml
|
||
|
||
# ── 5. Обновить /etc/hosts на нодах кластера ─────────────────────────────────
|
||
- name: Update /etc/hosts on cluster nodes
|
||
hosts: k3s_cluster
|
||
gather_facts: false
|
||
become: true
|
||
tasks:
|
||
- name: Update hosts file
|
||
ansible.builtin.include_role:
|
||
name: k8s-user
|
||
tasks_from: update_hosts.yml
|
||
|
||
# ── 6. Bootstrap lab_hosts: создать пользователя, разложить ключи, обновить hosts
|
||
# Подключение через логин/пароль из host_vars/<host>/vault.yml
|
||
- name: Setup k8s user on lab hosts
|
||
hosts: lab_hosts
|
||
gather_facts: true
|
||
become: true
|
||
vars:
|
||
ansible_user: "{{ bootstrap_user }}"
|
||
ansible_password: "{{ bootstrap_password }}"
|
||
ansible_become_password: "{{ bootstrap_sudo_password | default(bootstrap_password) }}"
|
||
ansible_ssh_common_args: >-
|
||
-o StrictHostKeyChecking=no
|
||
-o PasswordAuthentication=yes
|
||
-o PubkeyAuthentication=no
|
||
tasks:
|
||
- name: Create k8s user on lab host
|
||
ansible.builtin.include_role:
|
||
name: k8s-user
|
||
tasks_from: create_user.yml
|
||
|
||
- name: Distribute k8s SSH keys to lab host
|
||
ansible.builtin.include_role:
|
||
name: k8s-user
|
||
tasks_from: distribute_keys.yml
|
||
|
||
- name: Update /etc/hosts on lab host
|
||
ansible.builtin.include_role:
|
||
name: k8s-user
|
||
tasks_from: update_hosts.yml
|