Развертывание приложения в кластере Kubernetes
В этой статье рассказывается о том, как развернуть приложение в кластере и опубликовать в интернет. Приведенные в статье примеры работают с версиями Kubernetes 1.19 и старше.
Перед тем как начать
Заголовок раздела «Перед тем как начать»Для того, чтобы получить доступ к web-приложению, при настройке кластера нужно включить Плагин NGINX Ingress Controller. При создании в кластер будет установлен контроллер Nginx, а также будет создан LoadBalancer и назначен публичный IP-адрес.
Создайте приложение
Заголовок раздела «Создайте приложение»Сохраните следующую спецификацию для создания приложения в YAML-файл с именем
hello.yaml.Deployment — объект API Kubernetes, который управляет реплицированным приложением.
yaml apiVersion: apps/v1kind: Deploymentmetadata:name: hello-deploymentspec:selector:matchLabels:app: helloreplicas: 2template:metadata:labels:app: hellospec:containers:- name: helloimage: prakhar1989/catnipports:- containerPort: 5000Выполните команду:
shell kubectl apply -f hello.yamlРезультат выполнения команды:
shell deployment.apps/hello-deployment created
Создайте сервис
Заголовок раздела «Создайте сервис»Сохраните следующую спецификацию для создания сервиса в YAML-файл с именем
hello-service.yaml.Service — объект API Kubernetes, который описывает совокупность подов и методов доступов к ним.
yaml kind: ServiceapiVersion: v1metadata:name: hello-servicespec:selector:app: helloports:- port: 5000Здесь:
selector— метки селектора, использованные в шаблоне подов при создании объектаDeployment.port— порт контейнера, на котором доступно приложение.
Выполните команду:
shell kubectl apply -f hello-service.yamlРезультат выполнения команды:
shell service/hello-service created
Создайте Ingress
Заголовок раздела «Создайте Ingress»Сохраните следующую спецификацию для создания Ingress в YAML-файл с именем
hello-ingress.yaml.Ingress — объект API Kubernetes, который позволяет создавать правила маршрутизации трафика от внешнего источника к конечным точкам различных сервисов, расположенных внутри кластера.
yaml apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: hello-ingressannotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/rewrite-target: /$2spec:rules:- http:paths:- path: /hello(/|$)(.*)pathType: ImplementationSpecificbackend:service:name: hello-serviceport: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).
Выполните команду:
shell kubectl apply -f hello-ingress.yamlРезультат выполнения команды:
shell 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