严酷把控K8S集群中的操作权限,为平凡用户生成特定的kubeconfig文件 ...

打印 上一主题 下一主题

主题 1067|帖子 1067|积分 3201



  

前言

利用并维护过K8S的ops/sre都知道,kubeconfig对于k8s的访问是非常紧张。无论是摆设,调试还是运维,都需要kubeconfig文件。在通过二进制或者kubeadm方式摆设完一套集群后,会在/root/.kube/目录下产生一个config文件,这个文件就是集群的管理文件,假如直接给将该文件给到其他人员肯定不合适,由于管理员的kubeconfig可以干任何事情,注意是任何事情。包括删除节点等高危操作。因此,就涉及到了k8s集群的权限管理。

一、背景

生产环境已存在一套k8s集群,你是集群的管理员,你的同事目前想操作集群中test定名空间下的资源,然后跟你要管理员权限进入集群,你说你能给嘛?固然不行啦,那你作为管理员怎么办呢?那就是给他结合集群中的RBAC权限控制机制,创建一个新的config文件且只能操作test空间下的资源
二、证书和证书签名请求(相识)

Kubernetes 证书和信任包(trust bundle)API 可以通过为 Kubernetes API 的客户端提供编程接口, 实现 X.509 根据的自动化制备, 从而请求并获取证书颁发机构(CA)发布的 X.509 证书。
1.证书签名请求

  1. CertificateSigningRequest (CSR)资源用来向指定的签名者申请证书签名, 在最终签名之前,申请可能被批准,也可能被拒绝
复制代码
2.请求签名流程

  1. 1、CertificateSigningRequest 资源类型允许客户端基于签名请求申请发放 X.509 证书。
  2.         CertificateSigningRequest 对象在 spec.request 字段中包含一个 PEM 编码的 PKCS 签名请求。
  3.         CertificateSigningRequest 使用 spec.signerName 字段标示签名者(请求的接收方)。
  4.                 注意:
  5.                         1、spec.signerName 在 certificates.k8s.io/v1 之后的 API 版本是必填项。
  6.                         2、在 Kubernetes v1.22 和以后的版本,客户可以设置 spec.expirationSeconds 字段(可选)来为颁发的证书设定一个特定的有效期。
  7.                                 该字段的最小有效值是 600,也就是 10 分钟。
  8. 2、创建完成的 CertificateSigningRequest,要先通过批准,然后才能签名。
  9.          根据所选的签名者,CertificateSigningRequest 可能会被控制器自动批准。 否则,就必须人工批准,
  10.          人工批准可以使用 REST API(或 client-go),也可以执行 kubectl certificate approve 命令。
  11.          同样,CertificateSigningRequest 也可能被驳回, 这就相当于通知了指定的签名者,这个证书不能签名。
  12. 3、对于已批准的证书,下一步是签名。 对应的签名控制器首先验证签名条件是否满足,然后才创建证书。
  13.         签名控制器然后更新 CertificateSigningRequest, 将新证书保存到现有 CertificateSigningRequest 对象的 status.certificate 字段中。
  14.         此时,字段 status.certificate 要么为空,要么包含一个用 PEM 编码的 X.509 证书。
  15.         直到签名完成前,CertificateSigningRequest 的字段 status.certificate 都为空。
  16. 4、一旦 status.certificate 字段完成填充,请求既算完成,
  17. 客户端现在可以从 CertificateSigningRequest 资源中获取已签名的证书的 PEM 数据。 当然如果不满足签名条件,签名者可以拒签。
  18. 注意:
  19.         为了减少集群中遗留的过时的 CertificateSigningRequest 资源的数量, 一个垃圾收集控制器将会周期性地运行。
  20.         此垃圾收集器会清除在一段时间内没有改变过状态的 CertificateSigningRequest:
  21.                 已批准的请求: 1 小时后自动删除
  22.                 已拒绝的请求: 1 小时后自动删除
  23.                 已失败的请求: 1 小时后自动删除
  24.                 挂起的请求: 24 小时后自动删除
  25.                 所有请求: 在颁发的证书过期后自动删除
复制代码
3.Kubernetes 签名者

   相关知识如下
  Kubernetes 提供了内置的签名者,每个签名者都有一个众所周知的 signerName:
