0
点赞
收藏
分享

微信扫一扫

Kubernetes_17_新建用户账号UserAccount(实践类)


系列文章目录

文章目录

  • ​​系列文章目录​​
  • ​​前言​​
  • ​​步骤1:生成pki目录下的证书​​
  • ​​步骤2:生成 /root/.kube/config 配置文件​​
  • ​​创建集群配置clusters​​
  • ​​创建用户配置users​​
  • ​​创建context配置(context 绑定 cluster 和 user)​​
  • ​​切换context配置​​
  • ​​新建linux用户cbmljs​​
  • ​​步骤3:使用 rbac 给新建用户绑定 role ,使其具有操作 k8s resouce的权限​​
  • ​​创建Role和RoleBinding,并验证结果​​
  • ​​创建ClusterRole和ClusterRoleBinding,并验证结果​​
  • ​​总结​​

前言

在任何将资源或服务提供给有限使用者的系统上,认证和授权都是两个必不可少的功 能,认证用于身份鉴别,而授权则实现权限分派 。 认证由 API Server 来完成,授权有 RABC 来完成。

认证:API Server 作为 Kubernetes 集群系统的网关,是访问及管理资源对象的唯一人口,所有需要访问集群资源的组件,以及此前使用的 kubectl 命令等都要经由此网关进行集群访问和管理。

授权:RBAC使用rbac.authorization.k8s.io API Group 来实现授权决策,允许管理员通过 Kubernetes API 动态配置策略,要启用RBAC,需要在 apiserver 中添加参数–authorization-mode=RBAC,如果使用的kubeadm安装的集群,都默认开启了RBAC,可以通过查看 Master 节点上 apiserver 的静态Pod定义文件:

Kubernetes_17_新建用户账号UserAccount(实践类)_集群配置

为了彻底搞懂认证和授权整个过程,干脆自己新建一个用户,放到 /root/.kube/config 文件下面去

步骤1:生成pki目录下的证书

第一步,生产密钥 .key 文件

# 进入目录
cd /etc/kubernetes/pki
# 生产密钥 .key 文件 (pki目录下执行)
(umask 077;openssl genrsa -out cbmljs.key 2048)

Kubernetes_17_新建用户账号UserAccount(实践类)_linux_02


第二步,根据 .key 文件输出 .csr 文件,从此两个文件建立了关系

# 根据刚刚生成的 .key 文件输出 .csr 文件 (pki目录下执行)
openssl req -new -key cbmljs.key -out cbmljs.csr -subj "/O=k8s/CN=cbmljs"

O=组织信息,CN=用户名

Kubernetes_17_新建用户账号UserAccount(实践类)_linux_03

第三步,根据 .key 和 .csr 文件生成了 .crt 文件

# 根据 .key 和 .csr 文件生成了 .crt 文件 (pki目录下执行)
openssl x509 -req -in cbmljs.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out cbmljs.crt -days 365

Kubernetes_17_新建用户账号UserAccount(实践类)_linux_04

好了,pki下面的三个文件结束了,下面开始生成 /root/.kube/config 文件

步骤2:生成 /root/.kube/config 配置文件

创建集群配置clusters

创建集群配置clusters,如下:

# 新建集群配置 (pki目录下执行)
kubectl config set-cluster k8s --server=https://192.168.100.151:6443 \
--certificate-authority=ca.crt --embed-certs=true --kubeconfig=/root/cbmljs.conf

这一句会在 root 目录下,新建或修改一个文件 cbmljs.conf,创建完集群配置之后,查看这个 cbmljs.conf 文件,如下:

# 查看 (pki目录下执行)
kubectl config view --kubeconfig=/root/cbmljs.conf

Kubernetes_17_新建用户账号UserAccount(实践类)_linux_05

创建用户配置users

创建用户配置users,语句是 set-credentials ,如下:

# 新建用户配置 (pki目录下执行)
kubectl config set-credentials cbmljs --client-certificate=cbmljs.crt \
--client-key=cbmljs.key --embed-certs=true --kubeconfig=/root/cbmljs.conf

创建完用户配置之后,查看

# 查看 (pki目录下执行)
kubectl config view --kubeconfig=/root/cbmljs.conf

Kubernetes_17_新建用户账号UserAccount(实践类)_集群配置_06


Kubernetes_17_新建用户账号UserAccount(实践类)_集群配置_07

创建context配置(context 绑定 cluster 和 user)

创建context配置,语句是 set-context,如下:

# 新建上下文配置 (pki目录下执行)
kubectl config set-context cbmljs@k8s --cluster=k8s --user=cbmljs \
--kubeconfig=/root/cbmljs.conf

创建完context配置之后,查看

# 查看 (pki目录下执行)
kubectl config view --kubeconfig=/root/cbmljs.conf

Kubernetes_17_新建用户账号UserAccount(实践类)_kubernetes_08

切换context配置

刚刚新建好了context,现在切换context

# 切换上下文配置 (pki目录下执行)
kubectl config use-context cbmljs@k8s --kubeconfig=/root/cbmljs.conf

切换完context配置之后,查看

# 查看 (pki目录下执行)
kubectl config view --kubeconfig=/root/cbmljs.conf

Kubernetes_17_新建用户账号UserAccount(实践类)_docker_09

好了,整个 /root/cbmljs.conf 文件完成了,现在开始使用这个文件了。

新建linux用户cbmljs

linux上新增一个用户 cbmljs ,然后将这个新生成的 cbmljs.conf 文件放到 /home/cbmljs/.kube/config 目录下

useradd cbmljs
mkdir -p /home/cbmljs/.kube
cd /root
cp cbmljs.conf /home/cbmljs/.kube/config
chown cbmljs.cbmljs -R /home/cbmljs/
su cbmljs

Kubernetes_17_新建用户账号UserAccount(实践类)_docker_10

kubectl get pod

Kubernetes_17_新建用户账号UserAccount(实践类)_kubernetes_11

步骤3:使用 rbac 给新建用户绑定 role ,使其具有操作 k8s resouce的权限

创建Role和RoleBinding,并验证结果

vi pods-reader.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pods-reader
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch

vi cbmljs-pods-reader.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cbmljs-pods-reader
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pods-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: cbmljs

Kubernetes_17_新建用户账号UserAccount(实践类)_集群配置_12

创建ClusterRole和ClusterRoleBinding,并验证结果

但是此时查看其他命名空间的资源权限还是没有,另外,新建/修改/删除 default命名空间的资源 resources 的权限也没有

Kubernetes_17_新建用户账号UserAccount(实践类)_docker_13

[root@w1 serviceaccount]# 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@w1 serviceaccount]# cat cbmljs-read-all-pod.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: cbmljs

Kubernetes_17_新建用户账号UserAccount(实践类)_docker_14

总结

新建用户账号UserAccount(实践类),完成了。

天天打码,天天进步!!


举报

相关推荐

0 条评论