Deckhouse Platform в закрытом окружении

На данном этапе вы создали кластер, который состоит из единственного master-узла.

Для полноценной работы кластера добавьте узлы, согласно документации (рекомендуется для production-окружений и тестовых сред).

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

sudo kubectl patch nodegroup master --type json -p '[{"op": "remove", "path": "/spec/nodeTemplate/taints"}]'
sudo kubectl patch nodegroup master --type json -p '[{"op": "remove", "path": "/spec/nodeTemplate/taints"}]'

Далее, остается выполнить следующие три действия.

  • Установка Ingress-контроллера

    Создайте на master-узле файл ingress-nginx-controller.yml содержащий конфигурацию Ingress-контроллера:

    # Секция, описывающая параметры Nginx Ingress controller.
    # https://deckhouse.ru/documentation/v1/modules/402-ingress-nginx/cr.html
    apiVersion: deckhouse.io/v1
    kind: IngressNginxController
    metadata:
      name: nginx
    spec:
      # Имя Ingress-класса для обслуживания Ingress NGINX controller.
      ingressClass: nginx
      # версия Ingress-контроллера (используйте версию 1.1 с Kubernetes 1.23+)
      controllerVersion: "1.1"
      # Способ поступления трафика из внешнего мира.
      inlet: HostPort
      hostPort:
        httpPort: 80
        httpsPort: 443
      # Описывает, на каких узлах будет находиться компонент.
      # Возможно, захотите изменить.
      nodeSelector:
        node-role.kubernetes.io/master: ""
      tolerations:
      - operator: Exists
    
    # Секция, описывающая параметры Nginx Ingress controller. # https://deckhouse.ru/documentation/v1/modules/402-ingress-nginx/cr.html apiVersion: deckhouse.io/v1 kind: IngressNginxController metadata: name: nginx spec: # Имя Ingress-класса для обслуживания Ingress NGINX controller. ingressClass: nginx # версия Ingress-контроллера (используйте версию 1.1 с Kubernetes 1.23+) controllerVersion: "1.1" # Способ поступления трафика из внешнего мира. inlet: HostPort hostPort: httpPort: 80 httpsPort: 443 # Описывает, на каких узлах будет находиться компонент. # Возможно, захотите изменить. nodeSelector: node-role.kubernetes.io/master: "" tolerations: - operator: Exists

    Примените его, выполнив на master-узле следующую команду:

    sudo kubectl create -f ingress-nginx-controller.yml
    
    sudo kubectl create -f ingress-nginx-controller.yml
  • Создание пользователя для доступа в веб-интерфейсы кластера

    Создайте на master-узле файл user.yml содержащий описание учетной записи пользователя и прав доступа:

    # Настройки RBAC и авторизации.
    # https://deckhouse.ru/documentation/v1/modules/140-user-authz/cr.html#clusterauthorizationrule
    apiVersion: deckhouse.io/v1
    kind: ClusterAuthorizationRule
    metadata:
      name: admin
    spec:
      # Список учётных записей Kubernetes RBAC.
      subjects:
      - kind: User
        name: admin@deckhouse.io
      # Предустановленный шаблон уровня доступа.
      accessLevel: SuperAdmin
      # Разрешить пользователю делать kubectl port-forward.
      portForwarding: true
    ---
    # Данные статического пользователя.
    # https://deckhouse.ru/documentation/v1/modules/150-user-authn/cr.html#user
    apiVersion: deckhouse.io/v1
    kind: User
    metadata:
      name: admin
    spec:
      # E-mail пользователя.
      email: admin@deckhouse.io
      # Это хэш пароля <GENERATED_PASSWORD>, сгенерированного сейчас.
      # Сгенерируйте свой или используйте этот, но только для тестирования:
      # echo "<GENERATED_PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2
      # Возможно, захотите изменить.
      password: <GENERATED_PASSWORD_HASH>
    
    # Настройки RBAC и авторизации. # https://deckhouse.ru/documentation/v1/modules/140-user-authz/cr.html#clusterauthorizationrule apiVersion: deckhouse.io/v1 kind: ClusterAuthorizationRule metadata: name: admin spec: # Список учётных записей Kubernetes RBAC. subjects: - kind: User name: admin@deckhouse.io # Предустановленный шаблон уровня доступа. accessLevel: SuperAdmin # Разрешить пользователю делать kubectl port-forward. portForwarding: true --- # Данные статического пользователя. # https://deckhouse.ru/documentation/v1/modules/150-user-authn/cr.html#user apiVersion: deckhouse.io/v1 kind: User metadata: name: admin spec: # E-mail пользователя. email: admin@deckhouse.io # Это хэш пароля <GENERATED_PASSWORD>, сгенерированного сейчас. # Сгенерируйте свой или используйте этот, но только для тестирования: # echo "<GENERATED_PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 # Возможно, захотите изменить. password: <GENERATED_PASSWORD_HASH>

    Примените его, выполнив на master-узле следующую команду:

    sudo kubectl create -f user.yml
    
    sudo kubectl create -f user.yml
  • Создание DNS-записи, для доступа в веб-интерфейсы кластера
    • Выясните публичный IP-адрес узла, на котором работает Ingress-контроллер.
    • Если у вас есть возможность добавить DNS-запись используя DNS-сервер:
      • Если ваш шаблон DNS-имен кластера является wildcard DNS-шаблоном (например, %s.kube.my), то добавьте соответствующую wildcard A-запись со значением публичного IP-адреса, который вы получили выше.
      • Если ваш шаблон DNS-имен кластера НЕ является wildcard DNS-шаблоном (например, %s-kube.company.my), то добавьте А или CNAME-записи со значением публичного IP-адреса, который вы получили выше, для следующих DNS-имен сервисов Deckhouse в вашем кластере:
        api.example.com
        argocd.example.com
        cdi-uploadproxy.example.com
        dashboard.example.com
        deckhouse.example.com
        dex.example.com
        grafana.example.com
        hubble.example.com
        istio.example.com
        istio-api-proxy.example.com
        kubeconfig.example.com
        openvpn-admin.example.com
        prometheus.example.com
        status.example.com
        upmeter.example.com
        
    • Если вы не имеете под управлением DNS-сервер: добавьте статические записи соответствия имен конкретных сервисов публичному IP-адресу узла, на котором работает Ingress-контроллер.

      Например, на персональном Linux-компьютере, с которого необходим доступ к сервисам Deckhouse, выполните следующую команду (укажите ваш публичный IP-адрес в переменной PUBLIC_IP) для добавления записей в файл /etc/hosts (для Windows используйте файл %SystemRoot%\system32\drivers\etc\hosts):

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