我的 1.9 集群为 dev 用户创建了此部署角色。部署按预期工作。现在我想向开发人员授予exec和日志访问权限。我需要为执行程序添加到容器中的什么角色?
kind: Role
name: deployment-manager
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["deployments", "replicasets", "pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
错误信息:
kubectl exec nginx -it -- sh
Error from server (Forbidden): pods "nginx" is forbidden: User "dev" cannot create pods/exec in the namespace "dev"
谢谢锶
RBAC 文档说
大多数资源由其名称的字符串表示形式表示,例如"pods",就像它显示在相关 API 终结点的 URL 中一样。但是,一些 Kubernetes API 涉及"子资源",例如 Pod 的日志。[...]若要在 RBAC 角色中表示这一点,请使用斜杠分隔资源和子资源。
要允许主题同时读取 pod 和 pod 日志,并能够执行到 pod,您可以编写:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: pod-and-pod-logs-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create"]
一些客户端库可能会先执行 http GET 来协商 websocket,这将需要 "get" 动词。 kubectl 会发送一个 http POST,这就是为什么在这种情况下它需要 "create" 动词。