k8s rbac proceso de creación de control de gestión de permisos + conocimiento teórico

Prefacio Uno de los
principales problemas que resuelve RBAC ahora es: todos toman el archivo de configuración de administrador, por lo que todos tienen la máxima autoridad y pueden hacer lo que quieran, lo que probablemente dañará el clúster k8s sin saberlo. Por lo tanto, necesitamos controlarlo y crear una cuenta que no sea de administrador para él para que no pueda operar el espacio de nombres de la parte importante del sistema k8s.

No hablemos del principio, solo hablemos de los pasos de la operación.

Uno, crea un certificado para
crear una clave privada de usuario

[root@node-01 ~]cd /etc/kubernetes/pki/
[root@node-01 pki](umask 077;openssl genrsa -out aideveloper.key 2048)
Generating RSA private key, 2048 bit long modulus
.................................................................................+++
..................+++
e is 65537 (0x10001)

Crear una solicitud de firma de certificado
O = información de la organización, CN = nombre de usuario

[root@node-01 pki]openssl req -new -key aideveloper.key -out aideveloper.csr -subj "/O=jbt/CN=aideveloper"

Firma el certificado

[root@node-01 pki]openssl  x509 -req -in aideveloper.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out aideveloper.crt -days 365
Signature ok
subject=/O=jbt/CN=aideveloper
Getting CA Private Key

2. Creación de un archivo de configuración
Existen principalmente los siguientes pasos para crear un archivo de configuración:

* kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE #集群配置
* 
* kubectl config set-credentials NAME --kubeconfig=/PATH/TO/SOMEFILE #用户配置
* 
* kubectl config set-context #context配置
* 
* kubectl config use-context #切换context

一些说明:

* --embed-certs=true的作用是不在配置文件中显示证书信息。

* --kubeconfig=/root/aideveloper.conf用于创建新的配置文件,如果不加此选项,则内容会添加到家目录下.kube/config文件中,可以使用use-context来切换不同的用户管理k8s集群。

* context简单的理解就是用什么用户来管理哪个集群,即用户和集群的结合。

Crea una configuración de clúster

[root@node-01 pki] kubectl config set-cluster kubernetes --server=https://tw-master.senses-ai.com:6443 --certificate-authority=ca.crt --embed-certs=true --kubeconfig=/root/aideveloper.conf
Cluster "kubernetes" set.

[root@node-01 pki]# kubectl config view --kubeconfig=/root/aideveloper.conf
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://tw-master.senses-ai.com:6443
  name: kubernetes
contexts: null
current-context: ""
kind: Config
preferences: {}
users: null

Crear configuración de usuario

[root@node-01 pki] kubectl config set-credentials aideveloper --client-certificate=aideveloper.crt --client-key=aideveloper.key --embed-certs=true --kubeconfig=/root/aideveloper.conf User "aideveloper" set.

[root@node-01 pki] kubectl config view --kubeconfig=/root/aideveloper.conf
apiVersion: v1
clusters:
- cluster:
 certificate-authority-data: DATA+OMITTED
 server: https://tw-master.senses-ai.com:6443
 name: kubernetes
contexts: null
current-context: ""
kind: Config
preferences: {}
users:
- name: aideveloper
 user:
 client-certificate-data: REDACTED
 client-key-data: REDACTED

Crear configuración de contexto

[root@node-01 pki] kubectl config set-context aideveloper@kubernetes --cluster=kubernetes --user=aideveloper --kubeconfig=/root/aideveloper.conf
Context "aideveloper@kubernetes" created.

[root@node-01 pki] kubectl config view --kubeconfig=/root/aideveloper.conf
apiVersion: v1
clusters:
- cluster:
 certificate-authority-data: DATA+OMITTED
 server: https://tw-master.senses-ai.com:6443
 name: kubernetes
contexts:
- context:
 cluster: kubernetes
 user: aideveloper
 name: aideveloper@kubernetes
current-context: ""
kind: Config
preferences: {}
users:
- name: aideveloper
 user:
 client-certificate-data: REDACTED
 client-key-data: REDACTED

Cambiar de contexto

