Kubernetes集群权限用于监视部署不接收事件

时间:2020-06-24 23:58:37

标签: go kubernetes

我有以下配置

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时,我得到“否”。

1 个答案:

答案 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