前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Kubernetes(k8s)-RBAC用户账户(UserAccount)介绍&应用

Kubernetes(k8s)-RBAC用户账户(UserAccount)介绍&应用

作者头像
运维小路
发布2025-02-19 23:21:05
发布2025-02-19 23:21:05
9600
代码可运行
举报
文章被收录于专栏:运维小路
运行总次数:0
代码可运行

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们上一小节介绍了使用RBAC给服务账户(ServiceAccount)添加权限,这个这个方式一般用于Pod内部,如果需要应用到Pod外部,比如我需要另外一个人来帮我维护我这个Kubernetes集群,但是我不能给他管理员权限,我需要给他创建一个相对较小的权限:比如我只允许他操作命名空间:user001;资源:pod,svc,权限:所有。

1.生成用户私钥

代码语言:javascript
代码运行次数:0
复制
[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)

代码语言:javascript
代码运行次数:0
复制
[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证书)。

代码语言:javascript
代码运行次数:0
复制
[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证书

代码语言:javascript
代码运行次数:0
复制
[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,并添加了客户端证书和私钥

代码语言:javascript
代码运行次数:0
复制
[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,太抽象,我也不知道咋个解释。

代码语言:javascript
代码运行次数:0
复制
kubectl config set-context user001 \
  --cluster=kubernetes \
  --user=user001 \
  --kubeconfig=user001.kubeconfig

7.设置默认的上下文(context)

设置以后,就可以通过这个文件连接到kube-apiserver。

代码语言:javascript
代码运行次数:0
复制
kubectl config use-context user001 \
  --kubeconfig=user001.kubeconfig

8.创建Role

这里实现的权限,就是我们需求里面的权限,如果需求是范围是是全集群则需要创建ClueterRole(也就是上个小节讲解的应用)。

代码语言:javascript
代码运行次数:0
复制
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。

代码语言:javascript
代码运行次数:0
复制
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命令。

代码语言:javascript
代码运行次数:0
复制
#有权限的资源,正常操作
kubectl get pod,svc -n user001  --kubeconfig=/root/rbac/user001.kubeconfig
代码语言:javascript
代码运行次数:0
复制
#没权限的资源,提异常
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基础-包括文件的增删改查,磁盘管理,网络配置,用户配置,权限配置

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档