쿠버네티스 클러스터를 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......