Exercise 6.3: Working with ServiceAccounts

  1. default 네임스페이스에 있는 Secret 확인

    kubectl get secret
  2. 모든 네임스페이스에 있는 Secret 확인

    kubectl get secret -A
  3. ServiceAccount 생성

    cat <<EOF | kubectl create -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: secret-access
    EOF
  4. ServiceAccount 생성 확인

    kubectl get sa secret-access
  5. ClusterRole 확인

    kubectl get clusterroles
  6. admin 과 cluster-admin 를 비교

    diff <(kubectl get clusterroles admin -o yaml) <(kubectl get clusterroles cluster-admin -o yaml) -y
  7. ClusterRole 생성

    cat <<EOF | kubectl create -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
     name: secret-access
    rules:
    - apiGroups:
      - ""
      resources:
      - secrets
      verbs:
      - get
      - list
    EOF
  8. ClusterRole 생성 확인

    kubectl get clusterrole secret-access
  9. RoleBinding 생성

    cat <<EOF | kubectl create -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     name: secret-access
    subjects:
    - kind: ServiceAccount
      name: secret-access
    roleRef:
     kind: ClusterRole
     name: secret-access
     apiGroup: rbac.authorization.k8s.io
    EOF
  10. RoleBinding 생성 확인

    kubectl get rolebindings secret-access
  11. Pod 생성

    cat <<EOF | kubectl create -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: kubectl
    spec:
      containers:
      - name: kubectl
        image: bitnami/kubectl
        command: [ "sleep" ]
        args: [ "infinity" ]
    EOF
  12. default 네임스페이스에 있는 Secret 확인

    kubectl exec -it kubectl -- kubectl get secrets
  13. Pod에 부여된 ServiceAccount 확인

    kubectl get pod kubectl -o yaml
  14. Pod 삭제

    kubectl delete pod kubectl
  15. Pod 생성

    cat <<EOF | kubectl create -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: kubectl
    spec:
      serviceAccountName: secret-access
      containers:
      - name: kubectl
        image: bitnami/kubectl
        command: [ "sleep" ]
        args: [ "infinity" ]
    EOF
  16. Pod에 부여된 ServiceAccount 확인

    kubectl get pod kubectl -o yaml | grep -i serviceaccount
  17. default 네임스페이스에 있는 Secret 확인

    kubectl exec -it kubectl -- kubectl get secrets
  18. Pod에 부여된 토큰 확인

    kubectl exec -it kubectl -- cat /var/run/secrets/kubernetes.io/serviceaccount/token
  19. https://jwt.io 에서 토큰 내용 확인

  20. 리소스 삭제

    {
        kubectl delete pod kubectl 
        kubectl delete rolebindings secret-access
        kubectl delete clusterrole secret-access
        kubectl delete sa secret-access
    }

Last updated