我有以下配置
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: deploy-agent-rbac
subjects:
- kind: ServiceAccount
name: deploy-agent
namespace: ais-service
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: deploy-agent
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/pod-identity-role
我正在使用Golang Kubernetes API来监视事件,例如:
watch, err := k.client.CoreV1().Pods(namespace).Watch(metav1.ListOptions{
LabelSelector: fmt.Sprintf("service=%s", target),
})
但是,当我使用正确的给定标签更新/删除该命名空间中的Pod时,它不显示任何事件。但是,当我在本地运行相同的代码时,它确实可以。我怀疑用于本地环境的角色如何获得正确的权限,但是我在其中运行服务的名称空间却不正确。
当我运行$ kubectl auth can-i watch deployments --namespace default --as cluster-admin
时,我得到“否”。
答案 0 :(得分:1)
ClusterRoleBinding
引用了ais-service
命名空间中的一个服务帐户,但是该服务帐户没有命名空间,这意味着该服务帐户是在default
命名空间中创建的。在serviceaccount中添加名称空间
apiVersion: v1
kind: ServiceAccount
metadata:
name: deploy-agent
namespace: ais-service
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/pod-identity-role
要验证权限,请运行以下命令
kubectl auth can-i list deployments --as=system:serviceaccount:ais-service:deploy-agent -n ais-service