Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
devops:kubernetes [2021/02/17 06:41] – [Настройка client в keycloak] admin | devops:kubernetes [2021/04/21 12:50] – [Отмена удаления PersistentVolume] admin | ||
---|---|---|---|
Line 652: | Line 652: | ||
current-context: | current-context: | ||
EOF</ | EOF</ | ||
+ | ===== Bash-скрипты в init-контейнерах при деплойменте с помощью helm ===== | ||
+ | В чарте в директории files я имею просто скрипт, | ||
+ | Я поменщаю этот скрипт в секрет с помощью такого манифеста: | ||
+ | < | ||
+ | apiVersion: v1 | ||
+ | kind: Secret | ||
+ | metadata: | ||
+ | name: files | ||
+ | type: Opaque | ||
+ | data: | ||
+ | {{ (.Files.Glob " | ||
+ | </ | ||
+ | В деплойменте я запускаю init-контейнер, | ||
+ | < | ||
+ | ... | ||
+ | initContainers: | ||
+ | - name: copy-files | ||
+ | image: docker.rdleas.ru/ | ||
+ | command: | ||
+ | - " | ||
+ | - " | ||
+ | - "cp / | ||
+ | volumeMounts: | ||
+ | - name: files | ||
+ | mountPath: /tmp/files/ | ||
+ | ... | ||
+ | volumes: | ||
+ | - name: files | ||
+ | secret: | ||
+ | secretName: files | ||
+ | </ | ||
+ | то есть мне надо сделать скрипт исполняемым (дать соотвествующие разрешения), | ||
+ | |||
====== Обновление сертификатов ====== | ====== Обновление сертификатов ====== | ||
https:// | https:// | ||
Line 688: | Line 721: | ||
base64 -w 0 ./ | base64 -w 0 ./ | ||
И затем подставляем в поле **client-certificate-data: | И затем подставляем в поле **client-certificate-data: | ||
- | ===== Kubernetes LDAP Auth ===== | + | ====== Kubernetes LDAP Auth ====== |
**LDAP**-аутентификацию к кластеру **kubernetes** можно прикрутить с помощью различных средств, | **LDAP**-аутентификацию к кластеру **kubernetes** можно прикрутить с помощью различных средств, | ||
* Служба каталога с поддрежкой протокола LDAP. Например - Active Directory | * Служба каталога с поддрежкой протокола LDAP. Например - Active Directory | ||
Line 694: | Line 727: | ||
* Некое web-приложение, | * Некое web-приложение, | ||
- | ==== OIDC Providers ==== | + | ===== OIDC Providers |
* Dex | * Dex | ||
* Keycloak | * Keycloak | ||
- | ==== WebApps ==== | + | ===== WebApps |
* Kuberos - https:// | * Kuberos - https:// | ||
* GangWay | * GangWay | ||
* Dex K8s Authenticator | * Dex K8s Authenticator | ||
- | ==== Keycloak + kubelogin ==== | + | ===== Keycloak + kubelogin |
Мне понравился такой вариант - **Keycloak** в качестве OIDC-провайдера и **kubelogin** в качестве способа получения токена. \\ | Мне понравился такой вариант - **Keycloak** в качестве OIDC-провайдера и **kubelogin** в качестве способа получения токена. \\ | ||
- | === Настройка client в keycloak === | + | ==== Настройка client в keycloak |
В параметры клиента в **keycloak** в **valid redirect uris** нужно прописать **http:// | В параметры клиента в **keycloak** в **valid redirect uris** нужно прописать **http:// | ||
- | === Настройка кластера kubernetes === | + | ==== Настройка кластера kubernetes |
На каждой мастер-ноде редактируем файл **/ | На каждой мастер-ноде редактируем файл **/ | ||
< | < | ||
Line 731: | Line 764: | ||
oidc-username-claim: | oidc-username-claim: | ||
- | === Настройка клиентской машины === | + | ==== Настройка клиентской машины |
Устанавливаем плагин kubelogin. \\ | Устанавливаем плагин kubelogin. \\ | ||
Скачиваем бинарник https:// | Скачиваем бинарник https:// | ||
Line 756: | Line 789: | ||
name: sbl-apps-dev-oidc</ | name: sbl-apps-dev-oidc</ | ||
- | === Назначение привилегий в кластере === | + | ==== Назначение привилегий в кластере |
Название групп в манифестах должно быть точно таким же как и в токене. В моей инсталляции в начале названия группы есть слеш. \\ | Название групп в манифестах должно быть точно таким же как и в токене. В моей инсталляции в начале названия группы есть слеш. \\ | ||
Права на неймспейс (в даннос лучае - default) выдаем так: | Права на неймспейс (в даннос лучае - default) выдаем так: | ||
Line 808: | Line 841: | ||
</ | </ | ||
- | === Разрешение проблем === | + | ==== Разрешение проблем |
Поглядеть текущий токен можно так: | Поглядеть текущий токен можно так: | ||
kubelogin get-token --oidc-issuer-url=https:// | kubelogin get-token --oidc-issuer-url=https:// | ||
Расшифровать его (и увидеть список групп в нем) можно тут: https:// | Расшифровать его (и увидеть список групп в нем) можно тут: https:// | ||
- | == invalid bearer token, oidc: email not verified == | + | === invalid bearer token, oidc: email not verified |
В логе **kube-apiserver** ошибка | В логе **kube-apiserver** ошибка | ||
Unable to authenticate the request due to an error: [invalid bearer token, oidc: email not verified] | Unable to authenticate the request due to an error: [invalid bearer token, oidc: email not verified] | ||
Line 825: | Line 858: | ||
kubectl --token=$token --server=https:// | kubectl --token=$token --server=https:// | ||
- | ==== Dex + Dex K8s authenticator ==== | + | ===== Dex + Dex K8s authenticator |
https:// | https:// | ||
https:// | https:// | ||
Line 831: | Line 864: | ||
https:// | https:// | ||
- | ==== Keycloak + Gangway ==== | + | ===== Keycloak + Gangway |
https:// | https:// | ||
- | ==== Dex + GangWay ==== | + | ===== Dex + GangWay |
https:// | https:// | ||
Line 842: | Line 875: | ||
https:// | https:// | ||
- | ====== | + | ====== |
- | Мониторинг веб-приложения - graphana \\ | + | Если так случайно вышло, что вы удалили **PersistentVolume**, |
+ | На помощь приходит специальная утилитка: | ||
+ | git clone https:// | ||
+ | cd k8s-reset-terminating-pv | ||
+ | go build -o resetpv | ||
+ | Собранный бинарник: | ||
+ | Заходим на мастер-ноду, | ||
+ | ssh user@master-node | ||
+ | sudo -H tar -cvzf ~/ | ||
+ | sudo docker | ||
+ | exit | ||
+ | В выводе среди всего прочего | ||
+ | < | ||
+ | --cert-file=/ | ||
+ | --key-file=/ | ||
+ | --trusted-ca-file=/ | ||
+ | В вашей инсталляции имена, | ||
+ | И забираем с мастер-ноды кластера архив с сертификатами, | ||
+ | scp user@master-node:/ | ||
+ | tar -xvf ./ | ||
+ | mv ./ | ||
+ | И дальше применяем утилиту: | ||
+ | ./resetpv --etcd-ca ./ca.crt --etcd-cert ./ | ||
+ | Если вдруг так вышло, что вы удалили все PV в кластере (как я - хотел удалить **pvc** в неймспейсе но просто опечатался и вместо **pvc** ввел **pv**): | ||
+ | kubectl delete -n namespace pv --all | ||
+ | то чтобы отменить удаление всех PV делаем так: | ||
+ | PVs=`kubectl get pv | grep Terminating | awk ' | ||
+ | for pv in $PVs; do ./resetpv --etcd-ca ./ca.crt --etcd-cert ./ | ||