Skip to content

Kubernetes (k3s) ​

kubectl к боевому кластеру под учётной записью ZITADEL. Токен получает и обновляет плагин kubelogin: при первом запросе он открывает браузер для входа.

API-серверhttps://kube01.icncd.ru:6443, CA iconicompany-ca
Приложение ZITADELik8s-cli, client_id 390970312646262924
Проектik8s
Контекстproduction-oidc
Роль ik8sПрава в кластере
admincluster-admin — всё
editedit — рабочие нагрузки, конфиги и секреты, без RBAC
viewview — только чтение

Установка ​

Linux или macOS (на Windows — WSL):

bash
curl -fsSL https://docs.iconicompany.com/install/k8s.sh | sh

Скрипт (исходник):

  • ставит kubectl и kubelogin v1.36.4+ в ~/.local/bin, если их нет (каталог — BIN_DIR=...); контрольная сумма kubelogin зашита в скрипт, kubectl сверяется с суммой dl.k8s.io;
  • дописывает в ~/.kube/config кластер production-oidc, пользователя zitadel и контекст production-oidc; остальные записи не трогает, прежний файл сохраняет рядом как config.bak.<время>.

Вход ​

bash
kubectl --context production-oidc get ns

Откроется браузер со входом ZITADEL. Дальше kubelogin хранит токен в ~/.kube/cache/oidc-login и обновляет его сам.

На сервере без браузера (по SSH) — вход по коду устройства:

bash
kubelogin get-token --oidc-issuer-url=https://id.iconicompany.com \
  --oidc-client-id=390970312646262924 \
  --oidc-extra-scope=urn:zitadel:iam:org:projects:roles --grant-type=device-code

Команда напечатает ссылку и код — подтвердите их в браузере на любом устройстве.

Настройка вручную ​

То же, что делает скрипт, — в ~/.kube/config:

yaml
clusters:
- name: production-oidc
  cluster:
    server: https://kube01.icncd.ru:6443
    certificate-authority-data: <iconicompany-ca из скрипта, base64>
users:
- name: zitadel
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1
      command: kubelogin
      interactiveMode: IfAvailable
      args:
        - get-token
        - --oidc-issuer-url=https://id.iconicompany.com
        - --oidc-client-id=390970312646262924
        - --oidc-extra-scope=urn:zitadel:iam:org:projects:roles
contexts:
- name: production-oidc
  context:
    cluster: production-oidc
    user: zitadel

interactiveMode с kubectl 1.37 обязателен: без него — interactiveMode must be specified.

Ошибки ​

  • Unauthorized (401) — нет роли в ik8s или устарел кэш: rm -rf ~/.kube/cache/oidc-login.
  • Forbidden (403) — роли не хватает: view только читает, edit не меняет RBAC и узлы.