Предоставьте привилегии учетной записи службы Kubernetes для получения модулей из всех пространств имен - PullRequest
0 голосов
/ 09 апреля 2019

Я хотел бы предоставить привилегии учетной записи службы Kubernetes для выполнения kubectl --token $token get pod --all-namespaces.Я знаком с этим для одного пространства имен, но не знаю, как это сделать для всех (включая новые, которые могут быть созданы в будущем и без предоставления учетной записи службы полные права администратора ).

В настоящее время я получаю это сообщение об ошибке:

Ошибка от сервера (Запрещено): pods запрещено: Пользователь "system: serviceaccount: kube-system: test" не может перечислить ресурсы "pods"в группе API" "в области кластера

Какие (кластерные) роли и привязки ролей требуются?

ОБНОВЛЕНИЕ Назначение роли view дляСервис со следующим ClusterRoleBinding работает и является шагом вперед.Однако я хотел бы ограничить привилегии учетной записи службы дополнительно требуемым минимумом.

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test
subjects:
- kind: ServiceAccount
  name: test
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

Токен учетной записи службы можно извлечь следующим образом:

secret=$(kubectl get serviceaccount test -n kube-system -o=jsonpath='{.secrets[0].name}')
token=$(kubectl get secret $secret -n kube-system -o=jsonpath='{.data.token}' | base64 --decode -)

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

ClustRole & ClusterRoleBinding правильны, когда вам нужны все пространства имен, просто уменьшите права доступа:

kind: ServiceAccount
apiVersion: v1
metadata:
  name: all-ns-pod-get
  namespace: your-ns

---

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: all-ns-pod-get
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: all-ns-pod-get
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: all-ns-pod-get
subjects:
- kind: ServiceAccount
  name: all-ns-pod-get

Тогда все модули в пространстве имен your-ns получат токен k8s, автоматически смонтированный.Вы можете использовать голый kubectl или k8s sdk внутри капсулы, не передавая никаких секретов.Обратите внимание, что вам не нужно передавать --token, просто запустите команду в модуле в пространстве имен, в котором вы создали этот ServiceAccount.

Вот хорошая статья, объясняющая понятия https://medium.com/@ishagirdhar/rbac-in-kubernetes-demystified-72424901fcb3

1 голос
/ 09 апреля 2019
  1. Следуйте приведенным ниже правилам и создайте тестовую учетную запись.
apiVersion: v1
kind: ServiceAccount
metadata:
  name: test
  namespace: default

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]


kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test
subjects:
- kind: ServiceAccount
  name: test
  namespace: default
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

развернуть тестовый модуль из примера ниже

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: test
  name: test
spec:
  serviceAccountName: test
  containers:
  - args:
    - sleep
    - "10000"
    image: alpine
    imagePullPolicy: IfNotPresent
    name: test
    resources:
      requests:
        memory: 100Mi
  1. Установить локон и кубектл
kubectl exec test apk add curl
kubectl exec test -- curl -o /bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.12.0/bin/linux/amd64/kubectl
kubectl exec test -- sh -c 'chmod +x /bin/kubectl'
  1. Вы должны иметь возможность перечислять модули из всех пространств имен из тестового модуля
master $ kubectl exec test -- sh -c 'kubectl get pods --all-namespaces'
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
app1          nginx-6f858d4d45-m2w6f           1/1     Running   0          19m
app1          nginx-6f858d4d45-rdvht           1/1     Running   0          19m
app1          nginx-6f858d4d45-sqs58           1/1     Running   0          19m
app1          test                             1/1     Running   0          18m
app2          nginx-6f858d4d45-6rrfl           1/1     Running   0          19m
app2          nginx-6f858d4d45-djz4b           1/1     Running   0          19m
app2          nginx-6f858d4d45-mvscr           1/1     Running   0          19m
app3          nginx-6f858d4d45-88rdt           1/1     Running   0          19m
app3          nginx-6f858d4d45-lfjx2           1/1     Running   0          19m
app3          nginx-6f858d4d45-szfdd           1/1     Running   0          19m
default       test                             1/1     Running   0          6m
kube-system   coredns-78fcdf6894-g7l6n         1/1     Running   0          33m
kube-system   coredns-78fcdf6894-r87mx         1/1     Running   0          33m
kube-system   etcd-master                      1/1     Running   0          32m
kube-system   kube-apiserver-master            1/1     Running   0          32m
kube-system   kube-controller-manager-master   1/1     Running   0          32m
kube-system   kube-proxy-vnxb7                 1/1     Running   0          33m
kube-system   kube-proxy-vwt6z                 1/1     Running   0          33m
kube-system   kube-scheduler-master            1/1     Running   0          32m
kube-system   weave-net-d5dk8                  2/2     Running   1          33m
kube-system   weave-net-qjt76                  2/2     Running   1          33m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...