【问题标题】:kubernetes RBAC role verbs to exec to podkubernetes RBAC 角色动词执行到 pod
【发布时间】:2018-01-05 17:06:12
【问题描述】:

我的 1.9 集群为 dev 用户创建了这个部署角色。部署按预期工作。现在我想为开发人员提供 exec 和日志访问权限。我需要为 exec 添加什么角色到 pod?

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"

谢谢 SR

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    RBAC docs say that

    大多数资源由其名称的字符串表示形式表示,例如“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”动词的原因。

    【讨论】:

    • 我必须将动词 "get" 添加到我的 pods/exec 部分,因为我正在使用的客户端库正在执行 http GET 以首先协商 websocket。使用 kubectl 它会发送一个 http POST 并在这种情况下需要 "create" 动词。可能值得更新此示例以包含 "get" 动词。
    • 添加了关于它的注释。感谢您的提醒。
    猜你喜欢
    • 2019-12-30
    • 2020-04-15
    • 2019-03-27
    • 2021-06-26
    • 1970-01-01
    • 2016-03-25
    • 2021-12-11
    • 1970-01-01
    • 2019-07-25
    相关资源
    最近更新 更多