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>.ymlGroup을 RKE2 역할에 연결함
| Inventory group | RKE2 역할 | 제약 |
|---|---|---|
k8s_cluster | 전체 Linux server·agent | control-plane과 worker의 정확한 합집합이어야 함 |
kube_control_plane | RKE2 server | 한 대 이상이며 첫 host가 기본 bootstrap server임 |
kube_node | workload eligible Linux node | server와 중복 가능하며 그 외 host는 agent가 됨 |
etcd | datastore topology | control-plane과 같으면 embedded, 분리하면 external임 |
win_nodes | Windows RKE2 agent | server 역할을 허용하지 않음 |
bastion | SSH jump host | RKE2 설치 대상이 아님 |
값을 가장 가까운 소유 위치에 둠
| 값 | 권장 위치 |
|---|---|
| cluster 공통값 | group_vars/k8s_cluster/k8s-cluster.yml |
| SSH 공통값 | group_vars/all/all.yml |
| host 주소·이름·접속 차이 | host_vars/<host>.yml |
| RKE2 server·agent token | cluster 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 선택은 핵심 설정에서 계속함