作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们上一小节介绍了使用RBAC给服务账户(ServiceAccount)添加权限,这个这个方式一般用于Pod内部,如果需要应用到Pod外部,比如我需要另外一个人来帮我维护我这个Kubernetes集群,但是我不能给他管理员权限,我需要给他创建一个相对较小的权限:比如我只允许他操作命名空间:user001;资源:pod,svc,权限:所有。
1.生成用户私钥
[root@master01 rbac]# openssl genrsa -out user001.key 2048
Generating RSA private key, 2048 bit long modulus
.....................+++
...........................+++
e is 65537 (0x10001)
[root@master01 rbac]# ls
user001.key
2.创建证书签名请求(csr)
[root@master01 rbac]# openssl req -new -key user001.key -out user001.csr -subj "/CN=user001/O=k8s"
[root@master01 rbac]# ls
user001.csr user001.key
3.给user001签发证书
这里需要经过集群的ca签发,也就是(/etc/kubernetes/pki/ca.crt文件),同一个ca签发的证书才会被认可(ca签发的集群证书和ca签发的kubectl证书)。
[root@master01 rbac]# openssl x509 -req -in user001.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out user001.crt -days 3650
Signature ok
subject=/CN=user001/O=k8s
Getting CA Private Key
[root@master01 rbac]# ls
user001.crt user001.csr user001.key
4.创建集群证书
成功以后的配置文件具备了服务器地址和ca证书
[root@master01 rbac]# export KUBE_APISERVER="https://192.168.31.211:6443"
[root@master01 rbac]#
[root@master01 rbac]# kubectl config set-cluster kubernetes \
> --certificate-authority=/etc/kubernetes/pki/ca.crt \
> --embed-certs=true \
> --server=${KUBE_APISERVER} \
> --kubeconfig=user001.kubeconfig
Cluster "kubernetes" set.
[root@master01 rbac]# ls
user001.crt user001.csr user001.key user001.kubeconfig
5.添加用户信息
成功以后添加了用户user001,并添加了客户端证书和私钥
[root@master01 rbac]# kubectl config set-credentials user001 \
> --client-certificate=/root/rbac/user001.crt \
> --embed-certs=true \
> --client-key=/root/rbac/user001.key \
> --kubeconfig=user001.kubeconfig
User "user001" set.
[root@master01 rbac]# ls
user001.crt user001.csr user001.key user001.kubeconfig
6.设置上下文(context)
成功以后会更新user001.kubeconfig,太抽象,我也不知道咋个解释。
kubectl config set-context user001 \
--cluster=kubernetes \
--user=user001 \
--kubeconfig=user001.kubeconfig
7.设置默认的上下文(context)
设置以后,就可以通过这个文件连接到kube-apiserver。
kubectl config use-context user001 \
--kubeconfig=user001.kubeconfig
8.创建Role
这里实现的权限,就是我们需求里面的权限,如果需求是范围是是全集群则需要创建ClueterRole(也就是上个小节讲解的应用)。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: user001
name: user001-role
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
9.创建RoleBinding
绑定以后,这个权限就和前面的用户绑定到一起,并可以正常连接到集群,同上如果是集群范围则是ClusterRoleBinding。
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: user001-rolebind
namespace: user001
subjects:
- kind: User
name: user001
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: user001-role
apiGroup: rbac.authorization.k8s.io
10.验证权限
把这个文件放置到集群外,/root/.kube/config,在网络能通的情况下也可以直接使用kubectl命令。
#有权限的资源,正常操作
kubectl get pod,svc -n user001 --kubeconfig=/root/rbac/user001.kubeconfig
#没权限的资源,提异常
kubectl get cm,secret -n user001 --kubeconfig=/root/rbac/user001.kubeconfig
这个时候我们已经实现了我们的需求,把这个文件user001.kubeconfig提供给需要使用的人,他拿到这个文件放置到/root/.kube/config,然后客户端也安装了kubectl命令以后就可以在对应的节点操作集群权限范围内的资源。
历史推荐内容Docker-docker基本信息,基本命令,dockerfile,原理,仓库,存储网络日志,番外篇云计算&虚拟化-包括服务器购买,虚拟化介绍,虚拟磁盘,虚拟网络,创建虚拟机,安装虚拟机,dashboard,xml解释,克隆,快照,初始化,esxi介绍。Linux进阶-包括硬件,日常运维,基础软件,日志,进阶命令,防火墙,shell编程,内核,linux系统及初始化Linux基础-包括文件的增删改查,磁盘管理,网络配置,用户配置,权限配置 |
---|