我正在尝试为我的 kubernetes 集群创建一个命名空间角色,这将允许我的应用程序使用 kubernetes sdk 能够通过其服务帐户检索部署。我正在尝试创建一个角色,该角色将提供对部署资源的访问权限,并创建一个角色绑定以将该角色应用到我的服务帐户。
我已经使用 localstack 手动完成此工作,只需运行此文件(kubectl apply -f myFile.yaml)来创建角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: test-deployment-pod-reader
rules:
- apiGroups: [""]
resources: ["pods", "deployments"]
verbs: ["get", "watch", "list"]
这成功创建了角色,输出为:
Resources Verbs
--------- -----
deployments [get watch list]
pods [get watch list]
但是,当我连接到我的 REAL 集群时,我们位于非默认命名空间,我们称其为命名空间
test
。由于我的限制(我猜?),我无法简单地应用这样的文件,但我知道我应该能够创建该角色,因为当我运行此命令时:
kubectl auth can-i get deployments -n test
它会响应
yes
。尝试使用此命令创建角色成功,但资源不正确(deployments.app 而不仅仅是部署,当我尝试使用 localstack/eks 以这种方式创建角色时,我确实看到了相同的行为):
kubectl create role my-role --verb=get --verb=list --verb=watch --resource=pods,deployments -n test # succeeds
kubectl describe role my-role -n test
Resources Verbs
--------- -----
deployments.apps [get watch list]
pods [get watch list]
显然,deployments.apps 没有足够的访问权限来让我的
api.listNamespacedDeployment
请求从我的应用程序成功。
有谁知道如何使用
deploy
命令以编程方式创建具有 kubectl create role
资源的角色?我不明白为什么它不断在 .apps
的末尾添加 deployments
kubernetes cli 似乎确实试图通过添加Deployments.apps 来帮助我。正如一些评论提到的那样,部署类型确实属于应用程序的 apiGroup。我一定没有为正确的服务帐户提供角色,或者可能我位于错误的命名空间中。这似乎确实按预期工作