0

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

错误:无法从部署管理员检索副本集:replisets.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 文档根本没有帮助,因为似乎没有任何给定命令所需权限的完整列表。只有少数几个例子。

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

4

2 回答 2

0

正如@ForgetfulFellow 所提到的,您extensions必须appsapiGroups.

此外,您必须添加字段replicasetsresources因为没有它您将收到以下错误:

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"
于 2020-10-12T17:50:22.477 回答
0

今天早上我又试了一次,它就像最初写的那样奏效了。

对于发生的事情,我最好的猜测是 CI 当时实际上是在不同的集群上运行的。我们的客户在 9 月将验收环境转移到了一个新的 AWS 账户,但直到 10 月中旬,旧环境才完全清理干净。当我从我的开发箱中更改新集群中的角色时,CI 服务器一定仍然在使用旧集群的上下文,我没有注意到它,因为它们都具有相同的名称。:/

很抱歉误报。

于 2020-11-02T18:53:04.547 回答