728x90

드문드문 k8s를 사용하다보니 매번 반복적으로 쉬운 것들을 잊곤 합니다.
오랜만에 또 새로운 클러스터를 새로운 환경에 만드느라 삽질하는 요즈음,
잊었던 것들을 또 하나씩 적어 볼까 합니다.

ServiceAccount 생성

이번에는 CI/CD 연동 등을 통해 k8s 클러스터에 대한 작업을 같이 수행하고 있습니다. 
빌드 배포시마다 k8s 환경이 잘 구축되어 있는지를 점검하려는 욕심에 그만...
그래서 ServiceAccount 의 생성이 필요해졌습니다.

요약하면... 걍 만들면 됩니다.
그래도 우리는 선언적으로 만드는게 좋겠죠.
네, drone을 쓰려는 중입니다 ㅎㅎ

apiVersion: v1
kind: ServiceAccount
metadata:
  name: drone-bot

 

Role 선언

이번엔 ServiceAccount에 연결할 Role을 정의해 봅시다.
Role을 정의하려다 보니 apiGroups와 해당되는 resources
그리고 사용 가능한 verbs가 뭐가 있는지 또 헤메기 시작합니다. 

% kubectl api-resources -o wide

kubectl로 위 명령을 입력하면 필요한 모든 것들이 쫘아악~
필요한 권한과 대상 리소스에 대한 내용을 확인하면 됩니다. 
늘 느끼는 거지만 APIVERSION은 왜 이리 아스트랄한지...

몇 가지 골라서 일단 때려 넣습니다.
보안 헛점은 일단 고려치 않습니다 ㅎㅎ
필요한 동사들은 조금 더 발라내 봐야겠네요. 

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: drone-bot
rules:
  - apiGroups: [""]
    resources: ["configmaps", "secrets", "services", "namespaces"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]
  - apiGroups: ["networking.k8s.io"]
    resources: ["ingresses"]
    verbs: ["get", "list","watch", "create", "update", "patch", "delete"]

복수형에 주의하시고, 
엉뚱한 apiGroups에 넣지 않도록 주의합시다!

ServiceAccount와 Role을 연결하는 RoleBinding

이렇게 두개의 k8s 객체를 만들었으니 이제 연결해야겠죠?
RBAC으로 권한 부여를 할 것이기 때문에 RoleBinding을 하면 됩니다. 
이름이 다 drone-bot이라 헷갈릴 수 있지만...

metadata.name 은 RoleBinding의 이름이고
subjects.kind[].name은 생성한 ServieAccount의 이름이며
roleRef.name은 생성한 Role의 이름입니다. 

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: drone-bot
subjects:
  - kind: ServiceAccount
    name: drone-bot
roleRef:
  kind: Role
  name: drone-bot
  apiGroup: rbac.authorization.k8s.io

 

그럼... 이제 생성해보러...

728x90

+ Recent posts