Как происходит маршрутизация трафика в операторе Kubernetes — Journey of Egress traffic

Я пытаюсь понять управление исходящим трафиком в Kubernetes-Operator. Если я реализую оператор Kubernetes в своей настройке k3s, как поток исходящего трафика происходит в операторе?

Я хочу понять, какой путь/шлюз и маршрутизация происходит с потоком исходящего трафика в операторе Kubernetes (путешествие исходящего трафика)?




Ответы (1)


Как правило, исходящий трафик выходит из вашего SDN с узла, на котором размещен ваш модуль. Узел будет использовать NAT, используя свой собственный IP-адрес в вашей базовой сети.

Теперь, если под Egress вы подразумеваете что-либо, что покидает мой Pod / что касается связи, которая остается в SDN. Принимая во внимание, что:

  • SDN имеет две подсети (сеть pod, сервисная сеть), и что ваша сеть pod разделена на более мелкие подсети, статически выделенные для ваших узлов Kubernetes:
  • Службы имеют (обычно/когда spec.clusterIP != None) свой собственный фиксированный IP-адрес.
  • для каждой службы в вашем кластере у вас есть объект конечной точки, в котором перечислены все поды с соответствующими метками, которые считаются готовыми

При подключении службы брандмауэр узла (обычно ipvs или iptables, настроенный для kube-proxy) перенаправляет ваше соединение на один из адресов, перечисленных в соответствующем объекте конечной точки. В этот момент ваша таблица маршрутизации Node берет на себя:

  • если целевой адрес является локальным (в подсети, которая была выделена для вашего узла), то связь является прямой.
  • если целевой адрес принадлежит сети, выделенной другому узлу в вашем кластере, то трафик будет проходить через ваши контейнеры SDN (калико, фланель, ovs, ...), достигая пункта назначения.
person SYN    schedule 22.07.2021
comment
@SYN-: Два вопроса, которые у меня есть в ваших последних двух пунктах: 1. Если целевой адрес является локальным: таким образом, пример может быть другим модулем в том же пространстве имен или приложением, работающим в другом модуле в том же NS? Если да, то, по-вашему, связь прямая? что здесь означает прямое? 2. если целевой адрес принадлежит сети, выделенной другому узлу: под другим узлом вы подразумеваете другой модуль? здесь давайте возьмем пример google.com. Если мой целевой адрес — google.com, то он будет проходить через SDN, может ли это быть через оператора kubernetes вместо коленкора, фланели, реснички и т. д.? - person solveit; 22.07.2021
comment
@SYN-: Также в настройке k3s по умолчанию создается модуль coredns с изображением ранчера rancher/coredns-coredns:1.8.3 . Итак, в моем случае исходящий трафик будет проходить через coredns, если мой целевой адрес — google.com? Я имею в виду, где coredns играет роль в исходящих вызовах? - person solveit; 22.07.2021
comment
Когда я говорю, что адрес является локальным, я имею в виду узлы/маршрутизацию: если и исходный, и целевой поды находятся на одном узле, у них есть IP-адреса в одной и той же подсети, связь не будет покидать этот узел. Что касается разрешения DNS, клиентский модуль может подключиться к DNS-серверу вашего кластера, который, в свою очередь, может выдавать свои собственные запросы или обслуживать клиентов с кэшированными ответами. Строго говоря, трафик Pod вашего приложения не покидает SDN. Хотя наверняка CoreDNS со временем подключит либо какой-нибудь внутренний (корпоративный LAN), либо публичный резолвер. - person SYN; 22.07.2021