k8s RBAC autorise les utilisateurs ordinaires du système à accéder à l'espace de noms

Contexte : J'ai récemment rencontré un problème, c'est-à-dire que j'ai besoin de partager les droits d'utilisation et d'accès d'une ressource Kubernetes avec d'autres. Cela n'existe que sous un certain espace de noms, mais je ne peux pas lui donner tous les droits d'administrateur. Je veux juste Que dois-je faire si je lui accorde l'autorité sous cet espace de noms ?

Par exemple, je souhaite uniquement accorder aux annonces utilisateur l'autorisation d'accéder aux données de l'espace de noms. Ici, je dois utiliser le mécanisme RBAC dans Kubernetes pour y parvenir. Mon processus de fonctionnement est enregistré ci-dessous.

1. Créez la clé de l'utilisateur des annonces

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. Modifier la configuration des annonces groupées et le contexte utilisateur

## 为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. Modifiez les fichiers suivants pour autorisation

################## 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

Exécutez kubectl apply -f ads.yaml 

Quatrièmement, exportez le fichier de configuration config du fichier ads

################# 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

Remarque : le serveur est l'adresse de k8s, qui peut être visualisée depuis ~/.kube/config

Sortie en tant que fichier de configuration

5. Transférez le fichier de configuration sur le kube sous le répertoire personnel de l'utilisateur du système d'annonces

/home/annonces/.kube/

6. Configurer plusieurs autorisations d'espace de noms pour cet utilisateur

1. Il est nécessaire de configurer le contexte du deuxième ns pour l'utilisateur des annonces. Pour s'assurer qu'il est facile de définir --cluster sur un

Par exemple : configurez la deuxième autorisation ns (moniteur) pour l'utilisateur des annonces

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

2. Modifiez le fichier de configuration à l'étape 3 et procédez à l'autorisation

####################### 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. Ajoutez le moniteur de nom d'espace de noms au fichier de configuration sous .kube of ads

 

Je suppose que tu aimes

Origine blog.csdn.net/zhangxueleishamo/article/details/132236110
conseillé
Classement