×

Публикация простого web приложения в кластере Kubernetes Pro

 
В данной статье описывается процесс подключения к созданному кластеру Kubernetes в рамках услуги Kubernetes Pro от Cloupard. Мы также рассмотрим публикацию простого веб-приложения с автоматическим выпуском SSL-сертификата для обеспечения доступа через HTTPS. В качестве примера будет развернут веб-сервер nginx.
Статья предполагает, что пользователь знаком с основными сущностями кластеров kubernetes и принципами применения YAML манифестов с помощью утилиты kubectl.
 
1. Параметры подключения к кластеру доступны в панели управления, в разделе Кластеры Kubernetes. Нужно найти интересующий кластер в списке и нажать кнопку "kubeconfig" в секции управления кластером.
 
2. Или со страницы управления кластером.
 
3. По кнопке "Получить Kubeconfig".
 
В открывшемся интерфейсе можно скопировать команды для подключения к кластеру через CLI утилиту  управления кластером - kubectl,  также там есть актуальные ссылки для скачивания утилиты. В интерфейсе есть разделы для всех самых популярных ОС.
 
kubectl - лишь один из возможных способов управления кластером, данные представленные в интерфейсе kubeconfig можно использовать для управления другими инструментами кластерами Kubernetes такими как Rancher или Lens.
 
Проверим успешность подключения к кластеру.
kubectl get nodes
 
Если подключение прошло успешно, вы увидите список узлов (nodes) вашего кластера. Это подтверждает, что утилита kubectl корректно настроена и может взаимодействовать с кластером.
 
Создадим namespace для нашей задачи.
kubectl create namespace dkapp
 
и deployment.
kubectl create deployment dk-test01 --image nginx -n dkapp
 
Для сетевого взаимодействия с приложением создаем service.
 
Для публикации приложения в нашем примере используем доменное имя myapp.dk21.k8s.cloupard.io/.
Можно использовать любое доменное имя пятого уровня т.к. в Облакотеке при создании кластера 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 сервера.