一、配置文件说明
1、kubeconfig文件
/root/.kube/config文件内容如下:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1后面的省略了。。。。。
server: https://192.168.1.10:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
namespace: default
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJW后面的省略了。。。。。
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBb2RHMl后面的省略了。。。。。
文件分为三大部分:clusters、contexts、users
clusters 部分
定义集群信息,包括 api-server 地址、certificate-authority-data: 用于服务端证书认证的自签名 CA 根证书(master 节点 /etc/kubernetes/pki/ca.crt 文件内容 )。
contexts 部分
集群信息和用户的绑定,kubectl 通过上下文提供的信息连接集群。
users 部分
多种用户类型,默认是客户端证书(x.509 标准的证书)和证书私钥,也可以是 ServiceAccount Token
client-certificate-data
:
base64 加密后的客户端证书
client-key-data
:
base64 加密后的证书私钥
二、新建只读用户配置文件
1、生成客户端 TLS 证书
创建证书私钥:
openssl genrsa -out developer.key 2048
openssl req -new -key developer.key -out developer.csr -subj "/CN=developer"
k8s 集群(API Server)的 CA 根证书文件,一般会在 master 节点的 /etc/kubernetes/pki/ 路径下,会有两个文件,一个是 CA 根证书(ca.crt),一个是 CA 私钥(ca.key)
2、通过集群的 CA 根证书和第 2 步创建的 csr 文件,来为用户颁发证书
openssl x509 -req -in developer.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out developer.crt -days 365
至此,客户端证书颁发完毕
三、基于RBAC 授予只读权限
kubectl create clusterrolebinding kubernetes-viewer --clusterrole=view --user=developer
四、基于客户端证书生成 Kubeconfig 文件
拷贝 $HOME/.kube.config,生成新文件名为 developer-config
/root/.kube/文件夹下操作:
cp -a config developer-config
contexts 部分 user 字段改为 developer,name 字段改为 developer@kubernetes
users 部分 name 字段改为 developer,client-certificate-data 字段改为 developer.crt base64 加密后的内容,client-key-data 改为 developer.key base64 加密后的内容
证书 base64 加密时指定 --wrap=0 参数
cat developer.crt | base64 --wrap=0
cat developer.key | base64 --wrap=0
五、验证
执行命令:
kubectl --kubeconfig developer-config --context=developer@kubernetes -n default get pod
可以正常查到数据,如图:
接下来我们尝试删除一个POD:
kubectl --kubeconfig developer-config --context=developer@kubernetes delete pod flaskapp-1-84fbb4f499-48s7b
提示developer用户删除操作被禁止。
配置完毕。