kubernetes.io/kube-apiserver-client:签名的证书将被 API 服务器视为客户端证书, kube-controller-manager 不会自动批准它。
1、信任分发:签名的证书将被 API 服务器视为客户端证书,CA 证书包不通过任何其他方式分发。
2、许可的主体:没有主体限制,但审核人和签名者可以选择不批准或不签订。 某些主体,好比集群管理员级别的用户或组因摆设和安装方式不同而不同, 所以批准和签订之前需要举行额外仔细检察。 用来限制 system:masters 的 CertificateSubjectRestriction 准入插件默认处于启用状态, 但它通常不是集群中唯一的集群管理员主体。
3、许可的 x509 扩展:允许 subjectAltName 和 key usage 扩展,弃用其他扩展。
4、许可的密钥用途:必须包罗 [“client auth”],但不能包罗 [“digital signature”, “key encipherment”, “client auth”] 之外的键。
5、过期时间/证书有效期:对于 kube-controller-manager 实现的签名者, 设置为 --cluster-signing-duration 选项和 CSR 对象的 spec.expirationSeconds 字段(如有设置该字段)中的最小值。
6、允许/不允许 CA 位:不允许。
kubernetes.io/kube-apiserver-client-kubelet:签名的证书将被 kube-apiserver 视为客户端证书。 kube-controller-manager 可以自动批准它。
1、信任分发:签名的证书将被 API 服务器视为客户端证书,CA 证书包不通过任何其他方式分发。
2、许可的主体:构造名必须是 [“system:nodes”],通用名称为 “system:node{NODE_NAME}” 开头
3、许可的 x509 扩展:允许 key usage 扩展,禁用 subjectAltName 扩展,并删除其他扩展。
4、许可的密钥用途:[“key encipherment”, “digital signature”, “client auth”] 或 [“digital signature”, “client auth”]。
5、过期时间/证书有效期:对于 kube-controller-manager 实现的签名者, 设置为 --cluster-signing-duration 选项和 CSR 对象的 spec.expirationSeconds 字段(如有设置该字段)中的最小值。
6、允许/不允许 CA 位:不允许。
kubernetes.io/kubelet-serving:签名服务端证书,该服务证书被 API 服务器视为有效的 kubelet 服务端证书, 但没有其他保证。kube-controller-manager 不会自动批准它。
1、信任分发:签名的证书必须被 kube-apiserver 认可,可有效的中止 kubelet 连接,CA 证书包不通过任何其他方式分发。
2、许可的主体:构造名必须是 [“system:nodes”],通用名称为 “system:node{NODE_NAME}” 开头
3、许可的 x509 扩展:允许 key usage、DNSName/IPAddress subjectAltName 等扩展, 禁止 EmailAddress、URI subjectAltName 等扩展,并丢弃其他扩展。 至少有一个 DNS 或 IP 的 SubjectAltName 存在。
4、许可的密钥用途:[“key encipherment”, “digital signature”, “server auth”] 或 [“digital signature”, “server auth”]。
5、过期时间/证书有效期:对于 kube-controller-manager 实现的签名者, 设置为 --cluster-signing-duration 选项和 CSR 对象的 spec.expirationSeconds 字段(如有设置该字段)中的最小值。
6、允许/不允许 CA 位:不允许。
kubernetes.io/legacy-unknown:不保证信任。Kubernetes 的一些第三方发行版大概会利用它签订的客户端证书。 稳定版的 CertificateSigningRequest API(certificates.k8s.io/v1 以及之后的版本)不允许将 signerName 设置为 kubernetes.io/legacy-unknown。 kube-controller-manager 不会自动批准这类请求。
1、信任分发:没有。这个签名者在 Kubernetes 集群中没有标准的信任或分发。
2、许可的主体:全部。
3、许可的 x509 扩展:允许 subjectAltName 和 key usage 等扩展,并弃用其他扩展。
4、许可的密钥用途:全部。
5、过期时间/证书有效期:对于 kube-controller-manager 实现的签名者, 设置为 --cluster-signing-duration 选项和 CSR 对象的 spec.expirationSeconds 字段(如有设置该字段)中的最小值。
6、允许/不允许 CA 位 - 不允许。
kube-controller-manager 为每个内置签名者实现了控制平面签名。 注意:所有这些故障仅在 kube-controller-manager 日志中报告。
4.证书过期时间限制字段

