본문 바로가기
IT 기술/k8s

[k8s] kubeadm token 생성하기.

by Geunny 2024. 5. 15.
반응형

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-token/#cmd-token-create

 

kubeadm token

Bootstrap tokens are used for establishing bidirectional trust between a node joining the cluster and a control-plane node, as described in authenticating with bootstrap tokens. kubeadm init creates an initial token with a 24-hour TTL. The following comman

kubernetes.io

 

쿠버네티스에서 클러스터를 추가하려면 kubeadm 을 이용하여 마스터노드에 연결해 주어야 한다.

 

이를 위해서는 token 이 사용되는데 해당 token 은 kubeadm 에서 관리가 가능하다.

 

먼저 kubeadm token에 관련된 명령어 들이다.

 

$ kubeadm token -h

This command manages bootstrap tokens. It is optional and needed only for advanced use cases.

In short, bootstrap tokens are used for establishing bidirectional trust between a client and a server.
A bootstrap token can be used when a client (for example a node that is about to join the cluster) needs
to trust the server it is talking to. Then a bootstrap token with the "signing" usage can be used.
bootstrap tokens can also function as a way to allow short-lived authentication to the API Server
(the token serves as a way for the API Server to trust the client), for example for doing the TLS Bootstrap.

What is a bootstrap token more exactly?
 - It is a Secret in the kube-system namespace of type "bootstrap.kubernetes.io/token".
 - A bootstrap token must be of the form "[a-z0-9]{6}.[a-z0-9]{16}". The former part is the public token ID,
   while the latter is the Token Secret and it must be kept private at all circumstances!
 - The name of the Secret must be named "bootstrap-token-(token-id)".

You can read more about bootstrap tokens here:
  https://kubernetes.io/docs/admin/bootstrap-tokens/

Usage:
  kubeadm token [flags]
  kubeadm token [command]

Available Commands:
  create      Create bootstrap tokens on the server
  delete      Delete bootstrap tokens on the server
  generate    Generate and print a bootstrap token, but do not create it on the server
  list        List bootstrap tokens on the server

Flags:
      --dry-run             Whether to enable dry-run mode or not
  -h, --help                help for token
      --kubeconfig string   The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. (default "/etc/kubernetes/admin.conf")

Global Flags:
      --add-dir-header           If true, adds the file directory to the header of the log messages
      --log-file string          If non-empty, use this log file (no effect when -logtostderr=true)
      --log-file-max-size uint   Defines the maximum size a log file can grow to (no effect when -logtostderr=true). Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
      --one-output               If true, only write logs to their native severity level (vs also writing to each lower severity level; no effect when -logtostderr=true)
      --rootfs string            [EXPERIMENTAL] The path to the 'real' host root filesystem.
      --skip-headers             If true, avoid header prefixes in the log messages
      --skip-log-headers         If true, avoid headers when opening log files (no effect when -logtostderr=true)
  -v, --v Level                  number for the log level verbosity

 

토큰생성

# 마스터 노드에서 진행
$ kubeadm token create
rpsjnv.fdvexitnh8z7impx

 

create 명령어를 통해 토큰 생성이 가능하다.

이때 결과값으로 토큰값이 출력이 된다.

 

하지만 워커노드에서 토큰을 등록하려면 쿠버네티스에서 사용되는 인증서와 같은 ca-cert 의 hash 값이 필요하다.

ca-cert의 해쉬값은 아래 명령어를 통해 확인이 가능하다.

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-join/#token-based-discovery-with-ca-pinning

 

kubeadm join

This command initializes a Kubernetes worker node and joins it to the cluster. Run this on any machine you wish to join an existing cluster Synopsis When joining a kubeadm initialized cluster, we need to establish bidirectional trust. This is split into di

kubernetes.io

 

 

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \
| openssl rsa -pubin -outform der 2>/dev/null \
| openssl dgst -sha256 -hex | sed 's/^.* //'
# <ca-cert hash 값이 hex 형태로 출력됨>

 

해당 명령어를 hash 값이 생성된다면 클러스터에 포함될 worker 노드에서 아래 명령어를 통해 마스터노드에 추가될 수 있다.

 

$ kubeadm join --discovery-token <생성한 토큰값> \
--discovery-token-ca-cert-hash sha256:<hash값> <마스터노드ip>:6443

 

여기서 <마스터노드ip>:6443 은 마스터 노드에서 동작하는 kube-apiserver 의 LISTEN 포트이다. 

 

 

 

참고) 토큰 생성시 --print-join-command 옵션을 넣어준다면 토큰생성과 동시에 join 명령어를 한번에 출력시켜준다.

 

$ kubeadm token create --print-join-command
kubeadm join 192.168.64.30:6443 --token t971hd.194xtdfkahe7g4gl \
--discovery-token-ca-cert-hash sha256:<hash값>

 

 

kubectl 명령어를 통해 워커노드의 상태가 Ready 가 되었는지 확인한다.

 

$ kubectl get nodes
NAME          STATUS   ROLES           AGE    VERSION
k8s-master    Ready    control-plane   102d   v1.27.2
k8s-worker1   Ready    <none>          83d    v1.27.2

 

 

더보기

kubeadm 토큰의 유효기간은 24시간까지이다.

토큰 생성시점이 24시간이 지날 경우 유효기간이 지나기에 토큰의 재생성이 필요하다.

 

'IT 기술 > k8s' 카테고리의 다른 글

[cka] ReplicaSets  (0) 2024.05.27
[cka] kodecloud PODs 생성하기.  (0) 2024.05.27
[k8s] etcd 백업 / 복원 하기  (0) 2024.05.09
[k8s] 노드 상태 다루기 [drain/cordon/uncordon]  (0) 2024.04.25
[k8s] InitContainer  (0) 2024.04.23

댓글