k8s RBAC は、通常のシステム ユーザーに名前空間へのアクセスを許可します。

背景: 最近問題が発生しました。つまり、Kubernetes リソースの使用権とアクセス権を他のユーザーと共有する必要があります。これは特定の名前空間の下にのみ存在しますが、すべての管理者権限を与えることはできません。この名前空間に基づく権限を彼に付与した場合はどうすればよいですか?

たとえば、ユーザーに Namespace データへのアクセス許可を付与するだけですが、これを実現するには Kubernetes の RBAC メカニズムを使用する必要があります。以下にその操作プロセスを記録します。

1.広告ユーザーのキーを作成します

cd /etc/kubernetes/ssl/

penssl req -new -key ads.key -out ads.csr -subj "/CN=ads"

openssl x509 -req -in ads.csr -CA /etc/kubernetes/ssl/ca.pem -CAkey /etc/kubernetes/ssl/ca-key.pem -CAcreateserial -out ads.crt -days 365

openssl x509 -in ads.crt -text -noout

注:使用https://github.com/easzlab/kubeasz创建的k8s,其密钥等默认位置为/etc/kubernetes/ssl

2. クラスター広告構成とユーザー コンテキストを変更する

## 为ads用户项设置基础认证选项
kubectl config set-credentials ads --client-certificate=/etc/kubernetes/ssl/ads.crt --client-key=/etc/kubernetes/ssl/ads.key --embed-certs=true
## 设置上下文
kubectl config set-context ads --cluster=ads-cluster --user=ads --namespace=data

3. 認証用に次のファイルを編集します。

################## cat ads.yaml 
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: data
  name: data
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: data
  namespace: data
subjects:
- kind: User
  name: ads
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: data
  apiGroup: rbac.authorization.k8s.io

kubectl apply -f ads.yaml を実行します。 

4番目に、adsファイルのconfig構成ファイルをエクスポートします。

################# cat ads.sh 
server=https://10.2.33.80:6443
namespace=data
cluster_ca=$(cat /etc/kubernetes/ssl/ca.pem |base64 -w 0)
user_ca=$(cat /etc/kubernetes/ssl/ads.crt | base64 -w 0)
token=$(cat /etc/kubernetes/ssl/ads.key | base64 -w 0)
 
echo "apiVersion: v1
kind: Config
clusters:
 - name: ads-cluster
   cluster:
     certificate-authority-data: ${cluster_ca}
     server: ${server}
contexts:
 - name: ads
   context:
     cluster: ads-cluster
     namespace: ${namespace}
     user: ads
current-context: ads
users:
 - name: ads
   user:
     client-certificate-data: ${user_ca}
     client-key-data: ${token}
"> config

注: サーバーは k8s のアドレスであり、~/.kube/config から確認できます。

設定ファイルとして出力

5. 設定ファイルを広告システムのユーザーのホーム ディレクトリにある kube に転送します。

/ホーム/広告/.kube/

6. このユーザーに複数の名前空間権限を設定します。

1. 広告ユーザーの 2 番目の ns のコンテキストを設定する必要があります。 --cluster を 1 に簡単に設定できるようにするためです。

例: 広告ユーザーの 2 番目の ns (モニター) 権限を構成します。

kubectl config set-context ads --cluster=ads-cluster --user=ads --namespace=monitor

2. 手順3の設定ファイルを編集し、認可を実行します。

####################### cat ads-monitor.yaml 
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: monitor
  name: monitor
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: monitor
  namespace: monitor
subjects:
- kind: User
  name: ads
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: monitor
  apiGroup: rbac.authorization.k8s.io

#####执行赋权
######kubectl apply -f ads-monitor.yaml

3. 名前空間名モニターを広告の .kube の下の構成ファイルに追加します。

 

おすすめ

転載: blog.csdn.net/zhangxueleishamo/article/details/132236110