Как добавить Serviceaccout с помощью патча kubectl к существующей привязке Clusterrolebinding - PullRequest
0 голосов
/ 27 мая 2020

Это моя существующая привязка к кластеру

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: example-role
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: test-role
subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: ns1

Я планирую добавить тот же ServiceAccount (test-sa) в другое пространство имен (например, ns2) и связать его с моей «тестовой ролью ClusterRole» .

то, что я пробовал

subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: ns2

Я попытался применить указанный выше файл yaml, например,

kubectl patch  clusterrolebinding <clusterrolebinding-name> --type="strategic"  --patch "$(cat role.yaml)"

Результат

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: example-role
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: test-role
subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: ns2

Это добавление ClusterRoleBinding с sa в новое пространство имен, но моя существующая привязка в пространстве имен ns1 была удалена .. есть ли способ объединить новые изменения вместо замены ..iam пытается сделать это автоматически .. как сценарий bash для редактируя эту привязку cluserrolebinding, поэтому я выбрал патч kubectl

1 Ответ

3 голосов
/ 27 мая 2020

Вы можете попробовать команду ниже. Это сработало. здесь .

kubectl patch clusterrolebinding example-role --type='json' -p='[{"op": "add", "path": "/subjects/1", "value": {"kind": "ServiceAccount", "name": "test-sa","namespace": "ns2" } }]'

op - операция add

subjects/1 - добавить к первой позиции массива субъектов

subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: ns1
- kind: ServiceAccount
  name: test-sa
  namespace: ns2
...