База знаний
Подключиться Консультация
Получить консультацию Подключиться
Облачные сервисы
Виртуальный рабочий стол
Передовые сервисы по предоставлению сотрудникам безопасного удалённого доступа к мощным виртуальным десктопам и корпоративным ресурсам клиента с любого устройства, из любой точки мира.
Корпоративные сервисы
Удобные сервисы для обмена документами или файлами между сотрудниками компании в том числе за пределами организации, а также настройка ИТ‑инфраструктуры «под ключ» для Вашего бизнеса от экспертов облака МТС. Благодаря этим сервисам сотрудники экономят рабочее время на выполнение ежедневным рутинных задач, тем самым повышается их эффективность.
Сетевые сервисы
Мы обеспечиваем комплекс решений по построению и оптимизации сетевой инфраструктуры. Это позволит вам быстро и эффективно реализовать необходимую связность между различными сервисами с определенными параметрами качества.
Хранение и резервирование данных
Надежно и стабильно с МТС Cloud. Мы обеспечиваем хранение любых видов и объемов данных. Это позволит вам быстро и эффективно работать с данными и приложениями.
Аренда оборудования
Сервисы собственной разработки, которые помогут повысить эффективность работы ИТ‑подразделений.
Проектные решения
Партнерские сервисы
Стать партнером
Поддержка
База Знаний #CloudMTS
База знаний #CloudMTS / Containerum Kubernetes / Как развернуть приложение в кластере и опубликовать в интернет

Как развернуть приложение в кластере и опубликовать в интернет

Приведенные ниже примеры работают с версиями 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

Описания и инструкции, размещаемые на данном ресурсе, носят исключительно информационный характер и не могут рассматриваться в качестве гарантий, заверений, рекомендаций или документа, порождающего какие-либо обязательства МТС. Конкретные условия использования сервисов определяются договорами с клиентом. МТС не несет ответственности за содержание публикуемых инструкций и результаты их применения клиентом. Актуальность отдельных положений публикуемых описаний и инструкций необходимо уточнять у аккаунт-менеджера или службы технической поддержки hub-support@cloud.mts.ru