複数の名前空間を持つクラスターがあります。呼び出してみましょう。ns1
また、サービスアカウントが複数あります。すべて 1 つのネームスペースで と と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
2人のユーザーが必要で、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を作成することです。