Какие разрешения роли необходимы для поддержки "отмены развертывания"?

Я пытаюсь настроить роль для нашего сервера CI/CD, который может поддерживать откат неудачного развертывания. Текущие разрешения работают для обновления развертывания и связанных ресурсов и мониторинга их статуса, но когда я пытаюсь запустить, например, "kubectl rollout undo deployment/admin" в качестве пользователя CI, я получаю сообщение об ошибке:

ошибка: не удалось получить наборы реплик от администратора развертывания: replicasets.apps запрещено: пользователь "ci-admin" не может перечислить "реплики" ресурсов в группе API "apps" в пространстве имен "принятие"

Это была исходная конфигурация ролей:

# 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 ответа

Решение

Я попробовал это снова сегодня утром, и это сработало, как было написано изначально.

Мое лучшее предположение относительно того, что происходило, заключается в том, что в то время CI на самом деле работал в другом кластере. В сентябре наш клиент переместил среду принятия в новую учетную запись AWS, но полностью очистить старую среду не удалось до середины октября. Пока я вносил изменения в роль в новом кластере из своего модуля разработчика, сервер CI, должно быть, все еще использовал контекст старого кластера, и я не заметил этого, потому что у них обоих было одно и то же имя.:/

Извините за ложную тревогу.

Как упоминалось @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"
Другие вопросы по тегам