Использование внешнего провайдера аутентификации (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