[root@node-01 pki] kubectl config use-context aideveloper@kubernetes --kubeconfig=/root/aideveloper.conf
Switched to context "aideveloper@kubernetes".

[root@node-01 pki] kubectl config view --kubeconfig=/root/aideveloper.conf
apiVersion: v1
clusters:
- cluster:
 certificate-authority-data: DATA+OMITTED
 server: https://tw-master.senses-ai.com:6443
 name: kubernetes
contexts:
- context:
 cluster: kubernetes
 user: aideveloper
 name: aideveloper@kubernetes
current-context: aideveloper@kubernetes
kind: Config
preferences: {}
users:
- name: aideveloper
 user:
 client-certificate-data: REDACTED
 client-key-data: REDACTED

Cree el usuario del sistema y el archivo de verificación de k8s

[root@node-01 ~] useradd test     #创建什么用户名都可以
[root@node-01 ~] mkdir /home/test/.kube
[root@node-01 ~] cp /root/aideveloper.conf /home/test/.kube/config [root@node-01 ~]# chown test.test -R /home/test/.kube/
[root@node-01 ~] su - test
[billy@node-01 ~]$ kubectl get pod
Error from server (Forbidden): pods is forbidden: User "aideveloper" cannot list resource "pods" in API group "" in the namespace "default"

El nuevo usuario predeterminado no tiene ningún permiso.

Crear un rol
Este rol solo tiene los permisos de obtención, lista y visualización del pod

[root@node-01 rbac] vim aideveloper-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: aideveloper-role
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

[root@node-01 rbac] kubectl apply -f aideveloper-role.yaml
role.rbac.authorization.k8s.io/aideveloper-role created

Crear una vinculación de Rolebinding
user aideveloper y role aideveloper-role

[root@node-01 rbac]# vim aideveloper-roleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: aideveloper-roleBinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: aideveloper-role
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: aideveloper

[root@node-01 rbac]# kubectl apply -f aideveloper-roleBinding.yaml
rolebinding.rbac.authorization.k8s.io/aideveloper-roleBinding created


Si el resultado de la verificación no especifica un espacio de nombres, el espacio de nombres predeterminado es el predeterminado.

[billy@node-01 ~]$ kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
nginx-demo-95bd675d5-66xrm   1/1     Running   0          18d
tomcat-5c5dcbc885-7vr68      1/1     Running   0          18d

[billy@node-01 ~]$ kubectl -n kube-system get pod
Error from server (Forbidden): pods is forbidden: User "billy" cannot list resource "pods" in API group "" in the namespace "kube-system"

Por lo tanto, podemos ver los pods en el espacio de nombres predeterminado, pero los pods de otros espacios no se pueden ver.

Crear ClusterRole

[root@node-01 rbac]# cat cluster-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-reader
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

[root@node-01 rbac]# kubectl apply -f cluster-reader.yaml
clusterrole.rbac.authorization.k8s.io/cluster-reader created

Crear ClusterRoleBinding

[root@node-01 rbac]# cat billy-read-all-pods.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: billy-read-all-pods
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: billy

[root@node-01 rbac]# kubectl apply -f billy-read-all-pods.yaml
clusterrolebinding.rbac.authorization.k8s.io/billy-read-all-pods created

Después de crear ClusterRole y ClusterRoleBinding, puede ver los pods en todos los espacios de nombres.

Suplemento RBAC

RBAC相关的内容
rule下verbs有:

"get", "list", "watch", "create", "update", "patch", "delete", "exec"
rule下resource有:

"services", "endpoints", "pods","secrets","configmaps","crontabs","deployments",
"jobs","nodes","rolebindings","clusterroles","daemonsets","replicasets","statefulsets",
"horizontalpodautoscalers","replicationcontrollers","cronjobs"
rule下apiGroups有:

"","apps", "autoscaling", "batch"

Nota:
cluserRoleBinding solo puede vincular clusterRole
roleBinding puede vincular tanto el rol como el clusterRole. Si
desea que un Bingding vincule varios roles, escriba algunos archivos más

Supongo que te gusta

Origin blog.51cto.com/14034751/2593763
Recomendado
Clasificación