Служба в Kubernetes – это абстракция, описывающая набор концептуальных модулей, в которых выполняется приложение, и политику доступа для этих типов модулей. Если модуль должен подключиться к другому модулю, он должен сначала определить свой IP-адрес. Сервисы Kubernetes также позволяют находить определенные поды. IP-адреса подов в сетевой модели Kubernetes являются абстрактными; если модуль сломается или будет уничтожен, новый модуль почти наверняка получит новый IP-адрес. Сервис в Kubernetes часто предоставляет доступ к сети модулю или группе модулей. Службы выбирают модули в зависимости от их имен, и когда сетевые запросы отправляются таким службам, они идентифицируют все модули в кластере, которые соответствуют метке службы, выбирают один из них, а затем отправляют ему сетевой запрос.
Категории сервисов Kubernetes
Сервисы Kubernetes делятся на четыре основные категории:
ClusterIP
В Kubernetes служба ClusterIP действительно является стандартной формой службы. Он предоставляет сервис в кластере Kubernetes, которым могут управлять другие приложения Kubernetes, не предоставляя доступа извне. Это IP-адрес, который кластер Kubernetes и все его службы могут использовать для внутренних целей. В ОТЛИЧИЕ IP-АДРЕСА POD, IP-адрес, используемый в ClusterIP, недоступен за пределами кластера.
NodePort
Каждый узел в вашем кластере имеет открытый порт, называемый NodePort. Даже если ваше приложение работает на другом узле, Kubernetes напрямую направляет трафик от NodePort к службе. Каждый кластер Kubernetes принимает NodePort, но вам нужно изменить свои брандмауэры, если вы используете поставщика облачных услуг, такого как Google Cloud.
LoadBalancer
LoadBalancer – это популярный способ представить сервис Kubernetes внешнему миру через Интернет. LoadBalancer можно использовать аналогично ClusterIP и NodePort. Кластер подойдет к поставщику облака и построит балансировщик нагрузки, если вы выберете LoadBalancer в качестве категории службы. Трафик будет перенаправлен на серверные модули, когда он поступит на этот балансировщик нагрузки. Особенности этого метода определяются тем, как каждый поставщик балансировки нагрузки реализует свою технологию.
ExternalName
Поскольку службы ExternalName не имеют селекторов, фиксированных портов или конечных точек, они могут перенаправлять трафик на внешнюю службу. Эта форма связывает службу с элементами поля внешнего имени. Он завершает это, возвращая значение записи CNAME.
Создайте развертывание вместе с сервисом
Развертывание Kubernetes отслеживает состояние модуля и, при необходимости, сбрасывает его контейнер. Развертывания – это метод управления формированием и масштабированием Pod. Итак, чтобы управлять модулем, мы собираемся создать развертывание. Для этого откроем терминал вашей операционной системы Ubuntu 20.04 LTS. Вы можете использовать для этого область приложения или горячую клавишу. Убедитесь, что в вашей системе установлен minikube.
Выполните указанную ниже команду, чтобы запустить миникуб.
$ minikube start
В выводе этой команды вы увидите версию minikube. После этой команды вы должны открыть панель управления minikube с помощью этой команды, указанной ниже.
$ minikube dashboard
Теперь мы все готовы создать развертывание с помощью команды create. Вы должны написать команду, добавленную ниже, как показано в терминале.
Вы можете видеть, что узел приветствия создан. Если вы хотите просмотреть развертывания, вы можете легко сделать это, выполнив указанную команду.
$ kubectl get deployments
В выходных данных вы можете увидеть основную информацию, относящуюся к уже созданному развертыванию. Вы можете просмотреть модуль, выполнив эту команду:
$ kubectl get pods
В выводе, показанном ниже, вы можете легко просмотреть всю необходимую информацию, относящуюся к перечисленным модулям. Если вы хотите вывести список событий кластера, вы можете использовать для этой цели следующую базовую команду.
$ kubectl get events
Теперь вы можете просмотреть конфигурацию kubectl, используя указанную ниже команду:
$ kubectl config view
Внутри кластера Kubernetes Pod будет доступен только по его внутреннему IP-адресу. Лучше всего предоставить контейнер hello-node как службу Kubernetes, чтобы сделать его доступным за пределами виртуальной сети Kubernetes. Теперь мы собираемся открыть модуль, используя команду, указанную ниже. Кроме того, вы можете видеть, что —type = LoadBalancer, который предоставит связанный сервис за пределами кластера.
Пришло время просмотреть созданный сервис. Итак, для этой цели вы можете использовать команду, показанную ниже. Результат должен быть аналогичен изображенному на прикрепленном изображении.
$ kubectl get services
Чтобы просмотреть служебную информацию узла приветствия, вы можете использовать следующую отображаемую команду вместе с ключевым словом minikube.
$ minikube service hello-node
Вы можете видеть, что URL-адрес узла также отображается на прикрепленном снимке экрана вместе с целевым портом. К счастью, сервис будет открыт в браузере вашей операционной системы. Вы можете проверить, отображается ли служебная информация в браузере вашей системы.
Заключение
В этой статье мы разработали концепцию сервисов в Kubernetes, а также их различные категории. Кроме того, мы объяснили базовый пример создания развертывания вместе с соответствующей службой. Мы надеемся, что прочитав и реализовав эту статью, вы легко поймете концепцию сервисов Kubernetes и их создание.