要利用expirationSeconds 字段前提是k8s版本是1.22+
  1. 签名请求格式并没有一种标准的方法去设置证书的过期时间或者生命期,
  2. 因此,证书的过期时间或者生命期必须通过 CSR 对象的 spec.expirationSeconds 字段来设置。
  3. 当 spec.expirationSeconds 没有被指定时,
  4. 内置的签名者默认使用 ClusterSigningDuration 配置选项 (kube-controller-manager 的命令行选项 --cluster-signing-duration),
  5. 该选项的默认值设为 1 年。 当 spec.expirationSeconds 被指定时,
  6. spec.expirationSeconds 和 ClusterSigningDuration 中的最小值会被使用
复制代码
二、脚本示例

脚本作用: 用户只能针对某个定名空间下的资源做相应的操作。具体哪些操作可以看脚本中的create_role部分。可以自行修改
   脚本如下(示例):
  1. #!/bin/bash
  2. # 错误处理函数
  3. function error_exit {
  4.     echo "$1" 1>&2
  5.     exit 1
  6. }
  7. # 检查输入参数是否为空
  8. if [[ -z "$1" || -z "$2" || -z "$3" || -z "$4" ]]; then
  9.     error_exit "Usage: $0 <KUBEAPISERVER> <KUBEUSERNAME> <NAMESPACE> <EXPIRATIONSECONDS>"
  10. fi
  11. # 指定变量
  12. export KUBEAPISERVER="$1"
  13. export KUBEUSERNAME="$2"
  14. export NAMESPACE="$3"
  15. export EXPIRATIONSECONDS="$4"
  16. # 校验命名空间是否为空
  17. if [[ -z "$NAMESPACE" ]]; then
  18.     error_exit "The namespace is not found, please set it."
  19. fi
  20. # 构建用户名
  21. KUBEUSERNAME="${NAMESPACE}_${KUBEUSERNAME}"
  22. # 创建 Role 资源
  23. function create_role {
  24. echo "Creating Role for user: $KUBEUSERNAME in namespace: $NAMESPACE..."
  25. cat <<EOF | kubectl apply -f -
  26. apiVersion: rbac.authorization.k8s.io/v1
  27. kind: Role
  28. metadata:
  29.   name: cluster-$KUBEUSERNAME
  30.   namespace: $NAMESPACE
  31. rules:
  32. - apiGroups:
  33.   - ""
  34.   resources:
  35.   - pods/attach
  36.   - pods/exec
  37.   - pods/portforward
  38.   - pods/proxy
  39.   - secrets
  40.   - services/proxy
  41.   verbs:
  42.   - get
  43.   - list
  44.   - watch
  45. - apiGroups:
  46.   - ""
  47.   resources:
  48.   - serviceaccounts
  49.   verbs:
  50.   - impersonate
  51. - apiGroups:
  52.   - ""
  53.   resources:
  54.   - pods
  55.   - pods/attach
  56.   - pods/exec
  57.   - pods/portforward
  58.   - pods/proxy
  59.   verbs:
  60.   - create
  61.   - delete
  62.   - deletecollection
  63.   - patch
  64.   - update
  65. - apiGroups:
  66.   - ""
  67.   resources:
  68.   - configmaps
  69.   - endpoints
  70.   - persistentvolumeclaims
  71.   - replicationcontrollers
  72.   - replicationcontrollers/scale
  73.   - secrets
  74.   - serviceaccounts
  75.   - services
  76.   - services/proxy
  77.   verbs:
  78.   - create
  79.   - delete
  80.   - deletecollection
  81.   - patch
  82.   - update
  83. - apiGroups:
  84.   - apps
  85.   resources:
  86.   - daemonsets
  87.   - deployments
  88.   - deployments/rollback
  89.   - deployments/scale
  90.   - replicasets
  91.   - replicasets/scale
  92.   - statefulsets
  93.   - statefulsets/scale
  94.   verbs:
  95.   - create
  96.   - delete
  97.   - deletecollection
  98.   - patch
  99.   - update
  100. - apiGroups:
  101.   - autoscaling
  102.   resources:
  103.   - horizontalpodautoscalers
  104.   verbs:
  105.   - create
  106.   - delete
  107.   - deletecollection
  108.   - patch
  109.   - update
  110. - apiGroups:
  111.   - batch
  112.   resources:
  113.   - cronjobs
  114.   - jobs
  115.   verbs:
  116.   - create
  117.   - delete
  118.   - deletecollection
  119.   - patch
  120.   - update
  121. - apiGroups:
  122.   - extensions
  123.   resources:
  124.   - daemonsets
  125.   - deployments
  126.   - deployments/rollback
  127.   - deployments/scale
  128.   - ingresses
  129.   - networkpolicies
  130.   - replicasets
  131.   - replicasets/scale
  132.   - replicationcontrollers/scale
  133.   verbs:
  134.   - create
  135.   - delete
  136.   - deletecollection
  137.   - patch
  138.   - update
  139. - apiGroups:
  140.   - policy
  141.   resources:
  142.   - poddisruptionbudgets
  143.   verbs:
  144.   - create
  145.   - delete
  146.   - deletecollection
  147.   - patch
  148.   - update
  149. - apiGroups:
  150.   - networking.k8s.io
  151.   resources:
  152.   - ingresses
  153.   - networkpolicies
  154.   verbs:
  155.   - create
  156.   - delete
  157.   - deletecollection
  158.   - patch
  159.   - update
  160. - apiGroups:
  161.   - ""
  162.   resources:
  163.   - configmaps
  164.   - endpoints
  165.   - persistentvolumeclaims
  166.   - persistentvolumeclaims/status
  167.   - pods
  168.   - replicationcontrollers
  169.   - replicationcontrollers/scale
  170.   - serviceaccounts
  171.   - services
  172.   - services/status
  173.   verbs:
  174.   - get
  175.   - list
  176.   - watch
  177. - apiGroups:
  178.   - ""
  179.   resources:
  180.   - bindings
  181.   - events
  182.   - limitranges
  183.   - namespaces/status
  184.   - pods/log
  185.   - pods/status
  186.   - replicationcontrollers/status
  187.   - resourcequotas
  188.   - resourcequotas/status
  189.   verbs:
  190.   - get
  191.   - list
  192.   - watch
  193. - apiGroups:
  194.   - ""
  195.   resources:
  196.   - namespaces
  197.   verbs:
  198.   - get
  199.   - list
  200.   - watch
  201. - apiGroups:
  202.   - apps
  203.   resources:
  204.   - controllerrevisions
  205.   - daemonsets
  206.   - daemonsets/status
  207.   - deployments
  208.   - deployments/scale
  209.   - deployments/status
  210.   - replicasets
  211.   - replicasets/scale
  212.   - replicasets/status
  213.   - statefulsets
  214.   - statefulsets/scale
  215.   - statefulsets/status
  216.   verbs:
  217.   - get
  218.   - list
  219.   - watch
  220. - apiGroups:
  221.   - autoscaling
  222.   resources:
  223.   - horizontalpodautoscalers
  224.   - horizontalpodautoscalers/status
  225.   verbs:
  226.   - get
  227.   - list
  228.   - watch
  229. - apiGroups:
  230.   - batch
  231.   resources:
  232.   - cronjobs
  233.   - cronjobs/status
  234.   - jobs
  235.   - jobs/status
  236.   verbs:
  237.   - get
  238.   - list
  239.   - watch
  240. - apiGroups:
  241.   - extensions
  242.   resources:
  243.   - daemonsets
  244.   - daemonsets/status
  245.   - deployments
  246.   - deployments/scale
  247.   - deployments/status
  248.   - ingresses
  249.   - ingresses/status
  250.   - networkpolicies
  251.   - replicasets
  252.   - replicasets/scale
  253.   - replicasets/status
  254.   - replicationcontrollers/scale
  255.   verbs:
  256.   - get
  257.   - list
  258.   - watch
  259. - apiGroups:
  260.   - policy
  261.   resources:
  262.   - poddisruptionbudgets
  263.   - poddisruptionbudgets/status
  264.   verbs:
  265.   - get
  266.   - list
  267.   - watch
  268. - apiGroups:
  269.   - networking.k8s.io
  270.   resources:
  271.   - ingresses
  272.   - ingresses/status
  273.   - networkpolicies
  274.   verbs:
  275.   - get
  276.   - list
  277.   - watch
  278. EOF
  279. }
  280. # 生成密钥和证书请求
  281. function create_rsa {
  282. echo "Generating key and CSR for user: $KUBEUSERNAME..."
  283. openssl genrsa -out $KUBEUSERNAME.key 2048 || error_exit "Failed to generate private key."
  284. openssl req -new -key $KUBEUSERNAME.key -out $KUBEUSERNAME.csr -subj "/CN=$KUBEUSERNAME/O=tpaas:${KUBEUSERNAME}:rw" || error_exit "Failed to generate CSR."
  285. }
  286. function create_csr {
  287. # 创建 CertificateSigningRequest
  288. echo "Creating CertificateSigningRequest for user: $KUBEUSERNAME..."
  289. cat <<EOF | kubectl apply -f -
  290. apiVersion: certificates.k8s.io/v1
  291. kind: CertificateSigningRequest
  292. metadata:
  293.   name: $KUBEUSERNAME
  294. spec:
  295.   groups:
  296.   - system:authenticated
  297.   request: $(cat ./$KUBEUSERNAME.csr | base64 | tr -d "\n")
  298.   signerName: kubernetes.io/kube-apiserver-client
  299.   expirationSeconds: $EXPIRATIONSECONDS
  300.   usages:
  301.   - client auth
  302. EOF
  303. }
  304. function approve_csr_command {
  305. # 批准证书请求
  306. echo "Approving CertificateSigningRequest for user: $KUBEUSERNAME..."
  307. kubectl certificate approve $KUBEUSERNAME || error_exit "Failed to approve certificate request."
  308. # 获取证书并解码
  309. echo "Retrieving and decoding the certificate for user: $KUBEUSERNAME..."
  310. kubectl get csr $KUBEUSERNAME -oyaml | grep "certificate:" | grep -v "f:" | awk '{printf $2}' | base64 -d > $KUBEUSERNAME.cert || error_exit "Failed to retrieve or decode the certificate."
  311. # 配置 kubectl
  312. echo "Configuring kubectl for user: $KUBEUSERNAME..."
  313. kubectl --kubeconfig=$KUBEUSERNAME.kubeconfig config set-cluster kubernetes --server=$KUBEAPISERVER --insecure-skip-tls-verify=true --namespace=$NAMESPACE || error_exit "Failed to set cluster."
  314. kubectl --kubeconfig=$KUBEUSERNAME.kubeconfig config set-credentials $KUBEUSERNAME --embed-certs=true --client-certificate=$KUBEUSERNAME.cert --client-key=$KUBEUSERNAME.key --namespace=$NAMESPACE || error_exit "Failed to set credentials."
  315. kubectl --kubeconfig=$KUBEUSERNAME.kubeconfig config set-context $KUBEUSERNAME@kubernetes --cluster=kubernetes --namespace=$NAMESPACE --user=$KUBEUSERNAME || error_exit "Failed to set context."
  316. # 创建 RoleBinding
  317. echo "Creating RoleBinding for user: $KUBEUSERNAME..."
  318. kubectl create rolebinding cluster-$KUBEUSERNAME --role=cluster-$KUBEUSERNAME --group="tpaas:${KUBEUSERNAME}:rw" -n $NAMESPACE || error_exit "Failed to create RoleBinding."
  319. }
  320. function backup_config_new {
  321. # 备份原有 kubeconfig 文件
  322. echo "Backing up current kubeconfig..."
  323. cp -rp ~/.kube/config /tmp/config_bak_$(date +%F-%H-%M-%S) || error_exit "Failed to backup kubeconfig."
  324. # 移动生成的 kubeconfig 文件
  325. echo "Moving generated kubeconfig for user: $KUBEUSERNAME..."
  326. mv /root/cert_user/$KUBEUSERNAME.kubeconfig /root/cert_user/config || error_exit "Failed to move kubeconfig."
  327. # 更新 KUBECONFIG 环境变量并保存配置
  328. echo "Setting KUBECONFIG environment variable and saving merged config..."
  329. export KUBECONFIG=/root/.kube/config:/root/cert_user/config
  330. kubectl config view --merge --flatten > /root/configs || error_exit "Failed to merge kubectl config."
  331. cp -rp /root/configs /root/.kube/config || error_exit "Failed to overwrite the original kubeconfig."
  332. echo "Kubeconfig for user $KUBEUSERNAME has been successfully configured and saved."
  333. }
  334. create_role
  335. create_rsa
  336. create_csr
  337. approve_csr_command
  338. backup_config_new
