- 创建sa角色
# sa需要指定命名空间
kubectl create sa my-test -n test
2. 创建role规则
# apiGroups资源组,resources资源,verbs权限,下面权限是只能查看pod和deployment,如果需要进入pod则需要增加pods/exec
vi role-test.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: myrole
namespace: test
rules:
- apiGroups:
- ""
resources:
- pods,
verbs:
- get
- list
- watch
- apiGroups:
- apps
resources:
- pods
- deployments
verbs:
- get
- list
- watch
- create
注: role是针对命名空间的,需要指定命名空间,ClusterRole是针对整个集群的则不需要指定命名空间。
3. 创建role
kubectl create role-test.yaml
4. 配置rolebinding,将sa绑定到role上,让sa获取相应的权限。
# 这里RoleBinding也是针对命名空间的和Role对应所以需要指定,ClusterRoleBinding则不需要指定命名空间
vi myrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: myrolebinding
namespace: test
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: myrole
subjects:
- kind: ServiceAccount
name: my-test
namespace: test
5. 创建RoleBinding
kubectl create -f myrolebinding.yaml
6. 手动为ServiceAccount创建长期有效的Token。
vi my--token.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-test-token-secret
namespace: test
annotations:
kubernetes.io/service-account.name: my-test
type: kubernetes.io/service-account-token
7. 创建
kubectl create -f my-test-token.yaml
8. 配置集群访问信息。
a. 将密钥中的ca.crt解码后导出备用
kubectl get secret my-test-token-secret -n test -oyaml |grep ca.crt: | awk '{print $2}' |base64 -d > /home/ca.crt
b. 设置集群访问方式,其中test-arm为需要访问的集群,https://192.168.0.110:5443为集群apiserver地址(获取方法参见图1),/home/test.config为配置文件的存放路径:
- 如果通过内部apiserver地址,执行如下命令:
kubectl config set-cluster test-arm --server=https://192.168.0.110:5443 --certificate-authority=/home/ca.crt --embed-certs=true --kubeconfig=/home/test.config
- 如果通过公网apiserver地址,执行如下命令:
kubectl config set-cluster test-arm --server=https://192.168.0.110:5443 --kubeconfig=/home/test.config --insecure-skip-tls-verify=true
9. 配置集群认证信息。
a. 获取集群的token信息(这里如果是get获取需要based64 -d解码
token=$(kubectl describe secret my-test-token-secret -n test | awk '/token:/{print $2}')
b. 设置使用集群的用户ui-admin
kubectl config set-credentials ui-admin --token=$token --kubeconfig=/home/test.config
10. 配置集群认证访问的context信息,ui-admin@test为context的名称
kubectl config set-context ui-admin@test --cluster=test-arm --user=ui-admin --kubeconfig=/home/test.config
11. 设置context,设置完成后使用方式见验证权限
kubectl config use-context ui-admin@test --kubeconfig=/home/test.config
12 可以查询test命名空间下的pod资源,被拒绝访问其他命名空间的Pod资源。
kubectl get pod -n test --kubeconfig=/home/test.config
13 不可删除test命名空间下的Pod资源