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