Назад | Перейти на главную страницу

Kubernetes kube-proxy NodePort с IPv6

Я пытаюсь открыть службу с помощью NodePort в локальной среде кубернеты без покрытия (1.17) кластер (бязь для CNI и CRI-O 1.17)

Я могу успешно свернуть службу, используя IPv4, но не используя IPv6 (соединение установлено, но ничего не передается).

kubectl describe svc/example-service

Name:                     example-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=helloworld
Type:                     NodePort
IP:                       10.97.69.135
Port:                     <unset>  5000/TCP
TargetPort:               5000/TCP
NodePort:                 <unset>  32042/TCP
Endpoints:                10.10.166.132:5000
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

На хосте, на котором выполняется это развертывание:

netstat -tulpen|grep ':32042'

tcp6       0      0 :::32042                :::*                    LISTEN      0          10276301   2314/kube-proxy  

Очевидно, что kube-proxy привязывается к tcp6 (в режиме совместимости с tcp4), поэтому соединение может быть установлено, но данные не передаются с использованием tcp6 (curl -6), tcp4 (curl -4) работает должным образом.

Должен ли кластер быть настроен в режиме двойного стека или IPv6 для получения запросов IPv4 и IPv6 (например, через NodePort)?

Да, именно для этого нужен двойной стек. Это позволяет выделить IPv6 и IPv4 адреса. Без него модули и службы не будут доступны по тому или иному IP-протоколу. Разрешения DNS недостаточно для правильного сетевого подключения, если IP-протокол не может быть обработан.

В соответствии с Кубернеты документация:

Двойной стек IPv4 / IPv6

ОСОБЕННОСТЬ СОСТОЯНИЕ: Kubernetes v1.16 альфа

Двойной стек IPv4 / IPv6 позволяет выделять адреса IPv4 и IPv6 для Стручки и Сервисы.

Если вы включите сеть с двойным стеком IPv4 / IPv6 для своего кластера Kubernetes, кластер будет поддерживать одновременное назначение адресов IPv4 и IPv6.

Обратите внимание, что это альфа-функция и не подходит для производственной среды.


Альтернативный подход - использовать IPv6 модель прекращения. куда IPv6 трафик отправляется через прокси на серверы IPv4 внутри сети кластера. пример из документации GCP.


Обновить:

Можно использовать ТОЛЬКО IPv6 без IPv4 с бязью. Однако есть некоторые ограничения.

В соответствии с ситцевая ткань документация:

  • В настоящее время Kubernetes поддерживает только одну версию IP-стека одновременно. Это означает, что если вы настраиваете Kubernetes для IPv6, тогда Calico должен быть настроен для назначения только адресов IPv6.
  • Приведенные здесь шаги и настройка не тестировались на существующем кластере IPv4 и предназначены только для новых кластеров.

Включить IPv6 только в кластере Kubernetes используйте это руководство.

Надеюсь, поможет.