반응형

 

RBAC 개념 및 롤바인딩 : https://nirsa.tistory.com/154

 

  • 쿠버네티스 클러스터롤바인딩(clusterrolebinding) 이란?

클러스터롤은 특정 API나 리소스(pod,deploy 등), 사용권한(get, edit 등)을 매니페스트 파일에 명시해둔 규칙의 집합이 되며 클러스터 전체 사용 권한을 설정 해줍니다. 롤은 특정 네임스페이스의 권한만을 주므로 롤과 클러스터롤은 차이점이 있습니다.

클러스터롤바인딩은 사용자와 클러스터롤을 묶어주는 역할을 수행하고, 지정한 사용자들에 한해서 롤에 명시한 규칙들을 기준으로 권한을 사용할 수 있도록 관리 합니다.

 

  • 클러스터롤바인딩 구성

구성전에 간단한 디플로이먼트가 필요하며, 코드가 없으신분들은 아래 코드를 사용하시면 됩니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment
  labels:
    app: test-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-deployment
  template:
    metadata:
      labels:
        app: test-deployment
    spec:
      containers:
      - name: test-deployment
        image: nginx:1.7.9
        ports:
        - containerPort: 80

 

  • 1. 클러스터롤 생성
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: dev-clusterrole
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]
  • apiGroups → api를 선택할 수 있으며 deployment를 사용한다면 apps를 추가 해주어야 합니다.
  • resources → pods를 사용할 수 있도록 설정 하며 그 외의 것은 모두 사용 불가 입니다. 추가적으로 더 실행시키고 싶은 resource(deployment, daemonset 등)가 있으면 추가 해주시면 됩니다.
  • verbs → get을 사용할 수 있도록 설정 하며 list가 없을 경우 resources와 apiGroups를 가져오지 못하는 상황이 발생하기 때문에 list를 넣어 주었습니다. 추가적으로 더 실행시키고 싶은 verbs(describe, edit, scale 등)이 있으면 추가 해주시면 됩니다.

 

  • 2. 사용자 생성

우선 아래 코드를 이용하여 ServiceAccount를 생성 후 apply 합니다.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: dev01
  namespace: default

 

이후 아래 과정을 거쳐서 생성한 ServiceAccount의 secret token 값을 가져옵니다.

 

위 사진의 경우 token: 바로 앞인 eyJhb~~ 부분부터 복사 후 아래 명령어를 입력 합니다. 참고로 아래 명령어는 모두 $HOME_DIR/.kube/config 파일에 입력되며 해당 파일에서 직접 추가,수정,삭제를 해주셔도 됩니다.

# kubectl config set-credentials [생성할 계정명] --token=[확인한 secret token 값]
kubectl config set-credentials dev01 --token=eyJhb~~

# 아래 명령어 입력 후 클러스터명을 확인
kubectl config get-clusters

# kubectl config set-context [생성할 context명] --cluster=[확인한 클러스터명] --user=[위에서 생성한 계정명]
kubectl config set-context dev-user --cluster=cluster.local --user=dev01

## 참고 : 삭제 명령은 kubectl config delete-context [context명]

 

  • 3. 클러스터롤바인딩 생성
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: dev-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: dev01
  namespace: default
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: dev-clusterrole
  apiGroup: rbac.authorization.k8s.io

 

  • context 전환 및 클러스터롤바인딩 확인

위에서 생성했던 context 으로 전환 해주세요.

# 사용 가능한 context 확인
kubectl config get-contexts

# dev-user context로 전환
# kubectl config use-context [변경할 context]
kubectl config use-context dev-user

# 현재 사용중인 context 확인
kubectl config current-context

 

kubectl get all을 하면 권한을 설정한 pods 말고는 모두 에러가 발생 합니다.

 

마지막으로, 해당 context는 권한이 한정되어 있으므로  다시 원래의 context로 전환 해주셔야 정상적인 이용이 가능 합니다.

# 사용 가능한 context 확인
kubectl config get-contexts

# dev-user context로 전환
# kubectl config use-context [변경할 context]
kubectl config use-context kubernetes-admin@cluster.local

# 현재 사용중인 context 확인
kubectl config current-context

 

반응형

+ Recent posts