Порт сервисного узла на нескольких узлах - PullRequest
0 голосов
/ 25 февраля 2020

Я использую 3 узла в кластере Kubernetes. Каждый узел имеет один и тот же Pod myApp. Я создаю сервис, используя тип NodePort, так что все 3 узла доступны из внешнего. Yaml службы выглядит следующим образом:

apiVersion: v1
kind: Service
metadata:
  name: myService
  labels:
    app: myApp
spec:
  selector:
    app: myApp
  type: NodePort

Предположим, что IP-адрес узла + 3 порта:
1. 192.168.18.1:30010
2. 192.168.18.2:30010
3. 192.168.18.3:30010

Мои вопросы:
1. Если все запросы поступят на один узел с IP (192.168.18.1:30010), будет ли балансировка нагрузки службы запрашивает Pod в других узлах или только в целевом узле (IP 192.168.18.1:30010)?

2. Если ответ на вопрос 1 положительный, это означает, что служба может запросить балансировку нагрузки. Тогда нам все еще нужен какой-нибудь балансировщик нагрузки.

Спасибо

1 Ответ

1 голос
/ 25 февраля 2020
  1. Да, балансировка нагрузки будет предоставлена ​​kube-proxy. Если вы посмотрите на конечные точки, описывая службу, то обнаружите, что там указаны IP-адреса модулей, поддерживаемых службой. Поэтому, когда запрос поступает на любые узлы IP и NodePort, он будет сбалансирован по нагрузке с помощью kube-proxy между этими модулями. Он работает так, как запрос поступает на один из IP-адреса узла и порта, затем идет на IP-адрес кластера, а затем он балансирует нагрузку для любого из модулей за кластером IP.

  2. Балансировка нагрузки с помощью прокси-сервера kube происходит на уровне TCP через правила таблицы IP. Loadbalancer обеспечивает балансировку нагрузки на уровне L7 (HTTP) и расширенные правила маршрутизации на основе заголовка HTTP et c. Так что если вам это нужно, то вам нужно использовать Loadbalancer. Другим недостатком использования nodeport является то, что если IP-адрес узла изменяется, клиент должен знать об этом, чего можно избежать, используя Loadbalancer, который обычно предоставляет DNS.

enter image description here

...