Kubernetes (k3s)
kubectl к боевому кластеру под учётной записью ZITADEL. Токен получает и обновляет плагин kubelogin: при первом запросе он открывает браузер для входа.
| API-сервер | https://kube01.icncd.ru:6443, CA iconicompany-ca |
| Приложение ZITADEL | ik8s-cli, client_id 390970312646262924 |
| Проект | ik8s |
| Контекст | production-oidc |
Роль ik8s | Права в кластере |
|---|---|
admin | cluster-admin — всё |
edit | edit — рабочие нагрузки, конфиги и секреты, без RBAC |
view | view — только чтение |
Установка
Linux или macOS (на Windows — WSL):
bash
curl -fsSL https://docs.iconicompany.com/install/k8s.sh | shСкрипт (исходник):
- ставит
kubectlиkubeloginv1.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: zitadelinteractiveMode с kubectl 1.37 обязателен: без него — interactiveMode must be specified.
Ошибки
Unauthorized(401) — нет роли вik8sили устарел кэш:rm -rf ~/.kube/cache/oidc-login.Forbidden(403) — роли не хватает:viewтолько читает,editне меняет RBAC и узлы.