复制代码
实验脚本,参数从左到右依次是集群地址、用户名称、定名空间、过期时间
  1. [root@k8s-master cert_user]# sh ops.sh https://192.168.56.101:6443 wzry test 1200
  2. Creating Role for user: test_wzry in namespace: test...
  3. role.rbac.authorization.k8s.io/cluster-test_wzry created
  4. Generating key and CSR for user: test_wzry...
  5. Generating RSA private key, 2048 bit long modulus (2 primes)
  6. ..................................................+++++
  7. .....+++++
  8. e is 65537 (0x010001)
  9. Creating CertificateSigningRequest for user: test_wzry...
  10. certificatesigningrequest.certificates.k8s.io/test_wzry created
  11. Approving CertificateSigningRequest for user: test_wzry...
  12. certificatesigningrequest.certificates.k8s.io/test_wzry approved
  13. Retrieving and decoding the certificate for user: test_wzry...
  14. Configuring kubectl for user: test_wzry...
  15. Cluster "kubernetes" set.
  16. User "test_wzry" set.
  17. Context "test_wzry@kubernetes" created.
  18. Creating RoleBinding for user: test_wzry...
  19. rolebinding.rbac.authorization.k8s.io/cluster-test_wzry created
  20. Backing up current kubeconfig...
  21. Moving generated kubeconfig for user: test_wzry...
  22. Setting KUBECONFIG environment variable and saving merged config...
  23. Kubeconfig for user test_wzry has been successfully configured and saved.
