Deckhouse Platform в Selectel (OpenStack): Получение доступа к кластеру

Подключение к master-узлу

Deckhouse завершил процесс установки кластера. Осталось выполнить некоторые настройки, для чего необходимо подключиться к master-узлу.

Подключитесь к master-узлу по SSH (IP-адрес master-узла был выведен инсталлятором по завершении установки, но вы также можете найти его, используя веб-интерфейс или CLI‑утилиты облачного провайдера):

ssh ubuntu@<MASTER_IP>

Проверьте работу d8 k, выведя список узлов кластера:

sudo -i d8 k get nodes

Пример вывода...

$ sudo -i d8 k get nodes
NAME                                     STATUS   ROLES                  AGE   VERSION
cloud-demo-master-0                      Ready    control-plane,master   12h   v1.33.13
cloud-demo-worker-01a5df48-84549-jwxwm   Ready    worker                 12h   v1.33.13

Чтобы увеличить количество worker-узлов, измените параметр maxPerZone в NodeGroup worker с помощью CLI (d8 k edit ng worker) или веб-интерфейса администратора. Чтобы добавить дополнительные узлы, воспользуйтесь инструкцией по масштабированию кластера.

Запуск Ingress-контроллера после завершения установки Deckhouse может занять какое-то время. Прежде чем продолжить, убедитесь, что Ingress-контроллер запустился:

sudo -i d8 k -n d8-ingress-nginx get po

Дождитесь перехода подов в статус Ready.

Пример вывода...

$ sudo -i d8 k -n d8-ingress-nginx get po
NAME                                       READY   STATUS    RESTARTS   AGE
controller-nginx-r6hxc                     3/3     Running   0          16h
kruise-controller-manager-78786f57-82wph   3/3     Running   0          16h

Также дождитесь готовности балансировщика:

sudo -i d8 k -n d8-ingress-nginx get svc nginx-load-balancer

Значение EXTERNAL-IP должно быть заполнено публичным IP-адресом или DNS-именем.

Пример вывода...

$ sudo -i d8 k -n d8-ingress-nginx get svc nginx-load-balancer
NAME                  TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
nginx-load-balancer   LoadBalancer   10.222.91.204   1.2.3.4         80:30493/TCP,443:30618/TCP   1m

DNS

Для того чтобы получить доступ к веб-интерфейсам компонентов Deckhouse, нужно:

Шаблон DNS-имён используется для настройки Ingress-ресурсов системных приложений. Например, за интерфейсом Grafana закреплено имя grafana. Тогда для шаблона %s.kube.company.my Grafana будет доступна по адресу grafana.kube.company.my и т. д.

Чтобы упростить настройку, далее будет использоваться сервис sslip.io.

На master-узле выполните следующую команду, чтобы получить IP-адрес балансировщика и настроить шаблон DNS-имён сервисов Deckhouse на использование sslip.io:

BALANCER_IP=$(sudo -i d8 k -n d8-ingress-nginx get svc nginx-load-balancer -o json | jq -r '.status.loadBalancer.ingress[0].ip') && \
echo "Balancer IP is '${BALANCER_IP}'." && sudo -i d8 k patch mc global --type merge \
  -p "{\"spec\": {\"settings\":{\"modules\":{\"publicDomainTemplate\":\"%s.${BALANCER_IP}.sslip.io\"}}}}" && echo && \
echo "Domain template is '$(sudo -i d8 k get mc global -o=jsonpath='{.spec.settings.modules.publicDomainTemplate}')'."

Команда также выведет установленный шаблон DNS-имён. Пример вывода:

Balancer IP is '1.2.3.4'.
moduleconfig.deckhouse.io/global patched

Domain template is '%s.1.2.3.4.sslip.io'.

Перегенерация сертификатов после изменения шаблона DNS-имён может занять до 5 минут.

Другие варианты настройки...

Вместо сервиса sslip.io вы можете использовать другие варианты настройки.

  • Wildcard DNS-запись
  • Отдельные DNS-записи
  • Файл hosts

Используйте этот вариант, если у вас есть DNS-сервер, а шаблон DNS-имён кластера — wildcard-шаблон (например, %s.kube.company.my).

Добавьте на DNS-сервере wildcard A-запись со значением IP-адреса балансировщика. Узнайте IP-адрес балансировщика:

sudo -i d8 k -n d8-ingress-nginx get svc nginx-load-balancer -o json | jq -r '.status.loadBalancer.ingress[0].ip'

Используйте этот вариант, если у вас есть DNS-сервер, а шаблон DNS-имён кластера — не wildcard-шаблон (например, %s-kube.company.my).

Добавьте на DNS-сервере A- или CNAME-записи со значением адреса балансировщика для следующих DNS-имён:

  • api
  • code
  • commander
  • console
  • dex
  • documentation
  • grafana
  • hubble
  • istio
  • istio-api-proxy
  • kubeconfig
  • openvpn-admin
  • prometheus
  • registry
  • status
  • stronghold
  • tools
  • upmeter

В списке — DNS-имена, которые нужны кластеру, развёрнутому по этому руководству. Полный список приведён в разделе «Список зарезервированных DNS-имён Deckhouse Platform» документации.

Узнайте IP-адрес балансировщика:

sudo -i d8 k -n d8-ingress-nginx get svc nginx-load-balancer -o json | jq -r '.status.loadBalancer.ingress[0].ip'

Используйте этот вариант, если у вас нет DNS-сервера. На компьютере, с которого нужен доступ к сервисам Deckhouse, добавьте статические записи в hosts-файл (/etc/hosts для Linux, %SystemRoot%\system32\drivers\etc\hosts для Windows).

Чтобы узнать IP-адрес балансировщика, выполните на master-узле команду:

BALANCER_IP=$(sudo -i d8 k -n d8-ingress-nginx get svc nginx-load-balancer -o json | jq -r '.status.loadBalancer.ingress[0].ip') && echo "Balancer IP is ${BALANCER_IP}"

Чтобы получить команду для добавления записей, воспользуйтесь генератором данных для hosts-файла: укажите шаблон DNS-имён и IP-адрес балансировщика.

Затем на master-узле выполните следующую команду (укажите используемый шаблон DNS-имён в переменной DOMAIN_TEMPLATE):

DOMAIN_TEMPLATE='<DOMAIN_TEMPLATE>'
sudo -i d8 k patch mc global --type merge -p "{\"spec\": {\"settings\":{\"modules\":{\"publicDomainTemplate\":\"${DOMAIN_TEMPLATE}\"}}}}"

Настройка удалённого доступа к кластеру

На персональном компьютере выполните следующие шаги, для того чтобы настроить подключение kubectl к кластеру:

  • Откройте веб-интерфейс сервиса Kubeconfig Generator. Для него зарезервировано имя kubeconfig, и адрес для доступа формируется согласно шаблону DNS-имён (который вы установили ранее). Например, для шаблона DNS-имён %s.1.2.3.4.sslip.io веб-интерфейс Kubeconfig Generator будет доступен по адресу https://kubeconfig.1.2.3.4.sslip.io.
  • Авторизуйтесь под пользователем admin@deckhouse.io. Пароль пользователя, сгенерированный на предыдущем шаге, — <GENERATED_PASSWORD> (вы также можете найти его в манифесте User в файле config.yml).
  • Выберите вкладку с ОС персонального компьютера.
  • Последовательно скопируйте и выполните команды, приведённые на странице.
  • Проверьте корректную работу kubectl (например, выполнив команду kubectl get no).