Уменьшить права оператора кубернетес

Я новичок в мире Kubernetes, но некоторое время назад я разработал оператор Kubernetes, используя OperatorSDK и Golang. Я использовал роль администратора кластера для запуска модуля оператора, но теперь я хочу уменьшить ресурсы, с которыми оператор может работать.

Это какой-то инструмент, который может сканировать код оператора и генерировать соответствующую роль кластера? Или есть какой-нибудь хитрый способ узнать, какие ресурсы использует оператор?

2 ответа

Предполагая, что вам нужно добавить привилегии для вашей роли кластера, потому что ваш контроллер сам согласовывает рабочие нагрузки Kubernetes, вы можете использовать для этого проект operator-builder (см. Https://github.com/vmware-tanzu-labs/operator-builder ). для тебя. Код, который делает это автоматически, находится по адресу https://github.com/vmware-tanzu-labs/operator-builder/blob/main/internal/workload/v1/rbac.go#L104 .

Шаблон из OperatorSDK будет знаком тому, что вы делаете в настоящее время, поскольку OperatorSDK и Operator Builder являются плагинами для Kubebuilder и, следовательно, следуют аналогичным шаблонам (например, <command> init <args> а также <command> create api <args>.

ПРИМЕР:

Ваша конфигурация (конструкция для конкретного проекта) будет выглядеть так:

      name: webstore
kind: StandaloneWorkload
spec:
  api:
    domain: acme.com
    group: apps
    version: v1alpha1
    kind: WebStore
    clusterScoped: false
  resources:
  - resources.yaml

В основном ваш ввод ( resources.yaml из приведенной выше конфигурации) будет примерно так:

      apiVersion: apps/v1
kind: Deployment
metadata:
  name: webstore-deploy
spec:
  replicas: 2  # +operator-builder:field:name=webStoreReplicas,default=2,type=int
  selector:
    matchLabels:
      app: webstore
  template:
    metadata:
      labels:
        app: webstore
    spec:
      containers:
      - name: webstore-container
        #+operator-builder:field:name=webstoreImage,default="nginx:1.17",type=string,description="Defines the web store image"
        image: nginx:1.17
        ports:
        - containerPort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: webstore-ing
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: app.acme.com
    http:
      paths:
      - path: /
        backend:
          serviceName: webstorep-svc
          servicePort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: webstore-svc # +operator-builder:field:name=serviceName,type=string,default="webstore-svc"
spec:
  selector:
    app: webstore
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

Выполнение следующих команд:

      operator-builder init \
    --workload-config <path_to_config> \
    --repo github.com/acme/acme-cnp-mgr \
    --skip-go-version-check

operator-builder create \
create api \
    --workload-config <path_to_config> \
    --controller \
    --resource

Ваш вывод будет примерно таким (в файле контроллера):

      // +kubebuilder:rbac:groups=apps.acme.com,resources=webstores,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apps.acme.com,resources=webstores/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=services,verbs=get;list;watch;create;update;patch;delete

Когда вы запускаете make manifests , ваш RBAC создается на основе правильных маркеров Kubebuilder.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь ключевым участником проекта и, конечно же, думаю, что это поможет автоматизировать создание маркеров RBAC. :)

Самый простой способ - это, вероятно, удалить все разрешения, а затем добавить их обратно в зависимости от выданных ошибок.

Другие вопросы по тегам