复制代码
2.检查集群上下文及csr

   代码如下(示例):
  1. [root@k8s-master cert_user]# kubectl config get-contexts
  2. CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
  3. *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
  4.           test_wzry@kubernetes          kubernetes   test_wzry           test
复制代码
  1. [root@k8s-master cert_user]# kubectl get csr
  2. NAME        AGE   SIGNERNAME                            REQUESTOR          REQUESTEDDURATION   CONDITION
  3. test_wzry   18m   kubernetes.io/kube-apiserver-client   kubernetes-admin   20m                 Approved,Issued
复制代码
字段表明
  1. NAME: 证书请求的名称,这里是 test_wzry。
  2. AGE: 证书请求已经存在的时间,这里是 18 分钟。
  3. SIGNERNAME: 签名者的名称,这里是 kubernetes.io/kube-apiserver-client,表示这是一个针对 Kubernetes API 服务器客户端的证书请求。
  4. REQUESTOR: 发起请求的用户,这里是 kubernetes-admin。
  5. REQUESTEDDURATION: 签发的证书有效期时长,这里是 20 分钟。当AGE字段时间达到20分钟时,就会过期。当过期后,集群的垃圾收集控制器会在1小时内删除掉该csr
  6. CONDITION: 当前请求的状态。Approved,Issued 表示证书请求已经被批准,并且证书已经签发。
