Skip to content
На этой странице:

Развертывание приложения в кластере Kubernetes

В этой статье рассказывается о том, как развернуть приложение в кластере и опубликовать в интернет. Приведенные в статье примеры работают с версиями Kubernetes 1.19 и старше.

Перед тем как начать

Для того, чтобы получить доступ к web-приложению, при настройке кластера нужно включить Плагин NGINX Ingress Controller. При создании в кластер будет установлен контроллер Nginx, а также будет создан LoadBalancer и назначен публичный IP-адрес.

Совет

Если вы хотите развернуть приложение и организовать к нему публичный доступ через Интернет без использования Ingress Controller, рекомендуем изучить данную статью.

Создайте приложение

  1. Сохраните следующую спецификацию для создания приложения в YAML-файл с именем hello.yaml.

    Deployment — объект API Kubernetes, который управляет реплицированным приложением.

    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
  2. Выполните команду:

    sh
    kubectl apply -f hello.yaml

    Результат выполнения команды:

    sh
    deployment.apps/hello-deployment created

Создайте сервис

  1. Сохраните следующую спецификацию для создания сервиса в YAML-файл с именем hello-service.yaml.

    Service — объект API Kubernetes, который описывает совокупность подов и методов доступов к ним.

    yaml
    kind: Service
    apiVersion: v1
    metadata:
      name: hello-service
    spec:
      selector:
        app: hello
      ports:
        - port: 5000

    Здесь:

    • selector — метки селектора, использованные в шаблоне подов при создании объекта Deployment.

    • port — порт контейнера, на котором доступно приложение.

  2. Выполните команду:

    sh
    kubectl apply -f hello-service.yaml

    Результат выполнения команды:

    sh
    service/hello-service created

Создайте Ingress

  1. Сохраните следующую спецификацию для создания Ingress в YAML-файл с именем hello-ingress.yaml.

    Ingress — объект API Kubernetes, который позволяет создавать правила маршрутизации трафика от внешнего источника к конечным точкам различных сервисов, расположенных внутри кластера.

    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).

  2. Выполните команду:

    sh
    kubectl apply -f hello-ingress.yaml

    Результат выполнения команды:

    sh
    ingress.networking.k8s.io/hello-ingress created
  3. Проверьте доступность приложения, перейдя по ссылке вида https://<Ваш_публичный_IP>/hello.

Удаление приложения

Чтобы удалить тестовое приложение, выполните команды:

sh
kubectl delete -f hello-ingress.yaml

kubectl delete -f hello-service.yaml

kubectl delete -f hello.yaml