- Virtual Infrastructure
- Disaster Recovery
- Кроссплатформенная миграция на базе Киберпротект
- Veeam Agent BaaS
- Veeam Cloud Connect
- Объектное хранилище #CloudMTS
- GPU Workspaces
- VDI Desktops
- Cloud CDN / Медиасервисы
- Диск #CloudMTS
- Техническая поддержка и отзывы
- DBaaS for PostgreSQL
- Containerum Kubernetes
- GPU SuperCloud
Как развернуть приложение в кластере и опубликовать в интернет
Приведенные ниже примеры работают с версиями Kubernetes 1.19 и старше.
Создайте кластер с произвольной конфигурацией.
Чтобы получить доступ к web-приложению, при настройке кластера включите Плагин NGINX Ingress Controller. При создании в кластер будет установлен контроллер Nginx (подробнее о нем можно прочитать в данной статье), а также будет создан LoadBalancer и назначен публичный IP-адрес.
Если вы ранее не создавали кластер Kubernetes, воспользуйтесь инструкцией в данной статье.
Если вы хотите развернуть приложение и организировать к нему публичный доступ через Интернет без использования Ingress Controller, рекомендуем изучить данную статью.
Создайте приложение
Сохраните следующую спецификацию для создания приложения в YAML-файл с именем hello.yaml.
Deployment — объект API Kubernetes, управляющий реплицированным приложением.
hello.yaml |
---|
apiVersion: apps/v1 kind: Deployment metadata: name: hello-deployment spec: selector: matchLabels: app: hello replicas: 2 template: metadata: labels: app: hello spec: containers: - name : hello image: prakhar1989/catnip ports: - containerPort : 5000 |
Выполните в kubectl команду:
$ kubectl apply -f hello.yaml |
Результат выполнения команды:
deployment.apps/hello-deployment created |
Создайте сервис
Сохраните следующую спецификацию для создания сервиса в YAML-файл с именем hello-service.yaml.
Service — объект API Kubernetes, описывающий совокупность подов и методов доступов к ним.
hello-service.yaml |
---|
kind: Service apiVersion: v1 metadata: name: hello-service spec: selector: app: hello ports: - port : 5000 |
Где:
-
selector
— метки селектора, использованные в шаблоне подов при создании объектаDeployment
-
port
— порт контейнера, на котором доступно приложение
Выполните в kubectl команду:
$ kubectl apply -f hello-service.yaml |
Результат выполнения команды:
service/hello-service created |
Создайте Ingress
Сохраните следующую спецификацию для создания Ingress в YAML-файл с именем hello-ingress.yaml.
Ingress — объект API Kubernetes, позволяющий создавать правила маршрутизации траффика от внешнего источника к конечным точкам различных сервисов, расположенных внутри кластера.
hello-ingress.yaml |
---|
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: hello-ingress annotations: kubernetes.io/ingress .class: "nginx" nginx.ingress.kubernetes.io/rewrite-target : /$2 spec: rules: - http : paths: - path : /hello(/|$)(.*) pathType: ImplementationSpecific backend: service: name: hello-service port: number: 5000 |
В nginx настроено автоматическое обнаружение всех ingress с помощью аннотации kubernets.io/ingress.class:"nginx"
. Об аннотациях ingress-controller для nginx можно подробнее прочитать здесь.
rules
— правила маршрутизации траффика. Каждое правило содержит следующую информацию:
хост (
host
) (опционально)- в данном примере хост не определен, поэтому правило применяется ко всему траффику, поступающему на публичный IP адрес
- если хост указан (например,
hello.com
), то правила правила применяются к этому хосту
список путей (
paths
) (например,/hello
), каждый из которых связан с бэкендом (backend
), который определен с помощьюservice.name
иservice.port.name
(илиservice.port.number
)- входящий запрос должен содержать корректный хост (
host
) и путь (path
), чтобы балансировщик нагрузки направил трафик на указанный сервис (service
)
- входящий запрос должен содержать корректный хост (
Выполните в kubectl команду:
$ kubectl apply -f hello-ingress.yaml |
Результат выполнения команды:
ingress.networking.k8s.io/hello-ingress created |
Проверьте работоспособность приложения
Проверьте доступность приложения, перейдя по ссылке вида https://<публичный-IP-кластера>/hello.
Чтобы удалить тестовое приложение, выполните команды:
$ kubectl delete -f hello-ingress.yaml $ kubectl delete -f hello-service.yaml $ kubectl delete -f hello.yaml |
Описания и инструкции, размещаемые на данном ресурсе, носят исключительно информационный характер и не могут рассматриваться в качестве гарантий, заверений, рекомендаций или документа, порождающего какие-либо обязательства МТС. Конкретные условия использования сервисов определяются договорами с клиентом. МТС не несет ответственности за содержание публикуемых инструкций и результаты их применения клиентом. Актуальность отдельных положений публикуемых описаний и инструкций необходимо уточнять у аккаунт-менеджера или службы технической поддержки support@cloud.mts.ru