Page tree
Skip to end of metadata
Go to start of metadata
Приведенные ниже примеры работают с версиями 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
  • No labels