Files
K3S/playbooks/k8s-user.yml
Sergey Antropoff 437d0cce34 refactor: перемещение плейбуков в playbooks/, ротация сертификатов, сохранение ключей локально
Организация плейбуков:
- все .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
2026-04-24 07:00:18 +03:00

120 lines
5.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# ─────────────────────────────────────────────────────────────────────────────
# 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