🐳 Container/K8S

[K8s] kubeconfig를 사용하여 다중 클러스터 접근 구성하기

heywantodo 2024. 4. 25. 10:40
728x90
반응형

[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/

728x90
반응형