复制代码
3.切换集群上下文,检查权限

  1. [root@k8s-master cert_user]# kubectl config use-context test_wzry@kubernetes
  2. Switched to context "test_wzry@kubernetes".
复制代码
检察集群中所有pod,会报错,由于该用户只有test定名空间下的操作权限
  1. [root@k8s-master cert_user]# kubectl get pod -A
  2. Error from server (Forbidden): pods is forbidden: User "test_wzry" cannot list resource "pods" in API group "" at the cluster scope
复制代码
操作test定名空间下的资源
  1. [root@k8s-master cert_user]# kubectl get pod -n test
  2. NAME                           READY   STATUS              RESTARTS   AGE
  3. test5-nginx-7885895787-wbv4b   0/1     ContainerCreating   0          92m
  4. [root@k8s-master cert_user]# kubectl apply -f ../YamlTest/test_nginx.yml
  5. deployment.apps/test6-nginx created
  6. [root@k8s-master cert_user]# kubectl logs -f -n test test6-nginx-58f8f74bbd-npx6s
  7. Error from server (BadRequest): container "nginx" in pod "test6-nginx-58f8f74bbd-npx6s" is waiting to start: ContainerCreating
  8. [root@k8s-master cert_user]# kubectl delete deployments.apps -n test test6-nginx
  9. deployment.apps "test6-nginx" deleted
复制代码
至此,该脚本针对单个定名空间下的操作都是成功的
4.平凡用户操作

用生成的config文件操作定名空间下的资源
  1. [root@k8s-master cert_user]# kubectl --kubeconfig=./config get pod -n test
  2. NAME                           READY   STATUS              RESTARTS   AGE
  3. test5-nginx-7885895787-wbv4b   0/1     ContainerCreating   0          93m
复制代码

总结

本篇文章主要针对RBAC机制、csr以及用户权限分别做出了一个示例,对集群权限的严酷把控,才气以更安全的方式维护集群

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表