refactor: bootstrap использует cluster_service_users вместо отдельного ansible-пользователя
Проблема: bootstrap создавал отдельного пользователя ansible (k3s_admin_user),
хотя у нас уже есть cluster_service_users с k8s и devops.
Решение:
- k3s_admin_user: devops (один из cluster_service_users, не отдельный пользователь)
- bootstrap phase 1: создаёт ВСЕХ пользователей из cluster_service_users через k8s-user role
- bootstrap phase 2: деплоит SSH ключ Ansible runner только в authorized_keys k3s_admin_user
- roles/bootstrap/tasks/main.yml: удалено создание пользователя/группы/sudoers (теперь в k8s-user)
- roles/bootstrap/defaults/main.yml: удалены k3s_admin_shell/comment/groups (не нужны)
- добавлена проверка: k3s_admin_user должен быть в cluster_service_users (assert)
group_vars/all/main.yml:
- ansible_user: "{{ k3s_admin_user }}" — все playbooks подключаются как k3s_admin_user
- ansible_ssh_private_key_file: "~/.ssh/id_rsa"
- k3s_admin_ssh_additional_keys: [] — для нескольких инженеров через vault
inventory/hosts.ini:
- убраны ansible_user=ubuntu с каждого хоста (теперь в group_vars)
- убран ansible_ssh_private_key_file из group vars (теперь в group_vars/all/main.yml)
This commit is contained in:
@@ -1,29 +1,29 @@
|
||||
---
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# Bootstrap — первоначальная настройка нод
|
||||
# Bootstrap — первичная настройка нод
|
||||
#
|
||||
# Запускать ОДИН РАЗ перед make install.
|
||||
# Подключается с начальными логином/паролем из vault (host_vars/<node>/vault.yml).
|
||||
# Создаёт пользователя k3s_admin_user, раскладывает SSH ключ.
|
||||
# После этого все playbook работают по ключу без пароля.
|
||||
# Подключается с начальными логин/пароль из vault (host_vars/<node>/vault.yml).
|
||||
#
|
||||
# Использование:
|
||||
# make bootstrap
|
||||
# make bootstrap NODE=master01 — только одна нода
|
||||
# Выполняет:
|
||||
# 1. Создаёт всех пользователей из cluster_service_users (sudo, SSH dir)
|
||||
# 2. Раскладывает SSH ключ Ansible runner в k3s_admin_user
|
||||
# После этого все playbook работают по ключу без пароля.
|
||||
#
|
||||
# Требования vault (в host_vars/<node>/vault.yml для каждой ноды):
|
||||
# bootstrap_user: ubuntu # начальный пользователь
|
||||
# bootstrap_password: "секрет" # пароль SSH
|
||||
# bootstrap_sudo_password: "секрет" # пароль sudo (часто тот же)
|
||||
# k3s_admin_user — должен быть одним из cluster_service_users (см. group_vars).
|
||||
# По умолчанию: devops
|
||||
#
|
||||
# Требования (host_vars/<node>/vault.yml для каждой ноды):
|
||||
# bootstrap_user: ubuntu
|
||||
# bootstrap_password: "пароль"
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
- name: Bootstrap cluster nodes
|
||||
# ── Фаза 1: Создать всех пользователей из cluster_service_users ──────────────
|
||||
- name: "Bootstrap phase 1: create service users"
|
||||
hosts: "{{ node_to_bootstrap | default('k3s_cluster') }}"
|
||||
gather_facts: false
|
||||
gather_facts: true
|
||||
serial: 1
|
||||
|
||||
vars:
|
||||
# Подключаемся с первоначальными credentials из vault каждой ноды
|
||||
ansible_user: "{{ bootstrap_user }}"
|
||||
ansible_password: "{{ bootstrap_password }}"
|
||||
ansible_become_password: "{{ bootstrap_sudo_password | default(bootstrap_password) }}"
|
||||
@@ -34,23 +34,57 @@
|
||||
-o PubkeyAuthentication=no
|
||||
|
||||
pre_tasks:
|
||||
- name: Validate bootstrap credentials are defined
|
||||
- name: Validate bootstrap credentials
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- bootstrap_user is defined
|
||||
- bootstrap_user | length > 0
|
||||
- bootstrap_password is defined
|
||||
- bootstrap_password | length > 0
|
||||
- bootstrap_user is defined and bootstrap_user | length > 0
|
||||
- bootstrap_password is defined and bootstrap_password | length > 0
|
||||
fail_msg: >
|
||||
Для {{ inventory_hostname }} не заданы bootstrap credentials.
|
||||
Создай host_vars/{{ inventory_hostname }}/vault.yml с полями:
|
||||
Создай host_vars/{{ inventory_hostname }}/vault.yml:
|
||||
bootstrap_user: ubuntu
|
||||
bootstrap_password: "пароль"
|
||||
Зашифруй файл: ansible-vault encrypt host_vars/{{ inventory_hostname }}/vault.yml
|
||||
Зашифруй: ansible-vault encrypt host_vars/{{ inventory_hostname }}/vault.yml
|
||||
|
||||
- name: Validate k3s_admin_user is in cluster_service_users
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- cluster_service_users | selectattr('name', 'equalto', k3s_admin_user) | list | length > 0
|
||||
fail_msg: >
|
||||
k3s_admin_user="{{ k3s_admin_user }}" не найден в cluster_service_users.
|
||||
Добавь пользователя в список или измени k3s_admin_user в group_vars.
|
||||
|
||||
- name: Test initial SSH connection
|
||||
ansible.builtin.ping:
|
||||
register: ping_result
|
||||
|
||||
tasks:
|
||||
- name: Create user {{ item.name }}
|
||||
ansible.builtin.include_role:
|
||||
name: k8s-user
|
||||
tasks_from: create_user.yml
|
||||
vars:
|
||||
k8s_service_user: "{{ item.name }}"
|
||||
k8s_service_user_comment: "{{ item.comment | default(item.name) }}"
|
||||
k8s_service_user_shell: "{{ item.shell | default('/bin/bash') }}"
|
||||
k8s_service_user_sudo: "{{ item.sudo | default(true) }}"
|
||||
k8s_service_user_ssh_dir: "{{ item.ssh_dir | default('.ssh') }}"
|
||||
loop: "{{ cluster_service_users }}"
|
||||
loop_control:
|
||||
label: "{{ item.name }}"
|
||||
|
||||
# ── Фаза 2: Задеплоить SSH ключ Ansible runner в k3s_admin_user ──────────────
|
||||
- name: "Bootstrap phase 2: deploy Ansible runner SSH key"
|
||||
hosts: "{{ node_to_bootstrap | default('k3s_cluster') }}"
|
||||
gather_facts: false
|
||||
serial: 1
|
||||
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 UserKnownHostsFile=/dev/null
|
||||
-o PasswordAuthentication=yes
|
||||
-o PubkeyAuthentication=no
|
||||
roles:
|
||||
- role: bootstrap
|
||||
|
||||
Reference in New Issue
Block a user