Какой сервис выполняет балансировку нагрузки между узлами kubernetes? - PullRequest
0 голосов
/ 08 июня 2018

Что такое точка входа в кластер k8s?Как запрос направляется из точки входа в определенный контейнер?

1 Ответ

0 голосов
/ 08 июня 2018

Этот вопрос очень общий, у вас есть много типов балансировщиков нагрузки (внутренняя, сторонняя, Ingresses ...)

Но лучший ответ - Kubernetes services , так как всевыше реле на них.

Служба в kubernetes - это набор правил Linux iptables (или IPVS), которые будут выполнять преобразование сетевых адресов назначения (DNAT) для пакетов, отправляющихся на определенные IP-адреса.Вкратце:

1 - у службы будет виртуальный IP-адрес, называемый ServiceIP или ClusterIP.

2 - Пользователь связывается с kubernetes pods (один контейнер или набор связанных контейнеров) с использованием clusterIP.

3- Iptables в узле будет пересылать пакеты с ClusteIP назначения на IP-адрес связанного Pod с использованием CNI .

Балансировка нагрузки выполненачерез iptables, где у каждой службы будет правило Iptables:

 # iptables -t nat -L KUBE-SERVICES 
Chain KUBE-SERVICES (2 references)
target     prot opt source               destination  
KUBE-MARK-MASQ  tcp  -- !10.244.0.0/16        10.104.192.249       /* default/hypriot: cluster IP */ tcp dpt:http
KUBE-SVC-IKNY2FZN6EXMQQCV  tcp  --  anywhere             10.104.192.249       /* default/hypriot: cluster IP */ tcp dpt:http

# kubectl get svc hypriot
NAME      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
hypriot   ClusterIP   10.104.192.249   <none>        80/TCP    11d

. В этом примере у Hypriot развертывания есть ClusterIP 10.104.192.249, второе правило iptables будет пересылать все пакеты с этим Ip назначения в направленииЦЕПЬ KUBE-SVC-IKNY2FZN6EXMQQCV.

Чтобы увидеть, что будет делать этот CHAIN:

# iptables -t nat -L KUBE-SVC-IKNY2FZN6EXMQQCV
Chain KUBE-SVC-IKNY2FZN6EXMQQCV (1 references)
target     prot opt source               destination         
KUBE-SEP-JEK5XLX6ULDDGJAZ  all  --  anywhere             anywhere             /* default/hypriot: */ statistic mode random probability 0.33332999982
KUBE-SEP-WTXTLPWDUQWUHKOF  all  --  anywhere             anywhere             /* default/hypriot: */ statistic mode random probability 0.50000000000
KUBE-SEP-OQ7KPRR3BI2AFITK  all  --  anywhere             anywhere             /* default/hypriot: */

Каждый из KUBE-SEP является конечной точкой службы, которая представляет адрес модуля, в котором для этого развертывания у гиппотента есть 3 реплики.

# kubectl get endpoints hypriot
NAME      ENDPOINTS                                       AGE
hypriot   10.244.1.14:80,10.244.2.21:80,10.244.3.153:80   11d
# kubectl get po -o wide 
NAME                       READY     STATUS    RESTARTS   AGE       IP             NODE
hypriot-587768b4f5-9dq2k   1/1       Running   0          11d       10.244.2.21    node03
hypriot-587768b4f5-czd86   1/1       Running   0          11d       10.244.3.153   node04
hypriot-587768b4f5-j22sh   1/1       Running   0          11d       10.244.1.14    node02

Будет выбрана одна из этих конечных точек, и пакет будет перенаправлен на связанную цепочку KUBE-SEP:

# iptables -t nat -L KUBE-SEP-JEK5XLX6ULDDGJAZ
Chain KUBE-SEP-JEK5XLX6ULDDGJAZ (1 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  all  --  10.244.1.14          anywhere             /* default/hypriot: */
DNAT       tcp  --  anywhere             anywhere             /* default/hypriot: */ tcp to:10.244.1.14:80

Это последняя часть головоломки, где DNATпроизойдет, и новым получателем будет выбранный IP-адрес модуля (10.244.1.14 для модуля hypriot-587768b4f5-j22sh в этом примере), когда будет выбрана другая конечная точка службы, пакет будет DNATed другому модулю.

вы можете использовать флаг Iptables -v, чтобы проверить используемые правила, которые помогут вам в процессе понимания.

Некоторые хорошие чтения: https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/ https://kubernetes.io/docs/concepts/cluster-administration/networking/ https://kubernetes.io/docs/concepts/services-networking/service/#proxy-mode-iptables

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...