관리 메뉴

Jacob Baek's home

Multi configured kubectl 본문

Cloud/Cloud Native

Multi configured kubectl

jacobbaek Jacob_baek 2019. 10. 28. 11:35

개발을 하다보면 개발용으로 minikube를 사용하고 실제 test 혹은 QA 용, production용으로 kubernetes를 다르게 두는 경우가 있다. 이와 같은 경우 어떤 방식으로 kubectl의 config를 설정하면 좋을지에 대하여 기술해본다.

 

우선 kubectl을 설치한다.

https://kubernetes.io/docs/tasks/tools/install-kubectl/

 

이후 minikube를 설치하고 production 환경의 kubernetes 정보를 확인한다.

 

kubectl 및 minikube를 처음 설치한 후에는 아래와 같이 config 정보를 확인해볼 수 있다.

PS C:\Users\Jacob> kubectl.exe config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority: C:\Users\Jacob\.minikube\ca.crt
    server: https://192.168.99.102:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: C:\Users\Jacob\.minikube\client.crt
    client-key: C:\Users\Jacob\.minikube\client.key

 

유의사항
여기서 유의해야할 점은 kubectl config view 출력결과를 복사해 넣는 방식이 아니라 .kube/config 내 certificate 정보까지 포함하여 local 에 .kube/config에 넣어주어야 한다.
이유는 kubectl config view는 실 certificate 정보를 출력시켜주지 않고 REDACTED 로 출력한다.
만약 이를 그대로 기입한 경우 certificate 를 찾는 행위가 이루어져 지정된 cluster name 과 공인된 인증서를 사용하지 않는 경우는 에러가 발생될 수 있다. 

 

이제 minikube가 아닌 실 production 환경의 config 파일을 확인하여 cluster, context, user 정보를 복사한다.

jacob@JACOB-DESKTOP:~/.kube$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.100.100:6443
  name: cluster.local
- cluster:
    certificate-authority: /mnt/c/Users/jacob/.minikube/ca.crt
    server: https://192.168.99.102:8443
  name: minikube
contexts:
- context:
    cluster: cluster.local
    user: kubernetes-admin
  name: kubernetes-admin@cluster.local
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: kubernetes-admin@cluster.local
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
- name: minikube
  user:
    client-certificate: /mnt/c/Users/jacob/.minikube/client.crt
    client-key: /mnt/c/Users/jacob/.minikube/client.key

복사를 통해 위와 같은 config 파일을 만들고 현 시점에 연결할 context 를 지정한다.

현 시점에 연결할 context 지정은 current-context에 지정된 context name을 기반으로 연결된다.

 

실제 contexts와 clusters 정보를 확인해보면 아래와 같다.

jacob@JACOB-DESKTOP:~/.kube$ kubectl config get-clusters
NAME
minikube
cluster.local

jacob@JACOB-DESKTOP:~/.kube$ kubectl config get-contexts
CURRENT   NAME                             CLUSTER         AUTHINFO                          NAMESPACE
*         kubernetes-admin@cluster.local   cluster.local   kubernetes-admin@clustser.local
          minikube                         minikube        minikube

 

multi cluster로 구성된 경우 아래와 같은 명령어로 실시간 변경이 가능하다.

jacob@JACOB-DESKTOP:~/.kube$ kubectl config use-context minikube
Switched to context "minikube".
jacob@JACOB-DESKTOP:~/.kube$ kubectl config get-contexts
CURRENT   NAME                             CLUSTER         AUTHINFO           NAMESPACE
          kubernetes-admin@cluster.local   cluster.local   kubernetes-admin
*         minikube                         minikube        minikube
jacob@JACOB-DESKTOP:~/.kube$ kubectl config use-context kubernetes-admin@cluster.local
Switched to context "kubernetes-admin@cluster.local".

 

참고로 namespace가 default여서 매번 -n, --namespace를 붙여줘야 해서 불편했는데 아래와 같은 명령을 통해

정된 namespace를 기본으로 사용할수도 있다.

 

kubectl config set-context --current --namespace=jacobtest

 

 

certificate 관련 참고

https://blog.naver.com/PostView.nhn?blogId=alice_k106&logNo=221492934710

 

참고사이트

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

- https://bryan.wiki/292

'Cloud > Cloud Native' 카테고리의 다른 글

minikube start in WSL2  (0) 2019.12.07
kubernetes troubleshooting  (0) 2019.11.14
Multi configured kubectl  (0) 2019.10.28
python application deploy with minikube  (0) 2019.09.28
Docker in centos  (0) 2019.06.07
application deploy using minikube  (0) 2017.09.04
0 Comments
댓글쓰기 폼