Deckhouse Platform на bare metal
На данном этапе вы создали кластер, который состоит из единственного 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 # используемая версия API Deckhouse 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/control-plane: "" tolerations: - operator: Exists
# секция, описывающая параметры nginx ingress controller # используемая версия API Deckhouse 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/control-plane: "" tolerations: - operator: ExistsПримените его, выполнив на master-узле следующую команду:
sudo kubectl create -f ingress-nginx-controller.yml
sudo kubectl create -f ingress-nginx-controller.ymlСоздание пользователя для доступа в веб-интерфейсы кластера
Создайте на master-узле файл
user.yml
содержащий описание учетной записи пользователя и прав доступа: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 --- # секция, описывающая параметры статического пользователя # используемая версия API Deckhouse 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>
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 --- # секция, описывающая параметры статического пользователя # используемая версия API Deckhouse 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-узле следующую команду:
- Создание 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-имен кластера является wildcard
DNS-шаблоном (например,
Если вы не имеете под управлением 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 "