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,23 +1,17 @@
|
||||
---
|
||||
# ─── Bootstrap — создание пользователя и деплой SSH ключа ────────────────────
|
||||
|
||||
# Пользователь, который будет создан для управления кластером
|
||||
k3s_admin_user: ansible
|
||||
k3s_admin_shell: /bin/bash
|
||||
k3s_admin_comment: "K3S Ansible Admin"
|
||||
|
||||
# Дополнительные группы для k3s_admin_user (sudo добавляется отдельно)
|
||||
k3s_admin_groups: []
|
||||
# ─── Bootstrap — деплой SSH ключа Ansible runner ─────────────────────────────
|
||||
# Пользователь создаётся роль k8s-user (cluster_service_users), здесь только
|
||||
# добавляется SSH ключ Ansible-машины в authorized_keys k3s_admin_user.
|
||||
|
||||
# Путь к SSH публичному ключу внутри контейнера (монтируется из ~/.ssh)
|
||||
# Поддерживает несколько ключей — укажи список файлов или строк
|
||||
# Поддерживает несколько ключей — укажи список файлов
|
||||
k3s_admin_ssh_public_key_files:
|
||||
- /root/.ssh/id_ed25519.pub
|
||||
|
||||
# Дополнительные публичные ключи (строки) — добавляются помимо файлов выше
|
||||
# Дополнительные публичные ключи строками (из vault, для нескольких инженеров)
|
||||
k3s_admin_ssh_additional_keys: []
|
||||
|
||||
# Отключить вход по паролю для SSH после деплоя ключа (рекомендуется)
|
||||
# Отключить вход по паролю для SSH после деплоя ключа (рекомендуется в prod)
|
||||
k3s_admin_disable_password_auth: false
|
||||
|
||||
# Перезапустить SSH после изменения конфигурации
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
---
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# Bootstrap — создание пользователя для управления кластером + деплой SSH ключа
|
||||
# Запускается один раз с первоначальными credentials (логин/пароль из vault)
|
||||
# После этого все playbook работают через SSH ключ без пароля
|
||||
# Bootstrap — деплой SSH ключа Ansible runner → k3s_admin_user
|
||||
#
|
||||
# Пользователь k3s_admin_user уже создан на предыдущем шаге (k8s-user role).
|
||||
# Эта задача только добавляет публичный ключ Ansible-машины в authorized_keys.
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
- name: Gather minimal facts
|
||||
@@ -10,41 +11,7 @@
|
||||
gather_subset:
|
||||
- min
|
||||
|
||||
- name: Create admin group (if not exists)
|
||||
ansible.builtin.group:
|
||||
name: "{{ k3s_admin_user }}"
|
||||
state: present
|
||||
become: true
|
||||
|
||||
- name: Create k3s admin user
|
||||
ansible.builtin.user:
|
||||
name: "{{ k3s_admin_user }}"
|
||||
comment: "{{ k3s_admin_comment }}"
|
||||
shell: "{{ k3s_admin_shell }}"
|
||||
groups: "{{ ([k3s_admin_user] + k3s_admin_groups) | unique }}"
|
||||
append: true
|
||||
create_home: true
|
||||
state: present
|
||||
become: true
|
||||
|
||||
- name: Configure passwordless sudo for admin user
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sudoers.d/{{ k3s_admin_user }}
|
||||
content: "{{ k3s_admin_user }} ALL=(ALL) NOPASSWD:ALL\n"
|
||||
mode: '0440'
|
||||
validate: visudo -cf %s
|
||||
become: true
|
||||
|
||||
- name: Ensure .ssh directory exists
|
||||
ansible.builtin.file:
|
||||
path: "/home/{{ k3s_admin_user }}/.ssh"
|
||||
state: directory
|
||||
owner: "{{ k3s_admin_user }}"
|
||||
group: "{{ k3s_admin_user }}"
|
||||
mode: '0700'
|
||||
become: true
|
||||
|
||||
- name: Deploy SSH public keys from files
|
||||
- name: Deploy SSH public keys from files to {{ k3s_admin_user }}
|
||||
ansible.posix.authorized_key:
|
||||
user: "{{ k3s_admin_user }}"
|
||||
key: "{{ lookup('file', item) }}"
|
||||
@@ -55,7 +22,7 @@
|
||||
label: "{{ item | basename }}"
|
||||
ignore_errors: true
|
||||
|
||||
- name: Deploy additional SSH public keys (from vault strings)
|
||||
- name: Deploy additional SSH public keys (from vault strings) to {{ k3s_admin_user }}
|
||||
ansible.posix.authorized_key:
|
||||
user: "{{ k3s_admin_user }}"
|
||||
key: "{{ item }}"
|
||||
@@ -75,7 +42,7 @@
|
||||
when: k3s_admin_disable_password_auth | bool
|
||||
notify: Restart sshd
|
||||
|
||||
- name: Ensure PermitRootLogin is disabled
|
||||
- name: Disable root SSH login
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/ssh/sshd_config
|
||||
regexp: "^#?PermitRootLogin"
|
||||
@@ -103,15 +70,12 @@
|
||||
failed_when: false
|
||||
when: k3s_admin_ssh_public_key_files | length > 0
|
||||
|
||||
- name: Show bootstrap result
|
||||
- name: Bootstrap result for {{ inventory_hostname }}
|
||||
ansible.builtin.debug:
|
||||
msg: >
|
||||
Нода {{ inventory_hostname }}:
|
||||
Пользователь '{{ k3s_admin_user }}' создан.
|
||||
SSH ключ задеплоен.
|
||||
{{ inventory_hostname }}: SSH ключ задеплоен для '{{ k3s_admin_user }}'.
|
||||
{% if ssh_test is defined and ssh_test.rc == 0 %}
|
||||
✓ SSH вход по ключу подтверждён.
|
||||
{% else %}
|
||||
⚠ SSH вход по ключу не проверен (возможно, ключ ещё не в ssh-agent).
|
||||
⚠ SSH ключ задеплоен, проверь вход вручную: ssh {{ k3s_admin_user }}@{{ ansible_host | default(inventory_hostname) }}
|
||||
{% endif %}
|
||||
Добавь в inventory: ansible_user={{ k3s_admin_user }}
|
||||
|
||||
Reference in New Issue
Block a user