Я пытаюсь открыть службу с помощью 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 используйте это руководство.
Надеюсь, поможет.