Kubernetes Nodeport Против Loadbalancer Против Ingress? Когда И Что Использовать?



Kubernetes NodePort против LoadBalancer против Ingress? Когда и что использовать?

Недавно меня спросили, в чем разница между NodePorts, LoadBalancers и Ingress. Это все разные способы передачи внешнего трафика в кластер.

Давайте посмотрим, чем они отличаются и когда использовать каждый.

Примечание: рекомендации предназначены для Движок Google Кубернетес .

Если вы работаете в другом облаке, на собственном сервере, на мини-кубе или где-то еще, различия будут. Я не вдаюсь в технические подробности.

Если вам нужны подробности, пожалуйста, свяжитесь официальная документация .



КластерIP

ClusterIP — это служба Kubernetes по умолчанию.

Он предоставляет службу внутри кластера, к которой могут получить доступ другие приложения внутри кластера.

Внешний доступ отсутствует. YAML для службы ClusterIP выглядит следующим образом:

  
  
  
   

apiVersion: v1 kind: Service metadata: name: my-internal-service selector: app: my-app spec: type: ClusterIP ports: - name: http port: 80 targetPort: 80 protocol: TCP

Зачем я говорю о сервисе ClusterIP, если к нему невозможно получить доступ из Интернета? Есть способ: использовать прокси Kubernetes!

Kubernetes NodePort против LoadBalancer против Ingress? Когда и что использовать?

Запустите прокси-сервер Kubernetes:

$ kubectl proxy --port=8080

Теперь вы можете использовать Kubernetes API для доступа к этому сервису, используя схему: http://localhost:8080/api/v1/proxy/namespaces/ /услуги/ : / Мы используем этот адрес для доступа к вышеуказанному сервису: http://localhost:8080/api/v1/proxy/namespaces/default/services/my-internal-service:http/

Когда использовать?

Существует несколько сценариев использования прокси-сервера Kubernetes для доступа к сервисам.

Отладка сервисов или подключение к ним напрямую с ноутбука для других целей Разрешение внутреннего трафика, отображение внутренних панелей и т.д. Поскольку этот метод требует запуска kubectl от имени аутентифицированного пользователя, его не следует использовать для предоставления доступа к службам в Интернете или для производственных служб.



НодПорт

Служба NodePort — это самый примитивный способ направить внешний трафик на службу.

NodePort, как следует из названия, открывает указанный порт для всех узлов (виртуальных машин), и трафик на этот порт перенаправляется в службу.



Kubernetes NodePort против LoadBalancer против Ingress? Когда и что использовать?

YAML для службы NodePort выглядит следующим образом:

apiVersion: v1 kind: Service metadata: name: my-nodeport-service selector: app: my-app spec: type: NodePort ports: - name: http port: 80 targetPort: 80 nodePort: 30036 protocol: TCP

По сути, служба NodePort имеет два отличия от обычной службы ClusterIP. Во-первых, тип NodePort. Существует дополнительный порт под названием nodePort, который определяет, какой порт открыть на узлах.

Если мы не укажем этот порт, он выберет случайный.

В большинстве случаев позвольте Kubernetes самому выбрать порт. Как он говорит думаю , с выбором портов все не так просто.



Когда использовать?

Метод имеет множество недостатков: К порту подключается только одна служба Доступны только порты 30000–32767. Если IP-адрес хоста/виртуальной машины изменится, вам придется это выяснить.

По этим причинам я не рекомендую использовать этот метод в производстве для прямого предоставления сервиса.

Но если вам безразлична постоянная доступность услуги, а уровень затрат – нет, этот способ для вас.

Хорошим примером такого приложения является демо-версия или временная заглушка.



Балансировщик нагрузки

Сервис LoadBalancer — это стандартный способ предоставления услуги в Интернете.

На ГКЕ он развернёт Балансировщик сетевой нагрузки Который предоставит IP-адрес.

Этот IP-адрес будет направлять весь трафик на службу.



Kubernetes NodePort против LoadBalancer против Ingress? Когда и что использовать?



Когда использовать?

Если вы хотите предоставить службу напрямую, это метод по умолчанию.

Весь трафик по указанному порту будет направлен на сервис.

Никакой фильтрации, никакой маршрутизации и т. д. Это означает, что мы можем направлять в сервис такие типы трафика, как HTTP, TCP, UDP, Websockets, gRPC и тому подобное.

! Но есть один недостаток.

Каждой службе, которую мы предоставляем с помощью LoadBalancer, нужен собственный IP-адрес, который может стоить немалых денег.



Вход

В отличие от приведенных примеров, Ingress сам по себе не является сервисом.

Он находится перед несколькими сервисами и действует как «интеллектуальный маршрутизатор» или точка входа в кластер.

Существуют различные типы контроллеров Ingress с богатыми возможностями.

Контроллер GKE работает по умолчанию.

Балансировщик нагрузки HTTP(S) .

У вас одновременно будет доступ к маршрутизации к серверным службам на основе путей и поддоменов.

Например, мы отправляем все, что есть на foo.yourdomain.com, в сервис foo, а путь yourdomain.com/bar/ со всеми вложениями — в сервис bar.

Kubernetes NodePort против LoadBalancer против Ingress? Когда и что использовать?

YAML для объекта Ingress в GKE с Балансировщик нагрузки HTTP L7 следующее:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: my-ingress spec: backend: serviceName: other servicePort: 8080 rules: - host: foo.mydomain.com http: paths: - backend: serviceName: foo servicePort: 8080 - host: mydomain.com http: paths: - path: /bar/* backend: serviceName: bar servicePort: 8080

Когда использовать? С одной стороны, Ingress — один из лучших способов предоставления услуг.

С другой стороны, это один из самых сложных.

Существует множество Ingress-контроллеров: Облачный балансировщик нагрузки Google , Нгинкс , Контур , Истио и другие.

Существуют также плагины для контроллеров Ingress, например сертификат-менеджер , который автоматически предоставляет сертификаты SSL для служб.

Ingress хорошо подходит для предоставления доступа к нескольким службам на одном IP-адресе, когда все службы используют общий протокол L7 (обычно HTTP).

Используя встроенную интеграцию GCP, вы платите только за один балансировщик нагрузки.

А поскольку Ingress умный, вы получаете множество функций «из коробки» (таких как SSL, аутентификация, маршрутизация и т. д.).

Спасибо за схемы Ахмет Альп Балкан .

Это не самая технически точная диаграмма, но она хорошо иллюстрирует, как работает NodePort. Оригинал: Kubernetes NodePort против LoadBalancer против Ingress? Когда мне следует использовать что? .

Теги: #Системное администрирование #Kubernetes #DevOps #ingress #микросервисы #балансировка нагрузки #сервисы

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.