반응형
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-token/#cmd-token-create
쿠버네티스에서 클러스터를 추가하려면 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의 해쉬값은 아래 명령어를 통해 확인이 가능하다.
$ 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 |
댓글