kubernetes | user용 kubeconfig 생성

쿠버네티스 클러스터를 API를 이용해서 제어할때 모든 권한을 갖고있는 admin계정이아니고 별도의 계정을 제공하기 위한 방법. kubeconfig

Create Service Account

kubectl create serviceaccount toy-service-account -n toy

Create SA Token

apiVersion: v1
kind: Secret
metadata:
  name: toy-sa-token
  namespace: toy
  annotations:
    kubernetes.io/service-account.name: toy-service-account
type: kubernetes.io/service-account-token

Create Role

권한은 필요한 것만 부여한다.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: toy
  name: toy-namespace-full-access
rules:
- apiGroups: [""] # ""는 기본 API 그룹(Core API)임
  resources: ["pods", "services", "configmaps", "secrets"] # 사용할 리소스 종류
  verbs: ["get", "list", "create", "update", "delete", "watch"] # 허용할 작업
- apiGroups: ["apps"] # "apps" API 그룹(예: deployments)
  resources: ["deployments", "replicasets"]
  verbs: ["get", "list", "create", "update", "delete", "watch"]

Create RoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: toy-rolebinding
  namespace: toy
subjects:
- kind: ServiceAccount
  name: toy-service-account
  namespace: toy
roleRef:
  kind: Role
  name: toy-namespace-full-access
  apiGroup: rbac.authorization.k8s.io

Get Token

kubectl describe -n toy secrets toy-sa-token | grep token | tail -1

Config 파일 작성 샘플

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: lipsum...
    server: https://192.168.0.181:6443
  name: hm-k8s
contexts:
- context:
    cluster: hm-k8s
    namespace: toy
    user: toy-user
  name: toy-context
current-context: toy-context
kind: Config
preferences: {}
users:
- name: toy-user
  user:
    token: lipsum......