Документация находится в разработке, может содержать неполную информацию.

Настройка Ingress

Убедитесь, что под Kruise controller manager модуля ingress-nginx запустился и находится в статусе Running.

Выполните на master-узле следующую команду:

sudo -i d8 k -n d8-ingress-nginx get po -l app=kruise

Создайте ресурс IngressNginxController, описывающий параметры NGINX Ingress controller:

sudo -i d8 k apply -f - <<EOF
# Секция, описывающая параметры NGINX Ingress controller.
# https://deckhouse.ru/products/virtualization-platform/reference/cr/ingressnginxcontroller.html
apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
  name: nginx
spec:
  ingressClass: nginx
  # Способ поступления трафика из внешнего мира.
  inlet: HostPort
  hostPort:
    httpPort: 80
    httpsPort: 443
  # Описывает, на каких узлах будет находиться Ingress-контроллер.
  # Возможно, захотите изменить.
  nodeSelector:
    node-role.kubernetes.io/control-plane: ""
  tolerations:
  - effect: NoSchedule
    key: node-role.kubernetes.io/control-plane
    operator: Exists
EOF

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

sudo -i d8 k -n d8-ingress-nginx get po -l app=controller

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

NAME                                       READY   STATUS    RESTARTS   AGE
controller-nginx-r6hxc                     3/3     Running   0          5m

Настройка DNS

Для доступа к веб-интерфейсам платформы необходимо настроить DNS-записи для домена кластера.

Домен, используемый в шаблоне, не должен совпадать с доменом, указанным в параметре clusterDomain, и внутренней сервисной зоной сети. Например, если используется clusterDomain: cluster.local (значение по умолчанию),, а сервисная зона сети — ru-central1.internal, то publicDomainTemplate не может быть %s.cluster.local или %s.ru-central1.internal.

Использование Wildcard-домена

Убедитесь, что поддомены резолвятся на IP-адрес узла, на котором работает nginx-controller. В данном случае это master-0. Также проверьте, что шаблон имён соответствует формату %s.<домен>:

sudo -i d8 k get mc global -ojson | jq -r '.spec.settings.modules.publicDomainTemplate'

Пример вывода, если использовался свой Wildcard-домен:

%s.my-dvp-cluster.example.com

Пример вывода, если использовался домен от сервиса ssslip.io:

%s.54.43.32.21.sslip.io

Использование отдельных доменов вместо Wildcard-домена

Если в шаблоне используется не Wildcard-домен, необходимо вручную добавить дополнительные A или CNAME-записи, указывающие на публичный IP-адрес узла, где работает nginx-controller. Эти записи требуются для всех сервисов Deckhouse.

Например, для домена my-dvp-cluster.example.com и шаблона с поддоменами %s.my-dvp-cluster.example.com, записи будут выглядеть так:

api.my-dvp-cluster.example.com
argocd.my-dvp-cluster.example.com
dashboard.my-dvp-cluster.example.com
documentation.my-dvp-cluster.example.com
dex.my-dvp-cluster.example.com
grafana.my-dvp-cluster.example.com
hubble.my-dvp-cluster.example.com
istio.my-dvp-cluster.example.com
istio-api-proxy.my-dvp-cluster.example.com
kubeconfig.my-dvp-cluster.example.com
openvpn-admin.my-dvp-cluster.example.com
prometheus.my-dvp-cluster.example.com
status.my-dvp-cluster.example.com
upmeter.my-dvp-cluster.example.com

Для домена my-dvp-cluster.example.com и шаблона с индивидуальными доменами %s-my-dvp-cluster.example.com, записи будут выглядеть так:

api-my-dvp-cluster.example.com
argocd-my-dvp-cluster.example.com
dashboard-my-dvp-cluster.example.com
documentation-my-dvp-cluster.example.com
dex-my-dvp-cluster.example.com
grafana-my-dvp-cluster.example.com
hubble-my-dvp-cluster.example.com
istio-my-dvp-cluster.example.com
istio-api-proxy-my-dvp-cluster.example.com
kubeconfig-my-dvp-cluster.example.com
openvpn-admin-my-dvp-cluster.example.com
prometheus-my-dvp-cluster.example.com
status-my-dvp-cluster.example.com
upmeter-my-dvp-cluster.example.com

Для тестирования можно добавить необходимые записи в файл /etc/hosts на локальной машине (для Windows в файл %SystemRoot%\system32\drivers\etc\hosts).

Для Linux можно использовать следующие команды для добавления записей в файл /etc/hosts:

export PUBLIC_IP="<PUBLIC_IP>"
export CLUSTER_DOMAIN="my-dvp-cluster.example.com"
sudo -E bash -c "cat <<EOF >> /etc/hosts
$PUBLIC_IP api.$CLUSTER_DOMAIN
$PUBLIC_IP argocd.$CLUSTER_DOMAIN
$PUBLIC_IP dashboard.$CLUSTER_DOMAIN
$PUBLIC_IP documentation.$CLUSTER_DOMAIN
$PUBLIC_IP dex.$CLUSTER_DOMAIN
$PUBLIC_IP grafana.$CLUSTER_DOMAIN
$PUBLIC_IP hubble.$CLUSTER_DOMAIN
$PUBLIC_IP istio.$CLUSTER_DOMAIN
$PUBLIC_IP istio-api-proxy.$CLUSTER_DOMAIN
$PUBLIC_IP kubeconfig.$CLUSTER_DOMAIN
$PUBLIC_IP openvpn-admin.$CLUSTER_DOMAIN
$PUBLIC_IP prometheus.$CLUSTER_DOMAIN
$PUBLIC_IP status.$CLUSTER_DOMAIN
$PUBLIC_IP upmeter.$CLUSTER_DOMAIN
EOF
"

Создание пользователя

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

  1. Сгенерируйте пароль:

    echo "<USER-PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0
    

    <USER-PASSWORD> — пароль, который нужно установить пользователю.

  2. Создайте пользователя:

    sudo -i d8 k create -f - <<EOF
    ---
    apiVersion: deckhouse.io/v1
    kind: ClusterAuthorizationRule
    metadata:
      name: admin
    spec:
      subjects:
      - kind: User
        name: admin@deckhouse.io
      accessLevel: SuperAdmin
      portForwarding: true
    ---
    apiVersion: deckhouse.io/v1
    kind: User
    metadata:
      name: admin
    spec:
      email: admin@my-dvp-cluster.example.com
      password: '<BASE64 СТРОКА С ПРЕДЫДУЩЕГО ШАГА>'
       
    EOF
    

Теперь можно авторизоваться в веб-интерфейсах кластера, используя электронную почту и пароль. Для дальнейшей настройки рекомендуется ознакомиться с разделом Разграничение доступа / Ролевая модель.