Kubernetes внутрикластерная аутентификация - PullRequest
0 голосов
/ 29 мая 2020

похоже, что мой кластер AKS не может выполнять базовые c запросы к k8s api, т. Е. Используя внутрикластерный токен для модулей. Все работает нормально, когда я использую тот же код с моей локальной машины, т.е. с config.load_kube_config.

Я использую python k8s client 11.0.0, и я загружаю конфигурацию через config.load_incluster_config(). Я получаю следующую ошибку:

HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"Unauthorized","reason":"Unauthorized","code":401}

при попытке просто перечислить мои модули (используя client.list_namespaced_pod). Я также попытался выполнить необработанный запрос на получение, но результат тот же.

Я попытался расширить роль кластера для конкретного доступа к ресурсам, здесь моя роль кластера и привязка кластера:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: clusterrolename
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - namespaces
  verbs:
  - get
  - list
- apiGroups:
  - metrics.k8s.io
  resources:
  - '*'
  verbs:
  - get
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: clusterrolebindingname
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: clusterrolename
subjects:
- kind: ServiceAccount
  name: default
  namespace: mynamespace

но я всегда имеют одинаковый результат.

Один и тот же подход не работает одинаково на linux и windows узлах.

Использование одного и того же подхода раньше было успешным на машине linux (чистый linux кластер).

Может быть связано с версией SDK? Может быть что-то другое в кластере? Кто-нибудь знает, как я могу получить список авторизации для любого конкретного c ServiceAccount?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

модуль действительно имел необходимые права. Ошибка заключалась в неправильной инициализации экземпляра api_client, которую я выполнил отдельно, просто вызвав client.Configuration ().

Я решил проблему, избегая инициализации экземпляра api_client и импортировав его непосредственно из client.CoreV1Api. .

1 голос
/ 29 мая 2020

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

kubectl auth can-i get pods --as=system:serviceaccount:mynamespace:default -n mynamespace

Если приведенная выше команда возвращает no, это означает, что учетная запись службы не имеет right RBA C.

Чтобы перечислить все разрешения учетной записи службы, используйте

kubectl auth can-i --list --as=system:serviceaccount:mynamespace:default

Чтобы узнать больше, используйте kubectl auth can-i -h

...