Учебное пособие по типам служб Kubernetes

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

Ниже приведена другая моя статья, в которой я подробно рассказываю о каждом типе сервисов.

Предварительные условия

  • Установленный и включенный 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 имеет интуитивно понятную приборную панель, где вы можете легко настроить этап развертывания, целевую инфраструктуру и стратегию выполнения.

Оцените статью
devanswers.ru
Добавить комментарий