K8S入门系列之五:K8S授权与认证


本篇通过实验,创建一个仅能访问命名空间test的用户,并且只有list pod的权限。另外创建一个集群管理员用户,具有所有权限。

  1. 新用户本地生成私钥和证书请求文件
student@client:~$ kubectl create ns test
student@client:~$ cd ~/.kube/
student@client:~/.kube$ openssl genrsa -out fox-user.key 2048
student@client:~/.kube$ openssl rand -writerand ~/.rand
student@client:~/.kube$ openssl req -new -key fox-user.key -out fox-user.csr -subj "/CN=fox-user/O=kubeusers"

注意上面步骤中的-subj参数,指定了在K8S中要新建的用户名为fox-user,角色类型为kubeusers(一个普通用户)
如果要创建集群管理员用户,则应写:“/CN=XXXXX/O=system:masters/O=system:authenticated”

  1. 用户把证书请求文件发送给master节点管理员,私钥自己留存
student@client:~/.kube$ scp fox-user.csr k8s-master:/tmp
  1. 使用master节点的根CA为用户的证书请求文件签发证书
root@k8s-master:~## mv /tmp/fox-user.csr /etc/kubernetes/pki/ && cd /etc/kubernetes/pki
root@k8s-master:/etc/kubernetes/pki## openssl x509 -req -in fox-user.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out fox-user.crt -days 365
root@k8s-master:/etc/kubernetes/pki## openssl x509 -in fox-user.crt -text -noout
  1. 把签发完的证书和master根证书发回给用户
root@k8s-master:/etc/kubernetes/pki## scp fox-user.crt ca.crt student@client:~/.kube
  1. 在客户端设置集群入口
student@client:~/.kube$ kubectl config set-cluster mycluster --embed-certs --certificate-authority=ca.crt --server="https://192.168.126.100:6443"
  1. 在客户端设置用户credentials
student@client:~/.kube$ kubectl config set-credentials fox-user --embed-certs --client-certificate=fox-user.crt --client-key=fox-user.key
  1. 在客户端设置context
student@client:~/.kube$ kubectl config set-context fox-user@mycluster --cluster=mycluster --user=fox-user
  1. 在客户端切换上下文并测试
student@client:~/.kube$ kubectl config use-context fox-user@mycluster
student@client:~/.kube$ kubectl get nodes
Error from server (Forbidden): nodes is forbidden: User "fox-user" cannot list resource "nodes" in API group "" at the cluster scope

可以看到一个普通用户并不能执行get nodes这样的操作

  1. 创建一个角色仅能在namespace=test中执行list pods操作
    注意要先回到管理员context
student@client:~/.kube$ kubectl config use-context kubernetes-admin@kubernetes
student@client:~/.kube$ kubectl create role fox-role --resource="pod" --verb="list" -n test
  1. 创建一个rolebinding,将上述role绑定到用户fox-user
student@client:~/.kube$ kubectl create rolebinding fox-rolebinding --role=fox-role --user=fox-user -n test
  1. 至此,用户fox-user已绑定到fox-role这个角色,而这个角色的权限仅限于test中list pod,切换上下文,验证
student@client:~/.kube$ kubectl config use-context fox-user@mycluster
student@client:~/.kube$ kubectl get pods -n test
No resources found in test namespace.

试一下list services

student@client:~/.kube$ kubectl get svc -n test
Error from server (Forbidden): services is forbidden: User "fox-user" cannot list resource "services" in API group "" in the namespace "test"

文章作者: 洪宇轩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 洪宇轩 !
评论
 上一篇
云原生监控Prometheus-Operator部署配置 云原生监控Prometheus-Operator部署配置
Prometheus是CNCF毕业的第二个项目,Prometheus-Operator是在K8S里安装Prometheus的最佳方案,该方案简化了部署Prometheus及其相关组件的步骤,本文将介绍此方案。
2022-12-05
下一篇 
K8S存储系列之三:K8S Rook Ceph StorageClass K8S存储系列之三:K8S Rook Ceph StorageClass
Ceph是红帽家的分布式块存储。Rook可提供基于Ceph的云原生存储。
2022-05-29
  目录