Print
카테고리: [ Cloud Computing & MSA ]
조회수: 26001

다중 클러스터 접근 구성 - Kubernetes kubectl context

쿠버네티스 클러스터를 관리하는 kubectl은 환경을 변경하며 클러스터를 관리할 수 있는 context 기능을 제공한다. 

이는 config 구성 파일을 활용하여 다수의 클러스터에 접근할 수 있도록 설정하며 사용자는 커맨드 사용으로 빠르게 클러스터를 변경할 수 있다. 


설정 방법

context는 kubectl cli를 설치하면 생성되는 ~/.kube/config 파일에서 설정한다. (클러스터는 설치되어있다고 가정한다.)

추가로 kubectl이 설치되었는지 확인하기 위해서는 $kubectl version --client를 통해 확인한다. 


config 파일 예시

아래는 config 파일의 예시이다. (구글 공식 문서 참고)

개발 작업을 위한 클러스터와 스크래치 작업을 위한 클러스터를 가지고 있다고 가정한다. 

- development 클러스터에서는 frontend 개발자들이 frontend namespace에서 작업을 하며, storage 개발자들은 storage namespace에서 작업을 한다. 

- scratch 클러스터에서는 개발자들이 default namespace에서 개발하거나 필요에 따라 보조 namespace들을 생성한다. 

- development 클러스터에 접근하기 위해서는 인증서가 필요하며, scratch 클러스터에 접근하기 위해서는 사용자 이름과 패스워드로 인증이 필요하다. 

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: scratch

users:
- name: developer
  user:
     client-certificate: fake-cert-file
     client-key: fake-key-file
- name: experimenter
  user:
     password: some-password
     username: exp

contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storgae
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch

current-context: ""

kind: Config
preferences: {}

구성 요소 

config 파일을 구성하는 항목에는 크게 아래 3가지로 분류할 수 있다.

쿠버네티스의 클러스터 정보로, development / scratch 클러스터에 대한 정보를 볼 수 있다. 

처음 클러스터 생성 시 복잡한 이름으로 생성되므로 name을 지정하여 알아보기 쉽게 바꿔주는 것이 좋다.

클러스터에 접근할 유저의 정보이다.

development 클러스터의 경우 인증서가, scratch 클러스터의 경우 패스워드가 필요한 것처럼 각 환경마다 필요한 값을 명시한다. 

cluster와 user를 조합하여 생성된 값이다. 

cluster의 name과 user의 name을 속성값으로 지정한 것을 확인 할 수 있다. 

dev-frontend 라는 context는 developer라는 user 정보로 development 클러스터의 frontend 네임스페이스에 접근하는 하나의 set이 되는 것이다. 


context 조회 및 변경

# exp-scratch로 context 변경
$ kubectl config --kubeconfig=config use-context exp-scratch

# exp-scratch context 설정 조회 
$ kubectl config --kubeconfig=config view --minify

# 모든 context 조회 
$ kubectl config get-contexts

# 현재 설정된 context 조회
$ kubectl config current-contexts

# context에 설정사항 추가 (ex.development cluster)
$ kubectl config --kubeconfig=config set-cluster development {option}

kubectx 도구 활용

간단하게 brew로 설치할 수 있는 도구로 context를 쉽게 변경할 수 있게 도움을 준다. 

kubectl config use-context exp-scratch 와 같이 긴 명령어를 사용하지 않아도 간편하게 context를 변경할 수 있다. 

# 사용 예 
$ kubectx
dev-frontend
dev-storage
exp-scratch

# context 변경
$ kubectx dev-frontend
Switched to context "dev-fronted".

# 이전 context로 돌아가기
$ kubectx -

 

(참고) https://kubernetes.io/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters/