我正在尝试为我们的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文档根本没有帮助,因为对于任何给定命令而言,似乎都没有全面列出所需的权限。仅有几个例子。
谁能告诉我们回滚需要什么权限?
答案 0 :(得分:0)
如@ForgetfulFellow所述,您必须在extensions
中添加apps
,apiGroups
。
此外,您还必须在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服务器必须仍在使用旧集群的上下文,并且我没有注意到它,因为它们的名称相同。 :/
对不起,误报警。