Являются ли службы в Кубернетесе просто обратными прокси-серверами, которые обеспечивают постоянную точку контакта? - PullRequest
0 голосов
/ 04 октября 2018

Я исследую сервисы Kubernetes (это один из видов компонентов k8s, очень похожий на Pods и ReplicaSets).Похоже, они функционируют как обратные прокси, но я знаю, что k8s внутренне использует DNS, так что, возможно, они являются своего рода DNS с балансировкой нагрузки?Кроме того, это может как-то означать, что, поскольку Pod может быть перемещен или существовать на многих узлах, он не может быть просто обратным прокси-сервером, так как он также должен быть адресуемым, но иметь один IP-адрес на многих машинах ... (очевидно, труднопредставить, как они были построены, не глядя прямо на исходный код - пока).

Что составляет Сервис K8s?DNS + обратный прокси или что-то более / менее?Какой-то сетевой трюк?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Для служб и маршрутизации внутри кластера в основном iptables , за исключением случаев, когда вы явно используете ipvs (который частично использует iptables) или что-то вроде Cillium (которыйпозволяет подключать BFP ).Kube-прокси в каждом узле управляет правилами iptable.Больше информации о том, как прокси-режимы здесь .

На стороне DNS Kubernetes запускает либо kube-dns (1.10 или старше), либо coredns (1.11 или новее) и, по существу, все сервисы и модули.зарегистрируйтесь в той службе DNS для других контейнеров / контейнеров, чтобы найти их.Например, у службы будет полное доменное имя, подобное следующему: my-service.my-namespace.svc.cluster.local Подробнее об этом здесь .

0 голосов
/ 04 октября 2018

Обычные ClusterIP службы

Обеспечение сетевого подключения для type: ClusterIP Службы является обязанностью kube-proxy - компонента, который обычно работает на каждом узле вашегокластер.Kube-прокси делает это путем перехвата исходящего трафика от модулей на каждом узле и фильтрации трафика, ориентированного на IP-адреса служб.Поскольку он подключен к API Kubernetes, kube-прокси может определять, какие IP-адреса Pod связаны с каждым IP-адресом службы, и может соответствующим образом пересылать трафик.

Концептуально, kube-proxy может считаться аналогичным обратному.прокси-сервер (отсюда и название), но обычно использует правила IPtables (или, начиная с Kubernetes 1.9 или IPVS).Каждая созданная служба приведет к набору правил IPtables на каждом узле, который перехватывает и перенаправляет трафик, нацеленный на IP-адрес службы, на соответствующие IP-адреса Pod (IP-адреса служб являются чисто виртуальными и существуют только в этих правилах IPtables; нигде во всем кластере вы не будетенайти фактический сетевой интерфейс, содержащий этот IP).

Балансировка нагрузки также реализована с помощью правил IPtables (или IPVS).Балансировка нагрузки всегда происходит на узле source , откуда исходит трафик.

Вот пример из Debug Services раздела документации:

u@node$ iptables-save | grep hostnames
-A KUBE-SEP-57KPRZ3JQVENLNBR -s 10.244.3.6/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
-A KUBE-SEP-57KPRZ3JQVENLNBR -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.3.6:9376
-A KUBE-SEP-WNBA2IHDGP2BOBGZ -s 10.244.1.7/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
-A KUBE-SEP-WNBA2IHDGP2BOBGZ -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.1.7:9376
-A KUBE-SEP-X3P2623AGDH6CDF3 -s 10.244.2.3/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
-A KUBE-SEP-X3P2623AGDH6CDF3 -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.2.3:9376
-A KUBE-SERVICES -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames: cluster IP" -m tcp --dport 80 -j KUBE-SVC-NWV5X2332I4OT4T3
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-WNBA2IHDGP2BOBGZ
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-X3P2623AGDH6CDF3
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -j KUBE-SEP-57KPRZ3JQVENLNBR

Для получения дополнительной информации ознакомьтесь с разделом Виртуальные IP-адреса и служебные прокси в руководстве.

Безголовые услуги

Кроме обычныхClusterIP сервисов, есть также Headless Services (которые объявляются путем указания свойства clusterIP: None при создании сервиса).Они не будут использовать Kube-прокси;вместо этого их DNS-имя хоста будет напрямую разрешено для всех IP-адресов Pod, связанных с сервисом.Балансировка нагрузки достигается с помощью обычного циклического перебора DNS.

...