여러 대의 Kubernetes 클러스터를 운영할 때는 각 클러스터의 컨트롤 플레인에 개별적으로 접속해 kubectl을 실행하기보다, 단일 관리 지점에서 kubectl로 통합 제어하는 방식이 관리 효율성과 보안 측면에서 더 유리하다. kubectl 패키지는 ~/.kube/config 파일에 담긴 인증정보로 Cluster에 접근하는데, 이를 Context 단위로 관리한다.
kubectl Context는 두 가지 정보로 이루어진다.
1) 클러스터
2) 유저
config에 클러스터 등록하기
kubectl과 K8S 클러스터는 TLS 통신을 한다. kubectl 서버는 클러스터에서 보낸 데이터가 정말 클러스터에서 보낸건지 검증을 해야한다. 그래서 클러스터에서 공식으로 발급한 CA PublicKey를 가지고 있어야 한다.
1) 접근하려는 Cluster에서 CA PublicKey를 ca.crt 파일 생성하기
kubectl -n kube-public get cm kube-root-ca.crt \
-o jsonpath='{.data.ca\.crt}' > /root/.kube/mgmt-cluster-ca.crt
2) kubectl 서버에서 config에 클러스터 정보를 등록하기
kubectl config set-cluster mgmt-cluster1 \
--server=https://192.168.1.40:6443 \
--certificate-authority=/root/.kube/mgmt-cluster-ca.crt \
--embed-certs=true
Cluster 서버에 생성된 ca.crt 파일을 kubectl 서버로 옮기고 위 명령어로 kubectl config에 클러스터를 등록한다. ~/kube/config 파일을 직접 수정해도 된다.
3) 생성된 클러스터 조회하기
root@cli-server:~# kubectl config get-clusters
NAME
mgmt-cluster1
config에 user 등록하기
K8S는 인증받은 권한있는 유저만 접근할 수 있다.
1) 접근하려는 Cluster에서 인증/권한을 가진 ServiceAccount 계정의 토큰 발급하기
# ServiceAccount 생성하고 권한 롤바인딩하기
kubectl -n kube-system create sa remote-admin
kubectl create clusterrolebinding remote-admin-binding \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:remote-admin
# 토큰 발급하기
TOKEN=$(kubectl create token remote-admin --duration=2160h -n kube-system)
echo $TOKEN
접근하려는 Cluster에서 서비스어카운트 계정을 생성하고 RBAC으로 권한을 바인딩 한 뒤, Token로 생성해서 kubectl 서버에 전달해야 한다. 토큰은 만료시간은 디폴트 1시간이므로, 3달 정도 만료시간을 옵션으로 늘려주었다. 적당한 만료시간을 부여하고 갱신하는 부가 프로세스를 구축하는 것이 좋다.
2) kubectl 서버에서 config에 유저 등록하기
kubectl config set-credentials mgmt-user --token="$(cat /root/.kube/mgmt-user-token.txt)"
클러스터에서 생성한 토큰을 kubectl 서버로 가져와 적당한 위치에 파일로 생성한다. 그리고 kubectl config 명령어로 Token을 참조하는 유저를 생성한다.
3) 생성된 유저 조회하기
root@cli-server:~# kubectl config get-users
NAME
mgmt-user
config에 context 등록하기
1) kubectl 서버에서 context 생성하기
kubectl config set-context mgmt-cluster1-context \
--cluster=mgmt-cluster1 \
--user=mgmt-user
접근하려는 클러스터 정보와 유저 정보를 config에 생성하였으니, 둘을 참조하는 context를 위 명령어로 등록하면 된다.
2) 생성된 context 조회하기
root@cli-server:~# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* mgmt-cluster1-context mgmt-cluster1 mgmt-user
Context 변경하기 ( 테스트 )
kubectl config use-context <context-name>
위 명령어로 조회된 Context 들 중 하나를 선택해서 kubectl 명령어를 수행하면 된다. 이로써, 하나의 서버에서 여러 클러스터에 kubectl 명령어를 수행할 수 있게 된다.
'DevOps > K8S' 카테고리의 다른 글
ArgoCD로 멀티 클러스터 배포 관리하기 (1) | 2025.08.25 |
---|---|
ETCD BackUp / Restore ( ETCD 백업 및 복원 ) (0) | 2025.06.22 |
Kubernetes 네트워크 동작원리 (0) | 2025.06.18 |
[K8S] Containerd에 Registry 설정하기 ( with Harbor ) (1) | 2025.06.04 |
kubectl alias 및 자동완성 설정하기 (0) | 2025.05.20 |