클러스터 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 권한 확인 명령어