마구잡

Kubernetes 다중 클러스터 context 추가 및 에러 발생 시나리오 본문

Kubernetes/작은팁-짧은글

Kubernetes 다중 클러스터 context 추가 및 에러 발생 시나리오

MAGUJOB 2024. 10. 25. 16:54
728x90

Kubernetes 다중 클러스터

쿠버네티스를 관리하기 위한 가장 기본적인 툴로는 kubectl이 존재한다.

주 클러스터 1번에서 2번 클러스터를 관리하기 위한 context 추가 및 발생 가능한 에러에 대해 다뤄본다.

 

( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다.

이는 정확한 정보가 아닐 수 있음을 알려드립니다. )

공식 사이트

( 광고 클릭은 큰 힘이 됩니다! )

728x90

 

 

다중 클러스터 접근 구성

이 페이지에서는 구성 파일을 사용하여 다수의 클러스터에 접근할 수 있도록 설정하는 방식을 보여준다. 클러스터, 사용자, 컨텍스트가 하나 이상의 구성 파일에 정의된 다음 kubectl config use-conte

kubernetes.io

728x90

context 추가

주 클러스터 ~/.kube 경로에 2번 클러스터의 context를 추가한다.

config 파일 명은 크게 제약이 없으나 통일성을 위해 config2로 지정한다.

-rw-rw-r--  1 admin admin 11212 10월 22 13:31 config
-rw-rw-r--  1 admin admin  5674 10월 22 13:28 config2
필수적으로 처음부터 새로운 파일을 만들어야 하는것은 아니다.
또한, kubectl config set-* 명령어로 수동 생성이 가능하지만 상당히 귀찮기 때문에 파일 추가를 추천한다.

 

export를 통해 새로운 config 파일 적용(수출) 시키기

export KUBECONFIG=~/.kube/config:~/.kube/config2

 

추가된 config 확인

kubectl config get-contexts
CURRENT   NAME                              CLUSTER        AUTHINFO             NAMESPACE
          kubernetes-admin-2@kubernetes-2   kubernetes-2   kubernetes-admin-2
*         kubernetes-admin@kubernetes       kubernetes     kubernetes-admin

 

추가된 config 하나의 파일로 merge 적용

kubectl config view --merge --flatten > ~/.kube/merged-config

 

• --merge: 여러 설정 파일을 병합하여 하나의 출력으로 만든다.
• --flatten: 설정 파일 내에 참조된 사용자, 클러스터, 컨텍스트 정보를 병합된 파일에 직접 포함한다.

 

기존 config backup

mv ~/.kube/config ~/.kube/config.back
mv ~/.kube/merged-config ~/.kube/config

 

export 재적용

export KUBECONFIG=~/.kube/config

 

kubectl config view 확인

더보기
더보기

 

kubectl config view

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.60.180:6443
  name: kubernetes
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.60.177:6443
  name: kubernetes-2
contexts:
- context:
    cluster: kubernetes-2
    user: kubernetes-admin-2
  name: kubernetes-admin-2@kubernetes-2
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: DATA+OMITTED
    client-key-data: DATA+OMITTED
- name: kubernetes-admin-2
  user:
    client-certificate-data: DATA+OMITTED
    client-key-data: DATA+OMITTED

에러 발생 시나리오

1. 통신불가

주 클러스터 1번에서 2번 클러스터의 6443 포트, 혹은 그에 맞는 API 포트로 통신이 불가능한 경우 응답을 받아 올 수 없어 응답이 없다 타임아웃이 난다. 

Unable to connect to the server: dial tcp 192.168.60.177:6443: i/o timeout
방화벽이나 통신 상황을 확인하자

 

2. 중복 아이디 클러스터

쿠버네티스 context를 추가할땐 당연하게 클러스터 네임을 구분해야하며, 또한 클러스터 네임뿐만 아니라 유저 및 context명 또한 구분해야한다. 당연한 말처럼 들리겠지만 사실 생각보다 테스트 베드 구축에는 클러스터명, 유저, context명을 기본으로 계속 사용하는 경우가 대부분이다. 그럼 어떻게 위 요소들을 수정하는지 대부분 모르고 넘어간다는 소리다. 그 후 막상 context를 추가하면 아래와 같은 상황이 발생한다. 

error: error loading config file "/home/admin/.kube/config": error converting
... 중략
무슨 생전 처음보는 에러를 뱉는다 혹은 Bad TLS 뱉던가 한다.

 

수정 방법

별거 없다 그냥 복사한 config의 모든 구간에 구분자를 입력하면된다.

 

변경 전

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data:
    server: https://192.168.60.177:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin

 

변경 후

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: 
    server: https://192.168.60.177:6443
  name: kubernetes-2
contexts:
- context:
    cluster: kubernetes-2
    user: kubernetes-admin-2
  name: kubernetes-admin-2@kubernetes-2
current-context: kubernetes-admin-2@kubernetes-2
kind: Config
preferences: {}
users:
- name: kubernetes-admin-2
  user:

 


 

잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.

 

728x90