클러스터 Admin Token 확인하기

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:50Z
cluster-admin ClusterRole 조회 결과

Admin Token 조회하기

기존 생성된 Admin Token 조회하기

  1. ClusterRole/cluster-admin이 binding 되어 있는 ClusterRoleBinding을 조회하세요.
  2. 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 조회 결과
  3. 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 생성하기

  1. ServiceAccount를 생성할 Namespace를 생성하세요. 이미 생성되어 있다면 다음 단계를 진행하세요.
    배경색 변경
    $ kubectl create namespace [namespace_name]
    
    # ex) kubectl create namespace my-app
    $ kubectl create namespace [namespace_name]
    
    # ex) kubectl create namespace my-app
    Admin Token 생성 명령어
  2. [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-app
    ServiceAccount 생성 명령어
  3. [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.yaml
    ClusterRoleBinding 생성 명령어
  4. 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 값의 유효성을 확인할 수 있습니다.

  1. ~/.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 수정 예시
  2. 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 권한 확인 명령어
K8S 클러스터
VM서버 그룹