[K8s] kubeconfig를 사용하여 다중 클러스터 접근 구성하기
만약 여러 클러스터가 있고, 사용자와 구성요소가 다양한 방식으로 인증할 때,
kubeconfig 파일들을 사용해서 클러스터, 사용자, 네임스페이스 및 인증 메커니즘에 대한 정보를 관리할 수 있다.
기본적으로 kubectl은 $HOME/.kube 디렉터리에서 config라는 이름의 파일을 찾는다.
컨텍스트 (Context)
kubeconfig에서 컨텍스트 요소는 편리한 이름으로 접속 매개 변수를 묶는데 사용한다.
각 컨텍스트는 클러스터, 네임스페이스. 사용자라는 세 가지 매개변수를 가진다.
kubectl config use-context
위 명령어를 사용하면 컨텍스트를 선택 할 수있다.
클러스터, 사용자, 컨텍스트 정의
만약 개발 작업을 위한 클러스터와, 테스트 작업을 위한 클러스터를 가지고 있다고 가정해보자. 정리해보면 다음과 같다.
- development 클러스터 : 인증서 인증 필요
- frontend 네임스페이스 - 프론트 엔드 개발자
- storage 네임스페이스 - 스토리지 개발자
- test 클러스터 : 사용자 네임과 패스워드로 인증 필요
- default 네임스페이스 - 테스트 작업 용 개발
- 필요에 따라 네임스페이스 생성
config-exercise 디렉터리를 생성 후 디렉터리 내에 다음과 같은 config-demo 파일을 생성한다.
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
name: development
- cluster:
name: test
users:
- name: developer
- name: experimenter
contexts:
- context:
name: dev-frontend
- context:
name: dev-storage
- context:
name: exp-test
해당 구성 파일은 클러스터, 사용자, 컨텍스트들을 기술한다.
config-demo 파일은 두 클러스터들과 두 사용자들, 세 컨텍스트들을 기술하기 위한 프레임워크를 가진다.
세부사항 추가
클러스터, 사용자, 컨텍스트의 세부사항들을 구성파일에 커맨드 라인으로 추가할 수 있다.
1. 클러스터 세부사항 추가
kubectl config --kubeconfig=config-demo \
set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo \
set-cluster test --server=https://5.6.7.8 --insecure-skip-tls-verify
2. 사용자 세부사항 추가
development 클러스터는 인증서를 추가해주고, test 클러스터엔 네임과 패스워드를 추가해준다.
kubectl config --kubeconfig=config-demo set-credentials developer \
--client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter \
--username=exp --password=some-password
⚠ 쿠버네티스 클라이언트 구성에 암호를 저장하는 것은 위험하다.
자격 증명 플러그인을 사용하여 별도로 저장하는 것을 권장한다.
3. 컨텍스트 세부사항 추가
kubectl config --kubeconfig=config-demo set-context dev-frontend \
--cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage \
--cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-test \
--cluster=test --namespace=default --user=experimenter
config 확인 및 컨텍스트 변경
1. config 구성 확인
다음 명령어를 사용하면 두 클러스터, 두 사용자, 세 컨텍스트들이 출력 결과로 나오는 걸 확인할 수 있다.
kubectl config --kubeconfig=config-demo view
fake-ca-file, fake-cert-file, fake-key-file은 인증서 파일들의 실제 경로 이름을 위한 플레이스홀더다.
환경에 맞게 실제 인증서 경로로 변경해줘야 한다.apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
- cluster:
insecure-skip-tls-verify: true
server: https://5.6.7.8
name: test
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: test
namespace: default
user: experimenter
name: exp-test
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
- name: experimenter
user:
# 문서 참고 사항 (이 설명은 명령 출력의 일부가 아니다.)
# 쿠버네티스 클라이언트 구성에 암호를 저장하는 것은 위험하다.
# 자격 증명 플러그인을 사용하여
# 자격 증명을 별도로 저장하는 것이 더 나은 대안이다.
# 다음을 참고하자. https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
password: some-password
username: exp
컨텍스트는 세 가지 요소들로 이루어진다.
dev-frontend 컨텍스트는 development 클러스터의 frontend 네임스페이스에 접근하는데 developer 사용자 자격 증명을 사용하라고 알려준다.
2. 현재 컨텍스트 설정
다음 커맨드를 통해 현재 컨텍스트를 설정한다.
kubectl config --kubeconfig=config-demo use-context dev-frontend
이제 kubectl 명령어를 사용할 때 마다, dev-frontend 컨텍스트에 명시된 클러스터와 네임스페이스 상에서 동작한다.
3. 구성 정보 확인
현재 컨텍스트에 관련된 구성 정보만을 보려면 --minify 플래그를 사용한다.
kubectl config --kubeconfig=config-demo view --minify
dev-frontend 컨텍스트에 관련된 구성 정보가 결과로 표시된다.
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
current-context: dev-frontend
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
4. 컨텍스트 변경
잠시 test 클러스터에서 작업을 하려고 할 때, 컨텍스트를 변경 할 수 있다.
kubectl config --kubeconfig=config-demo use-context exp-test
Config 삭제
사용자 삭제
kubectl --kubeconfig=config-demo config unset users.<name>
클러스터 제거
kubectl --kubeconfig=config-demo config unset clusters.<name>
컨텍스트 제거
kubectl --kubeconfig=config-demo config unset contexts.<name>
KUBECONFIG 환경 변수 설정
KUBECONFIG 환경 변수는 구성 파일들의 경로의 리스트다.
예를 들어 config가 2개 구성되어있을 경우 다음과 같이 export 할 수 있다.
export KUBECONFIG="${KUBECONFIG}:config-demo:config-demo-2"
참고
https://kubernetes.io/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters/
'🐳 Container > K8S' 카테고리의 다른 글
[K8s] Storage Class (0) | 2024.04.29 |
---|---|
[K8s] PV(Persistent Volume), PVC(Persistent Volume Claim) (0) | 2024.04.26 |
[K8s] Network Policy (0) | 2024.04.11 |
[K8s] RBAC(Role-Based Access Control) (0) | 2024.04.09 |
[K8s] ServiceAccount (0) | 2024.04.08 |