Мы надеемся, что вы хотите понять, как работают службы Kubernetes и какие существуют различные типы служб. Поскольку большинство облачных нативных развертываний происходит с помощью Kubernetes, становится необходимым знать эти типы сервисов, когда какой тип использовать и как они работают. Сегодня мы рассмотрим различные доступные типы сервисов и то, как они работают на практике.
Ниже приведена другая моя статья, в которой я подробно рассказываю о каждом типе сервисов.

Объяснение типов сервисов Kubernetes
Pavan Belagatti ・ Jun 20 ・ 4 min read
Предварительные условия
- Установленный и включенный Docker Desktop. Установите его по этой официальной ссылке
- Minikube установлен и запущен на вашем компьютере. Это легкая реализация Kubernetes, которая создает виртуальную машину на вашей локальной машине и развертывает простой кластер, содержащий только один узел. Получите его по этой официальной ссылке
Давайте приступим:
Давайте создадим развертывание веб-сервера NGINX с pod, который принимает трафик на свой порт 80.
kubectl create deployment nginx --image=nginx
В терминале вы должны увидеть следующий результат,
deployment.apps/nginx created
Теперь проверьте, запущен ли NGINX, выполнив команду,
kubectl get deploy nginx
Вывод, который вы должны увидеть в терминале, приведен ниже,
Найдите точное имя стручка, чтобы мы могли сделать проброс портов, чтобы он принимал трафик с порта 80.
Используйте следующую команду, чтобы найти имя стручка.
kubectl get pod
Затем выполните проброс портов с помощью следующей команды
kubectl port-forward <pod name> 8080:80
Вы должны увидеть результат, подобный показанному ниже,
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
Handling connection for 8080
Проверьте ваш localhost:8080, вы должны увидеть экран NGINX.
ClusterIP:
Создадим yaml-файл манифеста Kubernetes с типом ClusterIP.
Назовем этот файл nginx-svc.yaml
.
---
apiVersion: v1
kind: Service
metadata:
name: "nginx-service"
namespace: "default"
spec:
ports:
- port: 80
type: ClusterIP
selector:
app: "nginx"
Создайте службу NGINX с помощью следующей команды,
kubectl apply -f nginx-svc.yaml
Результат должен быть таким, как показано ниже,
service/nginx-service created
Теперь проверьте службу с помощью команды kubectl,
kubectl get svc nginx-service
Результат должен быть таким, как показано ниже,
Поскольку тип ClusterIP доступен только для внутренних подсистем, мы будем использовать команду kubectl proxy для проброса портов и доступа к нашему NGINX.
kubectl proxy --port=8080
На вашем терминале должен появиться следующий результат,
Starting to serve on 127.0.0.1:8080
NodePort:
Обновите файл манифеста Kubernetes, как показано ниже,
---
apiVersion: v1
kind: Service
metadata:
name: "nginx-service"
namespace: "default"
spec:
ports:
- port: 80
nodePort: 30001
type: NodePort
selector:
app: "nginx"
Теперь выполните следующую команду и обновите службу,
kubectl apply -f nginx-svc.yaml
Результат будет выглядеть так, как показано ниже,
service/nginx-service configured
Теперь проверьте эту службу и вы должны увидеть тип,
kubectl get svc nginx-service
Ниже показан результат,
Давайте попробуем получить доступ к этой службе извне, для этого нам нужно использовать команду describe service,
kubectl describe service nginx-service
Вывод на вашем терминале должен быть таким, как показано ниже,
Я использую Minikube для создания кластера, и в Minikube есть команда для доступа к NodePort,
minikube service --url <service-name>
Я использовал minikube service --url nginx-service
и результат был как ожидалось, внешний URL для доступа к нашему NGINX.
Перейдите в терминал и на http://127.0.0.1:63907, мы должны увидеть экран нашего NGINX.
LoadBalancer:
Снова обновите файл манифеста Kubernetes, чтобы указать тип LoadBalancer.
---
apiVersion: v1
kind: Service
metadata:
name: "nginx-service"
namespace: "default"
spec:
ports:
- port: 80
type: LoadBalancer
selector:
app: "nginx"
Теперь выполните следующую команду и обновите службу,
kubectl apply -f nginx-svc.yaml
Результат будет выглядеть так, как показано ниже,
service/nginx-service configured
Теперь проверьте эту службу и вы должны увидеть тип,
kubectl get svc nginx-service
Примечание: Внешний IP будет показан в ожидании, так как мы используем Minikube и поэтому нам нужно использовать следующую команду для получения внешнего IP адреса.
minikube tunnel
Теперь давайте получим доступ к сервису с помощью команды,
minikube service nginx-service
Результат будет выглядеть следующим образом,
Когда вы зайдете на локальный сайт http://127.0.0.1:64711/, вы должны увидеть экран NGINX.
Ingress — на примере NGINX ingress
Полное руководство по настройке Ingress на Minikube с помощью контроллера NGINX Ingress хорошо показано в официальной документации Kubernetes, поэтому мы не будем повторять одно и то же.
Или вы можете последовать этому простому руководству по Ingress.
Вы можете запустить Minikube с помощью команды,
minikube start
Это настроит кучу ресурсов, необходимых для запуска Minikube.
Затем, следующим шагом будет включение дополнения ingress-controller, доступного вместе с minikube, с помощью следующей команды,
minikube addons enable ingress
Конечный вывод на терминале должен быть таким, как показано ниже,
The 'ingress' addon is enabled
Убедитесь, что вход был включен с помощью команды,
kubectl get pods -n ingress-nginx
Результат должен быть таким, как показано ниже,
Давайте создадим пример развертывания с помощью следующей команды,
kubectl create deployment nginx --image=nginx
Результат должен быть таким, как показано ниже,
Вы можете проверить это развертывание с помощью следующей команды,
kubectl get deployments
Вы должны увидеть развертывание nginx в качестве вывода.
Теперь давайте откроем это развертывание с помощью сервиса, привязав порт 80.
kubectl expose deployment nginx --type=NodePort --port=80
В терминале должно появиться сообщение о раскрытии сервиса.
service/nginx exposed
Вы можете увидеть подробности о созданной службе с помощью команды,
kubectl get service nginx
Вывод, который вы должны увидеть, приведен ниже,
Теперь вы можете легко получить доступ к службе NGINX на вашей локальной машине с помощью следующей команды,
minikube service nginx --url
Результат вы должны увидеть ниже,
Зайдите по адресу http://127.0.0.1:57460 и вы сможете увидеть экран NGINX.
Kubernetes — это мощный инструмент для автоматизации и управления ИТ-инфраструктурой. Он дает возможность группировать связанные части инфраструктуры, предоставляя им собственный «узел» в кластере, что упрощает управление, мониторинг и обновление.
Поскольку внедрение Kubernetes стремительно растет, эта платформа стала обязательной для разработчиков и предприятий, чтобы быть конкурентоспособными в пространстве облачных решений.
Платформа Harness создана с учетом всех возможностей, чтобы с легкостью повысить эффективность развертывания Kubernetes. Harness имеет интуитивно понятную приборную панель, где вы можете легко настроить этап развертывания, целевую инфраструктуру и стратегию выполнения.