여러 네임스페이스가 있는 클러스터가 있습니다. 호출해 보겠습니다. ns1
또한 서비스 계정이 여러 개 있습니다. 모두 하나의 네임스페이스에서 및 이라고 ns2
호출해 보겠습니다 .sa1
sa2
sa-ns
두 사용자 모두 두 네임스페이스의 모든 리소스에 액세스할 수 있지만 자신이 속한 네임스페이스를 나열할 수는 없습니다. kubectl get ns --as=sa1
반품:
Error from server (Forbidden): namespaces is forbidden: User "sa1" cannot list resource "namespaces" in API group "" at the cluster scope
나열할 네임스페이스를 수동으로 지정하는 경우에만 작동합니다.
kubectl get ns ns1 --as=sa1
NAME STATUS AGE
ns1 Active 6d6h
두 명의 사용자가 필요하며 sa1
이들이 sa2
액세스할 수 있는 클러스터 내의 모든 네임스페이스를 나열할 수 있습니다. 이 경우 ns1
및 ns2
.
이 동작으로 인해 Lens 대시보드에 네임스페이스와 해당 리소스를 나열하지 못할 수도 있습니다. 네임스페이스 목록에서는 sa-ns
사용자가 sa1
속한 sa2
네임스페이스 만 나열할 수 있습니다. 그런데 아래 이미지처럼 대시보드가 비어있습니다.
사용자가 Lens의 기능을 통해 실제로 액세스할 수 있는 네임스페이스를 추가하려고 시도했지만 ACCESSIBLE NAMESPACES
역시 작동하지 않았습니다.
아직 아무것도 보이지 않고 빈 대시보드만 보입니다.
서비스 계정:
apiVersion: v1
kind: ServiceAccount
metadata:
name: sa1
namespace: sa-ns
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: sa2
namespace: sa-ns
역할:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: admin-role
namespace: ns1
rules:
- apiGroups:
- "*"
resources:
- "*"
verbs:
- "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: admin-role
namespace: ns2
rules:
- apiGroups:
- "*"
resources:
- "*"
verbs:
- "*"
역할 바인딩:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: admin-role-binding
namespace: ns1
roleRef:
kind: Role
name: admin-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: sa1
namespace: sa-ns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: admin-role-binding
namespace: ns2
roleRef:
kind: Role
name: admin-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: sa2
namespace: sa-ns
ClusterRole
대신 사용해 보았지만 Role
아무것도 바뀌지 않았습니다.
답변1
따라서 여기서 문제는 클러스터 전체 네임스페이스 리소스에 대한 액세스 권한이 없으므로 보유한 역할/역할 바인딩 조합에 포함되지 않는다는 것입니다. 다소 비직관적으로도 ClusterRole을 역할 바인딩과 결합하면 단일 네임스페이스에만 권한이 부여되므로 이것이 작동하지 않습니다.
이 문제를 해결하는 가장 좋은 방법은 아마도 ClusterRole을 생성하고 네임스페이스 리소스에 대한 GET 및 LIST 권한을 제공한 다음 ClusterRole의 각 서비스 계정에 대해 ClusterRoleBinding을 생성하는 것입니다.