ServiceAccountがクラスタ内でアクセスできる名前空間を一覧表示できるようにするにはどうすればよいですか?

ServiceAccountがクラスタ内でアクセスできる名前空間を一覧表示できるようにするにはどうすればよいですか?

複数の名前空間を持つクラスターがあります。呼び出してみましょう。ns1また、サービスアカウントが複数あります。すべて 1 つのネームスペースで と とns2呼び出してみましょう。sa1sa2sa-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アクセスできるクラスタ内のすべての名前空間を一覧表示できます。この場合ns1ns2

この動作により、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を作成することです。

おすすめ記事