K8S 클러스터를 등록하기 위해서는 클러스터의 Admin Token을 확인해야 합니다.
Admin Token이란 ClusterRole/cluster-admin이 ClusterRoleBinding된 ServiceAccount의 Token 값을 의미합니다.
시작 전 준비
안내
Admin Token을 확인하기 전에 다음 내용을 확인하고 준비하세요.
- kubectl CLI 사용이 가능한 환경
- 클러스터 Admin 권한 확인
- ClusterRole, ClusterRoleBinding 조회 및 생성
- Namespace, ServiceAccount 조회 및 생성
- ClusterRole 중 cluster-admin 조회 됨
배경색 변경
$ kubectl get clusterrole cluster-admin
NAME CREATED AT
cluster-admin 2022-12-09T08:21:50Z$ kubectl get clusterrole cluster-admin
NAME CREATED AT
cluster-admin 2022-12-09T08:21:50ZAdmin Token 조회하기
기존 생성된 Admin Token 조회하기
- ClusterRole/cluster-admin이 binding 되어 있는 ClusterRoleBinding을 조회하세요.
- ClusterRoleBinding 된 ServiceAccount를 확인하세요.배경색 변경
# admin token 조회 $ kubectl get clusterrolebinding | grep ClusterRole/cluster-admin [crb_name] ClusterRole/cluster-admin 77d $ kubectl describe clusterrolebinding [crb_name] Name: [crb_name] Labels: <none> Annotations: <none> Role: Kind: ClusterRole Name: cluster-admin Subjects: Kind Name Namespace ---- ---- --------- ServiceAccount [sa_name] [namespace_name]# admin token 조회 $ kubectl get clusterrolebinding | grep ClusterRole/cluster-admin [crb_name] ClusterRole/cluster-admin 77d $ kubectl describe clusterrolebinding [crb_name] Name: [crb_name] Labels: <none> Annotations: <none> Role: Kind: ClusterRole Name: cluster-admin Subjects: Kind Name Namespace ---- ---- --------- ServiceAccount [sa_name] [namespace_name]기존 생성된 Admin Token 조회 결과 - ServiceAccount에 연결된 Secret을 확인하고, token(Admin Token)을 조회하세요.배경색 변경
# Secret 조회 $ kubectl get secret -n [namespace_name] | grep [sa_name] [sa_name]-token-xxxxx kubernetes.io/service-account-token 3 77d # token 조회 $ kubectl describe secret [sa_name]-token-xxxxx -n [namespace_name] Name: [sa_name]-token-xxxxx ...<중략>... Data ==== ca.crt: 1070 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiI...# Secret 조회 $ kubectl get secret -n [namespace_name] | grep [sa_name] [sa_name]-token-xxxxx kubernetes.io/service-account-token 3 77d # token 조회 $ kubectl describe secret [sa_name]-token-xxxxx -n [namespace_name] Name: [sa_name]-token-xxxxx ...<중략>... Data ==== ca.crt: 1070 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiI...ServiceAccount에 연결된 Secret, token 조회 결과
Admin Token 생성하기
- ServiceAccount를 생성할 Namespace를 생성하세요. 이미 생성되어 있다면 다음 단계를 진행하세요.배경색 변경
$ kubectl create namespace [namespace_name] # ex) kubectl create namespace my-app$ kubectl create namespace [namespace_name] # ex) kubectl create namespace my-appAdmin Token 생성 명령어 - [namespace_name]-additional-cluster-admin-sa.yaml 파일을 생성 후 실행하세요.배경색 변경
apiVersion: v1 kind: ServiceAccount metadata: name: [namespace_name]-additional-cluster-admin namespace: [namespace_name]apiVersion: v1 kind: ServiceAccount metadata: name: [namespace_name]-additional-cluster-admin namespace: [namespace_name]ServiceAccount 작성 예시 배경색 변경# ServiceAccount 생성 $ kubectl apply -f [namespace_name]-additional-cluster-admin-sa.yaml -n [namespace_name] # ex) kubectl apply -f my-app-additional-cluster-admin-sa.yaml -n my-app# ServiceAccount 생성 $ kubectl apply -f [namespace_name]-additional-cluster-admin-sa.yaml -n [namespace_name] # ex) kubectl apply -f my-app-additional-cluster-admin-sa.yaml -n my-appServiceAccount 생성 명령어 - [namespace_name]-additional-cluster-admin-crb.yaml 파일을 생성 후 실행하세요.배경색 변경
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: [namespace_name]-additional-cluster-admin subjects: - kind: ServiceAccount name: [namespace_name]-additional-cluster-admin namespace: [namespace_name] roleRef: kind: ClusterRole name: cluster-admin apiGroup: ""kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: [namespace_name]-additional-cluster-admin subjects: - kind: ServiceAccount name: [namespace_name]-additional-cluster-admin namespace: [namespace_name] roleRef: kind: ClusterRole name: cluster-admin apiGroup: ""ClusterRoleBinding 작성 예시 배경색 변경# ClusterRoleBinding 생성 $ kubectl apply -f [namespace_name]-additional-cluster-admin-crb.yaml # ex) kubectl apply -f my-app-additional-cluster-admin-crb.yaml# ClusterRoleBinding 생성 $ kubectl apply -f [namespace_name]-additional-cluster-admin-crb.yaml # ex) kubectl apply -f my-app-additional-cluster-admin-crb.yamlClusterRoleBinding 생성 명령어 - ServiceAccount에 연결된 Secret을 확인하고, token(Admin Token)을 조회하세요.배경색 변경
# Secret 조회 $ kubectl get secret -n [namespace_name] | grep [namespace_name]-additional-cluster-admin [namespace_name]-additional-cluster-admin-token-xxxxx kubernetes.io/service-account-token 3 4m53s # token 조회 $ kubectl describe secret [namespace_name]-additional-cluster-admin-token-xxxxx -n [namespace_name] Name: [namespace_name]-additional-cluster-admin-token-xxxxx ...<중략>... Data ==== ca.crt: 1111 bytes namespace: 6 bytes token: eyJhbGciOiJSUzI1Ni...# Secret 조회 $ kubectl get secret -n [namespace_name] | grep [namespace_name]-additional-cluster-admin [namespace_name]-additional-cluster-admin-token-xxxxx kubernetes.io/service-account-token 3 4m53s # token 조회 $ kubectl describe secret [namespace_name]-additional-cluster-admin-token-xxxxx -n [namespace_name] Name: [namespace_name]-additional-cluster-admin-token-xxxxx ...<중략>... Data ==== ca.crt: 1111 bytes namespace: 6 bytes token: eyJhbGciOiJSUzI1Ni...ServiceAccount에 연결된 Secret, token 조회 결과 참고생성된 Secret이 없다면(Kuberentes 1.24이후 버전) 직접 생성 후 token을 조회하세요.배경색 변경apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: [namespace_name]-additional-cluster-admin-token namespace: [namespace_name] annotations: kubernetes.io/service-account.name: "[namespace_name]-additional-cluster-admin"apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: [namespace_name]-additional-cluster-admin-token namespace: [namespace_name] annotations: kubernetes.io/service-account.name: "[namespace_name]-additional-cluster-admin"secret 작성 예시
Admin Token 유효성 확인하기
~/.kube/config 파일을 수정해서 조회한 Admin Token 값의 유효성을 확인할 수 있습니다.
~/.kube/config파일의 사용자 인증에 token을 사용하도록 수정하세요.ex) users[0].user.token으로 수정 후 Admin Token 값을 입력하세요.배경색 변경apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0... server: https://devopscluster-12345.sk... name: devopscluster-12345 contexts: - context: cluster: devopscluster-12345 user: user name: user@devopscluster-12345 current-context: user@devopscluster-12345 kind: Config users: - name: user user: token: [admin_token]apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0... server: https://devopscluster-12345.sk... name: devopscluster-12345 contexts: - context: cluster: devopscluster-12345 user: user name: user@devopscluster-12345 current-context: user@devopscluster-12345 kind: Config users: - name: user user: token: [admin_token]~/.kube/config 수정 예시 kubectl명령어를 실행해서 cluster-admin 권한이 있는지 확인하세요.배경색 변경$ kubectl get nodes $ kubectl get namespace $ kubectl get all -n kube-system $ kubectl create namespace admin-test $ kubectl delete namespace admin-test # 기타 명령어 실행$ kubectl get nodes $ kubectl get namespace $ kubectl get all -n kube-system $ kubectl create namespace admin-test $ kubectl delete namespace admin-test # 기타 명령어 실행cluster-admin 권한 확인 명령어