[kubernetes] kubeadm join 시 필요한 정보 확인

Kubernetes는 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 오픈 소스 플랫폼이며, 다양한 환경에서 일관된 애플리케이션 실행을 가능하게 해주는 컨테이너 오케스트레이션 도구입니다.

 

kubeadm join 명령어는 Kubernetes 클러스터에 새로운 노드를 추가할 때 사용되는 명령어입니다.
이때 각각의 옵션을 추가하여 필요한 정보를 입력하면 Master(또는 Control Plane) 노드로 추가하거나 Worker 노드로 추가할 수 있습니다. 각각의 경우, kubeadm join을 실행할 때 필요한 정보가 어떤 것인지 확인하고 설정하는 방법을 확인해보도록 하겠습니다.

 

 


kubeadm join 시 필요한 정보 확인

 

 

0. 기본 명령어 구조

kubeadm join 시 사용하는 명령어의 기본적인 구조는 아래와 같습니다.

아래 명령어를 확인 후 필요한 정보에 대한 상세 정보를 확인해봅시다.

kubeadm join <IP:Port> \
          --token <TOKEN> \
          --discovery-token-ca-cert-hash sha256:<HASH> \
          --control-plane --certificate-key <CERTIFICATE_KEY>

 

 

 

1. Master 노드 IP 및 Port

클러스터에 처음 초기화된 Master(또는 Control Plane) 노드의 IP 주소입니다.
Port는 클러스터의 API 서버가 사용하는 정보로 기본적으로 6443번을 사용합니다.

 

필수 값으로 IP:Port 형태로 옵션을 추가하여 사용합니다.

 

 

 

2. token 확인 및 발급 방법

클러스터에 노드를 추가하는 인증 토큰입니다.
필수 값으로 --token <TOKEN> 형태로 옵션을 추가하여 사용합니다.

 

token 확인 시 kubeadm token list 명령어를 사용하여 현재 발급된 token 값을 확인합니다.
발급 시 기본적으로 24시간의 TTL을 가집니다.

# kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
tu3evj.a78mjq13wnb144gz   23h         2024-11-01T01:29:43Z   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

 

 

token 발급 시에는 kubeadm token create 명령어를 사용하며 신규 발급을 할 수 있습니다.

kubeadm init 시에는 자동으로 기본 token 값이 발급됩니다.

# kubeadm token create
vr7t89.jxazmg5p92o9b64u

 

 

 

3. CA 인증서 확인 방법

클러스터의 CA 인증서에 대한 SHA-256 해시 값으로 API 서버에 연결할 때 인증서를 검증하기 위한 값입니다.
필수 값으로 --discovery-token-ca-cert-hash <HASH> 형태로 옵션을 추가하여 사용합니다.

 

CA 인증서 파일은 기본 경로인 /etc/kubernetes/pki/ca.crt 경로에 생성되며 아래 명령어를 통해 Hash 값을 확인할 수 있습니다.

# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \
    openssl rsa -pubin -outform der 2>/dev/null | \
    sha256sum | \
    awk '{print $1}'
48ebf1c55897a3d0e55c19e75648d457b6309f4f0b8c88ae5e3dc871c0d8a1a5

 

 

 

4. 클러스터 인증서 확인 및 발급 방법

클러스터 인증서란 추가 노드를 Worker 노드가 아닌 Master(또는 Control Plane) 노드로 추가하기 위해 클러스터 부트스트랩(bootstrap) 과정에서 클러스터의 컨트롤 플레인 노드 간에 비밀 값을 공유하기 위한 인증서입니다. Master 노드로 추가 시에만 사용하는 옵션으로 --control-plane --certificate-key <CERTIFICATE_KEY> 형태로 옵션을 추가하여 사용합니다.

 

인증서 발급 시 인증서를 사용하기 위한 키 값이 생성되며 발급 과정에서 키를 복사 후 사용해야 됩니다.
만약 키를 잃어버렸다면, 인증서를 재발급 하거나 클러스터를 재구성해야 할 수 있습니다.

 

클러스터 인증서 발급 여부를 확인하기 위해 kubectl get 명령어와 kubectl describe 명령어를 사용할 수 있습니다.

### 클러스터 인증서 발급 확인
# kubectl get secret kubeadm-certs -n kube-system
NAME            TYPE     DATA   AGE
kubeadm-certs   Opaque   8      7m58s


### 클러스터 인증서 상세 내용 확인
# kubectl describe secret kubeadm-certs -n kube-system
Name:         kubeadm-certs
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
sa.pub:              479 bytes
ca.crt:              1135 bytes
ca.key:              1707 bytes
etcd-ca.crt:         1122 bytes
etcd-ca.key:         1703 bytes
front-proxy-ca.crt:  1151 bytes
front-proxy-ca.key:  1707 bytes
sa.key:              1703 bytes

 

클러스터 인증서 발급 여부만 확인할 수 있으며 키는 확인할 수 없습니다.

 

 

인증서를 신규 발급 및 재발급 시에는 kubeadm init phase upload-certs --upload-certs 명령어를 사용합니다.
클러스터가 이미 초기화된 후에 인증서를 업로드하거나 갱신할 때 사용하는 명령어 입니다.

# kubeadm init phase upload-certs --upload-certs
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
60796e6a29ed231d32af9d59f557c858789166a4809f6296374ae7073d2bfd96

 

 

클러스터 초기화 단계에서 인증서를 생성 및 업로드할 경우에는 kubeadm init --upload-certs 명령어를 통해 클러스터 초기화와 인증서를 생성 및 업로드 작업을 한번에 할 수 있습니다.

# kubeadm init --upload-certs
===== 이후 클러스터 초기화 =====

 

 

 


 

Kubernetes의 kubeadm join 명령어 사용 시 필요한 정보를 확인해봤는데요.

 

새로운 노드를 클러스터에 추가하려면 Master 노드 IP 및 Port, 토큰(Token), CA 인증서 해시, 클러스터 인증서 등이 필요합니다. 각각의 정보들은 명령어를 통해 확인 및 발급하여 관리할 수 있습니다. 클러스터 인증서 같은 경우에는 발급 시에만 키 값을 확인할 수 있어 발급 과정에서 키를 복사 후 저장하여 사용해야 됩니다. 클러스터 추가 시 필요한 정보들을 명확히 확인 후 잘 사용하시기 바랍니다.

 

지금까지 Kubernetes의 kubeadm join 명령어 사용 시 필요한 정보를 확인해보는 방법을 알아봤습니다....! 끝...!

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

 

 

 

[Reference]
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/

 

 

 

+ Recent posts