Публикация простого web приложения в кластере Kubernetes Pro
В данной статье описывается процесс подключения к созданному кластеру Kubernetes в рамках услуги Kubernetes Pro от Cloupard. Мы также рассмотрим публикацию простого веб-приложения с автоматическим выпуском SSL-сертификата для обеспечения доступа через HTTPS. В качестве примера будет развернут веб-сервер nginx.
Статья предполагает, что пользователь знаком с основными сущностями кластеров kubernetes и принципами применения YAML манифестов с помощью утилиты kubectl.
|
1. Параметры подключения к кластеру доступны в панели управления, в разделе Кластеры Kubernetes. Нужно найти интересующий кластер в списке и нажать кнопку "kubeconfig" в секции управления кластером.
2. Или со страницы управления кластером.
3. По кнопке "Получить Kubeconfig".
В открывшемся интерфейсе можно скопировать команды для подключения к кластеру через CLI утилиту управления кластером - kubectl, также там есть актуальные ссылки для скачивания утилиты. В интерфейсе есть разделы для всех самых популярных ОС.
Проверим успешность подключения к кластеру.
kubectl get nodes
|
Если подключение прошло успешно, вы увидите список узлов (nodes) вашего кластера. Это подтверждает, что утилита kubectl корректно настроена и может взаимодействовать с кластером.
Создадим namespace для нашей задачи.
kubectl create namespace dkapp
|
и deployment.
kubectl create deployment dk-test01 --image nginx -n dkapp
|
Для сетевого взаимодействия с приложением создаем service.
Можно использовать любое доменное имя пятого уровня т.к. в Облакотеке при создании кластера Kubernetes вместе с кластером бесплатно выделяется указанное пользователем доменное имя четвёртого уровня и wildcard A-запись на пятом уровне в этой DNS зоне. Запись резолвится во внешний IP подключаемый к сети узлов при создании кластера.
Можно также использовать любое другое доменное имя (при наличии) - порядок действий будет аналогичный. Единственное условие - наличие А-записи со значением равным внешнему IP адресу, подключенному к сети узлов кластера.
|
Средствами кластера выпустим и используем SSL сертификат Let’s Encrypt для доменного имени - в кластере уже установлен и настроен модуль cert-manager. Однако, чтобы ресурс сертификата при выпуске успешно прошёл локальный self check, предварительно нужно добавить соответствующую запись в конфигурацию модуля kube-dns, которая позволит поду cert-manager отрезолвить доменное имя в локальный адрес frontend узла, который будет отвечать при прохождении self check. Для этого нужно добавить запись для нашего доменного имени в раздел Hosts в конфигурации модуля kube-dns.
kubectl edit moduleconfig kube-dns
|
в конфиге уже есть доменные имена используемые интерфейсами кластера, нам нужно добавить своё с таким же IP адресом узла, как у существующих записей.
...
Domain: upmeter.dk21.k8s.cloupard.io
Ip: 192.168.21.105
Domain: myapp.dk21.k8s.cloupard.io
Ip: 192.168.21.105
...
|
Теперь запрашиваем SSL сертификат.
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: myapp01
namespace: dkapp
spec:
secretName: myapp01-tls
issuerRef:
kind: ClusterIssuer
name: letsencrypt
commonName: myapp.dk21.k8s.cloupard.io
dnsNames:
- myapp.dk21.k8s.cloupard.io
|
И создаем ingress.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp01
namespace: dkapp
spec:
ingressClassName: nginx
tls:
- hosts:
- myapp.dk21.k8s.cloupard.io
secretName: myapp01-tls
rules:
- host: myapp.dk21.k8s.cloupard.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp01-service
port:
number: 80
|
Отлично! Мы развернули web сервер nginx и организовали к нему доступ по HTTPS с автоматическим выпуском SLL сертификата, за которым наш модуль cert manager теперь будет следить и при необходимости обновлять автоматически. Проверим - по запросу https://myapp.dk21.k8s.cloupard.io/ мы видим приветственную страницу нашего web сервера.