Tutorialrke2spray

Inventory와 Vault 구성

RKE2 노드 역할, 환경 변수와 inline Ansible Vault를 안전하게 구성하는 방법

업데이트 검증 근거 자료이 페이지 편집

핵심 요약

  • 환경별 Inventory는 rke2spray를 소비하는 별도 환경 저장소가 소유함
  • kube_control_plane은 RKE2 server, server가 아닌 kube_node는 agent로 해석됨
  • Secret은 값을 사용하는 group 또는 host vars의 inline !vault로 저장함
  • .vault_pass와 평문 Secret은 Git에 저장하지 않음
  • 원격 변경 전에 Vault 검사와 read-only preflight를 실행함

Inventory 구조를 만듦

inventory/<cluster-name>/
├── hosts.yml
├── group_vars/
│   ├── all/all.yml
│   └── k8s_cluster/k8s-cluster.yml
└── host_vars/
    └── <host>.yml

Group을 RKE2 역할에 연결함

Inventory groupRKE2 역할제약
k8s_cluster전체 Linux server·agentcontrol-plane과 worker의 정확한 합집합이어야 함
kube_control_planeRKE2 server한 대 이상이며 첫 host가 기본 bootstrap server임
kube_nodeworkload eligible Linux nodeserver와 중복 가능하며 그 외 host는 agent가 됨
etcddatastore topologycontrol-plane과 같으면 embedded, 분리하면 external임
win_nodesWindows RKE2 agentserver 역할을 허용하지 않음
bastionSSH jump hostRKE2 설치 대상이 아님

값을 가장 가까운 소유 위치에 둠

권장 위치
cluster 공통값group_vars/k8s_cluster/k8s-cluster.yml
SSH 공통값group_vars/all/all.yml
host 주소·이름·접속 차이host_vars/<host>.yml
RKE2 server·agent tokencluster vars의 inline !vault
provider API token값을 사용하는 vars의 개별 inline !vault
ansible_password해당 host vars의 inline !vault

Vault 경계를 지킴

  • .vault_pass 파일 권한은 0600으로 유지함
  • 중앙 vault.yml, vault_* 간접 변수와 평문 Secret 파일을 만들지 않음
  • 공유 가능한 sample Inventory에는 실제 주소, credential과 환경 고유 토폴로지를 넣지 않음

변경 전 필수 검사

inventory-vault-check는 SSH 없이 암호문과 파일 권한을 검사하고, inventory-preflight는 실제 host에 읽기 전용으로 연결해 topology와 요구사항을 검사함

make inventory-vault-check \
  INVENTORY=inventory/my-cluster/hosts.yml \
  VAULT_PASSWORD_FILE=.vault_pass

make inventory-preflight \
  INVENTORY=inventory/my-cluster/hosts.yml \
  VAULT_PASSWORD_FILE=.vault_pass

다음 단계

  • 버전, CNI와 endpoint 선택은 핵심 설정에서 계속함