rbac-user의 컨텍스트에서 호출을하고 있으므로 , 아래 명령을 실행하면 kubectl 명령 권한에 문제가 발생합니다.
kubectl get pods -n rbac-test
아래와 같은 메세지로 에러가 발생합니다.
$ kubectl get pods -n rbac-test
Error from server (Forbidden): pods is forbidden: User "rbac-user" cannot list resource "pods" in API group "" in the namespace "rbac-test"
Role & Binding
1.Role/RoleBinding
새 사용자 rbac-user가 있지만 아직 어떤 역할에도 바인딩되지 않았습니다. 그렇게하려면 기본 관리자 사용자로 다시 전환해야합니다. 아래에서 처럼 kubectl API 조회가 되지 않습니다.
rbac-user로 정의하는 환경 변수를 설정 해제하려면 아래 명령을 실행합니다.
unset AWS_SECRET_ACCESS_KEY
unset AWS_ACCESS_KEY_ID
# 환경변수 설정이 해제되고 MASTER 권한으로 변경되었는지 확인합니다.
kubectl -n rbac-test get pods
다시 admin 사용자이고 더 이상 rbac-user가 아님을 확인하려면 앞서 저장해둔 master_sts.txt 파일 결과와 비교해 봅니다.
이제 다시 관리자 모드로 전환되었으므로 모든 kubectl 조회가 가능하지만, "rbac-user"에게 해당 네임 스페이스에 대해서만 pod-reader라는 Role을 만들어 봅니다. pod-reader의 Role은 rbac-test namespace에 대한 조회와 deploy등의 권한을 가지게 됩니다.
kubectl -n rbac-test get pods
아래에서 Role을 생성합다.
cat << EoF > ~/environment/rbac/rbacuser-role.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: rbac-test
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["list","get","watch"]
- apiGroups: ["extensions","apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch"]
EoF
rbac-user로서 다음을 실행하여 rbac 네임 스페이스에서 Pod 정보를 조회해 봅니다.
kubectl get pods -n rbac-test
whchoi:~/environment $ kubectl get pods -n rbac-test
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-lt6kc 1/1 Running 0 15m
rbac-user로 다음을 실행해서 권한이 제대로 바인딩되었는지 확인해 봅니다.
kubectl get pods -n kube-system
whchoi:~/environment $ kubectl get pods -n kube-system
Error from server (Forbidden): pods is forbidden: User "rbac-user" cannot list resource "pods" in API group "" in the namespace "kube-system"
rbac-user 에게는 pod-reader 권한만 주었기 때문에 get all은 에러가 발생합니다.