签发一个证书
ssl认证
#进入存放ca证书的文件夹
$ cd /etc/kubernetes/pki/
#生成私钥key
$ (umask 077; openssl genrsa -out hxg.key 2048)
#生成一个用户名为user-hxg的证书
$ openssl req -new -key hxg.key -out hxg.csr -subj "/CN=user-hxg"
$ openssl x509 -req -in hxg.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out hxg.crt -days 3650
Signature ok
subject=/CN=user-hxg
Getting CA Private Key
注意:
- 生成密钥的命令使用
()
,可以避免修改umask影响到系统的umask - 流程是 生成密钥 =====》用密钥生成证书请求文件 CN是指定给哪个用户请求证书 =====》用密钥和请求文件,让ca签发证书 days是有效期
在kubeconfig下新增用户
#把user-hxg这个用户添加到kubernetes集群中,可以用来认证apiserver的连接
$ kubectl config set-credentials user-hxg --client-certificate=./hxg.crt --client-key=./hxg.key --embed-certs=true
User "user-hxg" set.
#在配置文件的上下文中新增加一个user-hxg这个账号
$ kubectl config set-context user-hxg@kubernetes --cluster=kubernetes --user=user-hxg
Context "user-hxg@kubernetes" created.
注意:
- 使用set-credentials添加证书和私钥
- 使用set-context添加用户的上下文 格式必须是
<用户名>@<集群名>
例如user-hxg@kubernetes
最后体现在配置文件中的效果
切换上下文
$ kubectl config use-context user-hxg@kubernetes
Switched to context "user-hxg@kubernetes".
$ kubectl get pod
Error from server (Forbidden): pods is forbidden: User "user-hxg" cannot list resource "pods" in API group "" in the namespace "default"
可以看到切换到user-hxg@kubernetes的,默认没有任何权限
#切换回原上下文
$ kubectl config use-context kubernetes-admin@kubernetes #这个是集群用户,有任何权限
授权
把user-hxg用户通过rolebinding绑定到管理员的clusterrole上,用户就可以对rolebinding所在命名空间下有任何的操作
注意,只能是给定的命名空间,如果想操作所有的命名空间,需要使用clusterRoleBanding
命令行创建
#创建命名空间
$ kubectl create ns rbac
#创建集群角色
$ kubectl create clusterrole pod-read --verb=get,list,watch --resource=pods
#创建clusterRoleBinding将用户绑定在集群角色上
$ kubectl create clusterrolebinding user-hxg-bind --clusterrole=cluster-admin --user=user-hxg
yaml文件创建
#创建命名空间
---
apiVersion: v1
kind: Namespace
metadata:
name: rbac
#创建集群角色clusterRole
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-read
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- list
- watch
- get
#创建cluserRoleBinding
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: pod-read-bind
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: pod-read
subjects:
- kind: User
name: user-hxg
切换上下文查看权限
$ kubectl config use-context user-hxg@kubernetes
Switched to context "user-hxg@kubernetes".
#可以访问pod
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-provisioner-7cbb47c7cc-xgckw 1/1 Running 1 (7h17m ago) 29h
#拒绝访问service
$ kubectl get svc
Error from server (Forbidden): services is forbidden: User "user-hxg" cannot list resource "services" in API group "" in the namespace "default"
给用户生成配置文件
新建用户
$ useradd hxg
修改并拷贝配置文件
#新建存放配置文件的目录
$ mkdir /home/hxg/.kube
#拷贝配置文件
$ cp /root/.kube/config /home/hxg/.kube/
#修改配置文件
$ vim /home/hxg/.kube/
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1J............==
server: https://10.0.0.5:6443
name: kubernetes
contexts: #删除上下文中的其他用户的上下文,只保留user-hxg用户的
- context:
cluster: kubernetes
user: user-hxg
name: user-hxg@kubernetes
current-context: user-hxg@kubernetes #修改此处的上下文,将上下文修改成user-hxg用户的
kind: Config
preferences: {}
users: #删除其他用户的密钥和证书 只留user-hxg用胡的证书和密钥
- name: user-hxg
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS..............=
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJ..................=
#修改属主属组
$ chown -R hxg:hxg /home/hxg/.kube
验证
#切换到hxg下
$ su - hxg
上一次登录:六 10月 22 03:44:41 CST 2022pts/0 上
#可以访问pod
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-provisioner-7cbb47c7cc-xgckw 1/1 Running 1 (7h17m ago) 29h
#拒绝访问service
$ kubectl get svc
Error from server (Forbidden): services is forbidden: User "user-hxg" cannot list resource "services" in API group "" in the namespace "default"
标签:kubectl,hxg,kubernetes,--,用户,user,授权,pod,权限
From: https://www.cnblogs.com/guangdelw/p/17034055.html