Мы собираемся начать настройку нового кластера kubernetes на пустом металле в нашем собственном центре данных. Документация по модулям и сервисам k8s великолепна, однако мне не удалось найти исчерпывающей документации по компонентам, необходимым для выполнения наших требований:
Подсистемы должны быть доступны по IPv4 и IPv6 Подсистемы должны иметь возможность перемещаться между хостами и оставаться доступными по обоим протоколам Подсистемы должны иметь доступ к внешним ресурсам через IPv4 и IPv6. Я знаю, что можно использовать MetalLb для управления входящим трафиком. Но будет ли это также работать, когда стручок пытается достичь внешнего ресурса v4/v6?
Что в целом необходимо для удовлетворения требований?
Я использовал Kubernetes 1.21 с Calico для подключения к сети за моим маршрутизатором/брандмауэром BGP (Juniper SRX) для внешнего подключения. Calico можно комбинировать с metallb, где metallb выполняет оркестровку, а Calico выполняет маршрутизацию BGP. Подробнее об этом см. https://docs.projectcalico.org/networking/advertise-service-ips#advertise-service-load-balancer-ip-addresses.
Добавьте nginx для входа и cert-manager для сертификатов, и у вас будет все, что вам нужно.
Я заметил, что балансировщик нагрузки не поддерживает двойной стек, но вы можете легко обойти это, создав два отдельных: один IPv6 с одним стеком и один IPv4 с одним стеком.
Я использую Kubernetes 1.21 с Calico и BGP без metalb.
Использование traefik для входа и cert-manager для сертификатов.
Балансировщик нагрузки Traefik поддерживает двойной стек, по крайней мере, без metalb, но требует, чтобы вы установили для службы ipFamilyPolicy
значение PreferDualStack
и настроили cidr служб с cidr IPv6 ( что должно быть сделано по умолчанию в kubeadm v1.21+). Мне пришлось использовать RequireDualStack с k3s, чтобы он принимал соединения IPv6.
https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services https://kubernetes.io/docs/tasks/network/validate-dual-stack/