支持“撤消撤消”需要哪些角色权限?

时间:2020-10-09 17:07:34

标签: kubernetes kubernetes-rbac

我正在尝试为我们的CI / CD服务器设置一个角色,该角色可以支持回滚失败的部署。当前权限正在用于更新部署和相关资源并监视其状态,但是当我尝试以CI用户身份运行“ kubectl rollout undo deployment / admin”时,出现错误:

错误:无法从部署管理中检索副本集:禁止copysets.apps:用户“ ci-admin”无法在名称空间“ acceptance”中的API组“ apps”中列出资源“ replicasets”

这是原始角色配置:

# Server role that allows CI to push application deployments to Kubernetes
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: deployment-role
  namespace: acceptance
rules:
  - apiGroups: ["*"]
    resources: ["deployments"]
    resourceNames: ["admin", "backend", "web"]
    verbs: ["patch", "update", "watch"]
  - apiGroups: ["*"]
    resources: ["deployments"]
    verbs: ["get", "list"]
  - apiGroups: ["*"]
    resources: ["configmaps"]
    resourceNames: ["admin-fluent-bit-config", "backend-fluent-bit-config", "web-fluent-bit-config"]
    verbs: ["patch", "update", "watch"]
  - apiGroups: ["*"]
    resources: ["configmaps"]
    verbs: ["get", "list"]
  - apiGroups: ["*"]
    resources: ["horizontalpodautoscalers"]
    resourceNames: ["backend"]
    verbs: ["delete", "patch", "update"]
  - apiGroups: ["*"]
    resources: ["horizontalpodautoscalers"]
    verbs: ["create", "get", "list"]
  - apiGroups: ["*"]
    resources: ["events", "pods", "pods/log"]
    verbs: ["get", "list"]

我试图添加权限来获取和列出副本集以解决该错误:

  - apiGroups: ["*"]
    resources: ["deployments", "replicasets"]
    verbs: ["get", "list"]

但是我仍然遇到和以前一样的错误。

Kubernetes文档根本没有帮助,因为对于任何给定命令而言,似乎都没有全面列出所需的权限。仅有几个例子。

谁能告诉我们回滚需要什么权限?

2 个答案:

答案 0 :(得分:0)

如@ForgetfulFellow所述,您必须在extensions中添加appsapiGroups

此外,您还必须在replicasets字段中添加resources,因为如果没有它,您将收到以下错误:

error: failed to retrieve replica sets from deployment sample-deploy: replicasets.apps is forbidden: User "user" cannot list resource "replicasets" in API group "apps" in the namespace "acceptance"

答案 1 :(得分:0)

今天早上我再次尝试了此方法,并且它如最初所写的那样工作了。

我对发生的事情的最佳猜测是,CI当时实际上正在其他群集上运行。我们的客户已于9月将接受环境移至新的AWS账户,但直到10月中旬,旧环境才被完全清除。当我从开发人员框中更改新集群中的角色时,CI服务器必须仍在使用旧集群的上下文,并且我没有注意到它,因为它们的名称相同。 :/

对不起,误报警。