0·必要说明
- 1.我们这里使用的是k8s的RBAC系统。
- 2.用户,ServiceAccount和Group都是访问主体,不过前面两者只要加入某个组就拥有改组拥有的权限
- 3.有多种角色,角色拥有某个子集的资源的某些权限,角色可以分为namespace角色(Role)和集群角色(ClusterRole)
- 4.访问主体只有和角色绑定才能够获得权限,有两种绑定对象RoleBinding和ClusterRoleBing,前者绑定只能活得namespace角色的资源权限,后者只能绑定集群角色
下面开始操作,集群的证书在安装时自动生成在/etc/kubernetes/pki
我们主要需要以下两个文件
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/ca.key
1·创建个人证书
# 生成user私钥
openssl genrsa -out neozhao.key 2048
# 创建证书签署请求
openssl req -new -key neozhao.key -out neozhao.csr -subj "/O=org/CN=neozhao"
# 使用集群证书签署个人证书
openssl x509 -req -in neozhao.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out neozhao.crt -days 365
2·生成配置文件
# 设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=https://10.96.51.8:6443 \
--kubeconfig=./config
# 设置客户端认证参数
kubectl config set-credentials neozhao \
--client-certificate=neozhao.crt \
--client-key=neozhao.key \
--embed-certs=true \
--kubeconfig=./config
# 设置上下文参数
kubectl config set-context default \
--cluster=kubernetes \
--user=neozhao \
--kubeconfig=./config
# 设置默认上下文
kubectl config use-context default \
--kubeconfig=./config
以上步骤会在本地目录生成一个config
文件,如果将这个文件复制到~/kube/config
, 使用kubectl访问集群时,没有任何权限,因为没有绑定任何角色。
所以先回复以前的权限更高的config文件,走完以下操作
3·创建相应的Role和RoleBinding
创建Role
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pods-reader
namespace: default
rules:
- apiGroups:
- ""
resources:
- pods
- pods/log
verbs:
- get
- list
- watch
EOF
创建相应的RoleBinding
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: default-pods-reader
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pods-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: neozhao
EOF
到这一步就可以进行验证了, 复制config
到~/kube/config
(温馨提示,保存老的~/kube/config
)
kubectl get pod
现在能够读default命名空间的pod了,更多的配置,请参考官方文档
网友评论