Kubernetes kube-proxy NodePort с IPv6

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

  • Все узлы (Ubuntu 18.04) имеют адреса IPv4 и IPv6 и доступны (например, ssh) с использованием обоих
  • Kubernetes был инициирован с использованием kubeadm с IPv4
  • Выполняется тестовое развертывание nginx и становится доступным с помощью службы с nodeport

. Я могу успешно свернуть службу, используя 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 mode) - поэтому соединение может быть установлено - но данные не передаются с использованием tcp6 (curl -6), tcp4 (curl -4) работает должным образом.

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

0
задан 10 March 2020 в 12:21
1 ответ

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

Согласно документации kubernetes :

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

СОСТОЯНИЕ ФУНКЦИИ: Kubernetes v1.16 alpha

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

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

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


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


Обновление:

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

Согласно документации calico :

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

Чтобы включить IPv6 только в кластере кубернетов используйте это руководство .

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

1
ответ дан 30 March 2020 в 01:22

Теги

Похожие вопросы