Обычные 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.