kubernetes RBAC role verbs to exec to pod



我的 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" 动词。

最新更新