无说明的情况下,以下操作均在/etc/kubernetes/pki目录下执行
root@master:/etc/kubernetes/pki# cd /etc/kubernetes/pki
1,创建用户密钥
root@master:/etc/kubernetes/pki# openssl genrsa -out leeqiand.key 2048 Generating RSA private key, 2048 bit long modulus (2 primes) .........+++++ ...........................+++++ e is 65537 (0x010001)
2,创建证书签署请求
#CN= 用户名
root@master:/etc/kubernetes/pki# openssl req -new -key leeqiand.key -out leeqiand.csr -subj "/CN=leeqiand"
3,签署证书
root@master:/etc/kubernetes/pki# openssl x509 -req -in leeqiand.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out leeqiand.crt -days 365 Signature ok subject=CN = leeqiand Getting CA Private Key
查看生成的文件
root@master:/etc/kubernetes/pki# ls |grep leeqiand leeqiand.crt leeqiand.csr leeqiand.key
4,创建kubeconfig文件
创建集群信息
--server根据实际信息填写即可
root@master:/etc/kubernetes/pki# kubectl config set-cluster kubernetes --certificate-authority=ca.crt --embed-certs=true --server=https://10.0.2.2:6443 --kubeconfig=leeqiand.kubeconfig
Cluster "kubernetes" set.
root@master:/etc/kubernetes/pki# cat leeqiand.kubeconfig
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:
。。。。。。。。。。。。
server: https://10.0.2.2:6443
name: kubernetes
contexts: null
current-context: ""
kind: Config
preferences: {}
users: null
创建用户
root@master:/etc/kubernetes/pki# kubectl config set-credentials leeqiand --client-certificate=/etc/kubernetes/pki/leeqiand.crt --client-key=/etc/kubernetes/pki/leeqiand.key --embed-certs=true --kubeconfig=leeqiand.kubeconfig User "leeqiand" set.
创建context
root@master:/etc/kubernetes/pki# kubectl config set-context leeqiand@kubernetes --cluster=kubernetes --user=leeqiand --kubeconfig=leeqiand.kubeconfig Context "leeqiand@kubernetes" created.
5,创建role以及rolebinding
(任意目录)
role以及rolebinding网上资料较多,仅做一简单范例
role:
root@master:~/kube/sa# cat role.yaml kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: default name: lee rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list", "create", "update", "patch"]
rolebinding
root@master:~/kube/sa# cat rolebind.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: mytest namespace: default subjects: - kind: User name: leeqiand apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: lee apiGroup: rbac.authorization.k8s.io
创建:
root@master:~/kube/sa# kubectl create -f role.yaml role.rbac.authorization.k8s.io/lee created root@master:~/kube/sa# kubectl create -f rolebind.yaml rolebinding.rbac.authorization.k8s.io/mytest created root@master:~/kube/sa# kubectl get role,rolebinding NAME CREATED AT role.rbac.authorization.k8s.io/lee 2022-03-02T09:12:25Z NAME ROLE AGE rolebinding.rbac.authorization.k8s.io/mytest Role/lee 42s
6,将配置文件分发给普通用户
root@master:/etc/kubernetes/pki# cp leeqiand.kubeconfig /home/lee/.kube/config root@master:/etc/kubernetes/pki# chown lee:lee /home/lee/.kube/config
切换到普通用户
root@master:/etc/kubernetes/pki# su - lee
lee@master:~$ cd .kube/
lee@master:~/.kube$ ls
config
lee@master:~/.kube$ kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?
因为没指定current-context,手动修改config
lee@master:~/.kube$ vim config
contexts:
- context:
cluster: kubernetes
user: leeqiand
name: leeqiand@kubernetes
current-context: leeqiand@kubernetes
7,测试
由于我们授予了create权限,所以可以创建pod,但是并无delete权限,所以无法delete,由以下测试可以查看与预期相符
lee@master:~/.kube$ kubectl get pods NAME READY STATUS RESTARTS AGE dns 1/1 Running 22 (165m ago) 21d lee@master:~/.kube$ kubectl run nginx --image=nginx pod/nginx created lee@master:~/.kube$ kubectl get pods NAME READY STATUS RESTARTS AGE dns 1/1 Running 22 (165m ago) 21d nginx 1/1 Running 0 10s lee@master:~/.kube$ kubectl delete pod nginx Error from server (Forbidden): pods "nginx" is forbidden: User "leeqiand" cannot delete resource "pods" in API group "" in the namespace "default" lee@master:~/.kube$



