Уменьшить права оператора кубернетес
Я новичок в мире 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. :)
Самый простой способ - это, вероятно, удалить все разрешения, а затем добавить их обратно в зависимости от выданных ошибок.