Skip to content

Использование внешнего провайдера аутентификации (LDAP/AD/OIDC)

В качестве внешнего провайдера аутентификации предварительно настроен keycloak (OIDC). Пример настройки можно найти тут.

console
$ kubectl -n kube-system get pod kube-apiserver-alt-orchestra-2-c-1 -o yaml | yq .spec.containers[0].command | grep oidc

Для аутентификации c помощью OIDC используется плагин kubectl oidc-login.

console
$ cd "$HOME/alt-orchestra/19-21-oidc"

Создаем kubeconfig для аутентификацию с помощью OIDC. Для этого можно воспользоваться kubectl oidc-login setup. Пример вывода:

console
$ kubectl oidc-login setup --oidc-issuer-url=https://keycloak.zvirt.test/realms/test-realm --oidc-client-id=k8s --oidc-client-secret=6uAwCI1Dn5ONmeePBpGYjUvnO0HMmrUC --certificate-authority "$HOME/alt-orchestra/keycloak-sso-kubernetes-oidc-tutorial/keycloak.crt" --grant-type password
Authentication in progress...
Username: test-user-1
Password:

Аутентификация с помощью OpenID Connect Provider

Получите токен со следующими claims:

{
  "exp": 1777343540,
  "iat": 1777343240,
  "jti": "715e55aa-3a26-f29b-5257-f1913129862c",
  "iss": "https://keycloak.zvirt.test/realms/test-realm",
  "aud": "k8s",
  "sub": "1cf9ba4c-253b-4578-8de3-9c3ea227a984",
  "typ": "ID",
  "azp": "k8s",
  "sid": "9290fa9b-b089-471c-af04-f88da22b1d5d",
  "at_hash": "6I_HfPvWazriQDla34Eslw",
  "acr": "1",
  "email_verified": true,
  "name": "test-user 1",
  "groups": [
    "/test-group-1"
  ],
  "preferred_username": "test-user-1",
  "given_name": "test-user",
  "family_name": "1",
  "email": "test-user-1@example.com"
}

Настройка kubeconfig

Команда для настройки kubeconfig:

console
$ kubectl config set-credentials oidc \
  --exec-api-version=client.authentication.k8s.io/v1 \
  --exec-interactive-mode=Never \
  --exec-command=kubectl \
  --exec-arg=oidc-login \
  --exec-arg=get-token \
  --exec-arg="--oidc-issuer-url=https://keycloak.zvirt.test/realms/test-realm" \
  --exec-arg="--oidc-client-id=k8s" \
  --exec-arg="--oidc-client-secret=6uAwCI1Dn5ONmeePBpGYjUvnO0HMmrUC" \
  --exec-arg="--certificate-authority=/home/user/alt-orchestra/keycloak-sso-kubernetes-oidc-tutorial/keycloak.crt" \
  --exec-arg="--grant-type=password"

Проверка настройки

Очистим закэшированный токен.

console
$ kubectl oidc-login clean

Попробуем аутентифицироваться под пользователем test-user-2, который состоит в группе test-group-adm-1.

console
$ kubectl --kubeconfig oidc.kubeconfig auth whoami

Данная группа привязана к ClusterRole cluster-admin, поэтому имеет полный доступ к кластеру.

console
$ kubectl --kubeconfig oidc.kubeconfig get clusterrolebinding test-group-adm-1 -o yaml

Опубликовано под лицензией GPL-3.0+. Содержание доступно по лицензии CC BY-SA 4.0, если не указано иное. Разработано участниками ALT Orchestra.