CKA [Security] – ClusterRoleBinding实践教程

其实和RoleBinding的结构一样如下面的公式。ClusterRoleBinding只能绑定ClusterRole不能绑定Role。

ClusterRoleBinding = Subject + ClusterRole

ClusterRole是不被namespace所约束的,所以是能够跨namespace的。ClusterRole更多的是控制K8s集群的component,比如node,storageClass, CRD等等。

ClusterRoleBinding的实际操作

# 创建Service Account和token

1. 创建Service Account , 默认没有指定namespace的话,那么就是使用default namespace

kubectl create sa test-sa

2. 为Service Account 创建Token , 默认没有加上duration的话,那么有效期限就是1个小时而已

kubectl create token test-sa --duration=10h

# 创建ClusterRole和绑定

1. 创建ClusterRole

【使用命令行创建ClusterRole】
kubectl create clusterrole pod-reader --verb=get --verb=list --verb=watch --resource=pods


【dry run ClusterRole 并且输出yaml】
kubectl create clusterrole pod-reader --verb=get --verb=list --verb=watch --resource=pods --dry-run=client -o yaml

ClusterRole是不受namespace约束的,所以当你创建好了之后就会参杂在很多的ClusterRole当中

2. 使用ClusterRoleBinding把刚创建好的ClusterRole和ServiceAccount做绑定

根据这个命令行,绑定的ServiceAccount是default的test-sa

【使用命令行进行ClusterRoleBinding绑定】
kubectl create clusterrolebinding test-bind \
  --clusterrole=pod-reader \
  --serviceaccount=default:test-sa

【dry run ClusterRoleBinding 并且输出yaml】
kubectl create clusterrolebinding test-bind \
  --clusterrole=pod-reader \
  --serviceaccount=default:test-sa \
  --dry-run=client -o yaml

# 进行测试

1. 使用命令行先测试看看test-sa ServiceAccount是否有权限读取pod, 看到yes的话就是有权限

kubectl auth can-i list pods --as=system:serviceaccount:default:test-sa

2. 查看control panel url

kubectl cluster-info

3. 把test-sa token给注入environment variable在terminal当中 (macos)

【注入variable】
TOKEN=XXXXXXXXX

【输出并且检查variable】
echo $TOKEN

4. 把https://K8S-DETAILS-HERE 改成你的control plane url

curl -k https://K8S-DETAILS-HERE/api/v1/namespaces/default/pods --header "Authorization: Bearer $TOKEN"

看到一下的result就是测试成功了。

Loading

Facebook评论