Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Кластеры AKS можно развернуть в режиме двойного стека при использовании виртуальной сети Azure с двойным стеком. В этой конфигурации узлы получают как IPv4, так и IPv6-адрес из подсети виртуальной сети Azure. Pod получают как IPv4-, так и IPv6-адреса из логически отличного пространства адресов, которое отличается от адресного пространства подсети виртуальной сети Azure узлов. Трансляция сетевых адресов (NAT) затем настраивается таким образом, чтобы поды могли получать доступ к ресурсам в виртуальной сети Azure. Исходный IP-адрес трафика преобразуется через NAT в основной IP-адрес узла той же сети (IPv4 на IPv4 и IPv6 на IPv6).
В этой статье показано, как использовать сеть с двумя стеками с кластером AKS. Для получения дополнительной информации об опциях и соображениях сетей см. Основные понятия сети для Kubernetes и AKS.
Это важно
Начиная с 30 ноября 2025 г. служба Azure Kubernetes (AKS) больше не поддерживает или предоставляет обновления безопасности для Azure Linux 2.0. Образ узла Linux 2.0 Azure заморожен в выпуске202512.06.0. Начиная с 31 октября 2026 г. образы узлов будут удалены, и вы не сможете масштабировать пулы узлов. Выполните миграцию в поддерживаемую версию Linux Azure, обновив пулы узлов до поддерживаемой версии Kubernetes или переключив ее на osSku AzureLinux3. Дополнительные сведения см. в вопросе о прекращении поддержки на GitHub и объявлении об устаревании обновлений Azure. Чтобы оставаться в курсе объявлений и обновлений, следуйте заметкам о выпуске AKS.
Ограничения
- В пулах узлов Azure Linux для служб IPv6 требуется
externalTrafficPolicy: Local. - Для виртуальной сети Azure и CIDR pod требуется сеть с двумя стеками.
- Для IP-адресов узла и pod не поддерживается одиночный стек только IPv6. Службы могут быть развернуты на IPv4 или IPv6.
- Azure CNI Overlay не поддерживает сетевые политики Azure или Calico при использовании двухстековой сети. Чтобы использовать политики сети, используйте Azure CNI с помощью CILIUM.
- Шлюз NAT уровня "Стандартный" поддерживает только IPv4. Для исходящего трафика с двумя стеками используйте шлюз NAT StandardV2. Управляемый AKS тип исходящего трафика
managedNATGatewayV2доступен в предварительной версии. - Надстройка виртуальных узлов не поддерживается в сети с двумя стеками.
Предпосылки
- Azure CLI версии 2.48.1 или более поздней. Выполните
az --version, чтобы узнать установленную версию. Сведения об установке или обновлении Azure CLI см. в разделе "Установка Azure CLI". - Используйте поддерживаемую версию Kubernetes в AKS , которая доступна в вашем регионе.
В этой статье используется Azure CNI Overlay. Вы также можете развернуть двухстековый кластер с Azure CNI Powered by Cilium в кластерах Linux под управлением Kubernetes версии 1.29 или более поздней версии.
Обзор двухстековой сетевой архитектуры в Kubernetes
Kubernetes версии 1.23 обеспечивает стабильную поддержку кластеров с двойным стеком IPv4/IPv6, включая сетевое взаимодействие подов и служб. Узлы и поды всегда получают как IPv4, так и IPv6 адреса, в то время как службы могут быть настроены либо в двухстековом, либо в одностековом режиме в любом семействе адресов.
AKS настраивает необходимые вспомогательные службы для сети с двойным стеком. Эта конфигурация включает:
- Если используется управляемая виртуальная сеть, конфигурация виртуальной сети с двумя стеками.
- Узлы IPv4 и IPv6 и адреса pod.
- Правила исходящего трафика для трафика IPv4 и IPv6.
- Настройка подсистемы балансировки нагрузки для служб IPv4 и IPv6.
Замечание
При использовании сети с двумя стеками с исходящим типом определяемой пользователем маршрутизации можно выбрать маршрут по умолчанию для IPv6 в зависимости от того, требуется ли трафик IPv6 для доступа к Интернету. Если у вас нет маршрута по умолчанию для IPv6, при создании кластера появится предупреждение, но не препятствует созданию кластера.
Параметры кластера с двумя стеками
Следующие параметры поддерживают кластеры с двумя стеками:
| Parameter | Допустимые значения | Значение по умолчанию | Constraints |
|---|---|---|---|
--ip-families |
ipv4 или ipv4,ipv6 |
Не указано | Укажите разделенный запятыми список семейств IP-адресов для включения в кластере. |
--pod-cidrs |
Диапазоны CIDR, разделенные запятыми | 10.244.0.0/16,fd12:3456:789a::/64 |
Число и порядок диапазонов должны совпадать --ip-families. |
--service-cidrs |
Диапазоны CIDR, разделенные запятыми | 10.0.0.0/16,fd12:3456:789a:1::/108 |
Число и порядок диапазонов должны совпадать --ip-families. Подсеть IPv6 не может быть больше /108. |
Развертывание кластера AKS с двумя стеками
Создайте группу ресурсов Azure для кластера с помощью
az group createкоманды.az group create --location <region> --name <resourceGroupName>Создайте кластер AKS с двумя стеками с помощью
az aks createкоманды с заданным параметром--ip-familiesipv4,ipv6.az aks create \ --location <region> \ --resource-group <resourceGroupName> \ --name <clusterName> \ --network-plugin azure \ --network-plugin-mode overlay \ --ip-families ipv4,ipv6 \ --generate-ssh-keysПосле создания кластера получите учетные данные кластера с помощью
az aks get-credentialsкоманды.az aks get-credentials --resource-group <resourceGroupName> --name <clusterName>
Проверьте узлы, чтобы просмотреть оба семейства IP-адресов
После подготовки кластера с помощью команды kubectl get nodes убедитесь, что узлы настроены для работы с двухстековой сетью.
kubectl get nodes -o=custom-columns="NAME:.metadata.name,ADDRESSES:.status.addresses[?(@.type=='InternalIP')].address,PODCIDRS:.spec.podCIDRs[*]"
Выходные данные команды kubectl get nodes показывают, что узлы имеют адреса и пространство распределения IP-адресов pod для IPv4 и IPv6.
NAME ADDRESSES PODCIDRS
aks-nodepool1-14508455-vmss000000 10.240.0.4,2001:1234:5678:9abc::4 10.244.0.0/24,fd12:3456:789a::/80
aks-nodepool1-14508455-vmss000001 10.240.0.5,2001:1234:5678:9abc::5 10.244.1.0/24,fd12:3456:789a:0:1::/80
aks-nodepool1-14508455-vmss000002 10.240.0.6,2001:1234:5678:9abc::6 10.244.2.0/24,fd12:3456:789a:0:2::/80
Создание примера рабочей нагрузки
Разверните веб-сервер NGINX с тремя репликами, чтобы проверить назначение IP-адресов подам в двухстековой конфигурации.
Развертывание веб-сервера NGINX
Создайте веб-сервер NGINX, выполнив
kubectl create deployment nginxкоманду.kubectl create deployment nginx --image=nginx:latest --replicas=3Просмотрите ресурсы pod, выполнив
kubectl get podsкоманду.kubectl get pods -o custom-columns="NAME:.metadata.name,IPs:.status.podIPs[*].ip,NODE:.spec.nodeName,READY:.status.conditions[?(@.type=='Ready')].status"В выходных данных показано, что поды имеют как IPv4, так и IPv6 адреса. Поды не отображают IP-адреса, пока они не готовы.
NAME IPs NODE READY nginx-55649fd747-9cr7h 10.244.2.2,fd12:3456:789a:0:2::2 aks-nodepool1-14508455-vmss000002 True nginx-55649fd747-p5lr9 10.244.0.7,fd12:3456:789a::7 aks-nodepool1-14508455-vmss000000 True nginx-55649fd747-r2rqh 10.244.1.2,fd12:3456:789a:0:1::2 aks-nodepool1-14508455-vmss000001 True
Опубликуйте нагрузку через службу типа LoadBalancer
Это важно
Azure Load Balancer отправляет проверки работоспособности узлам IPv6 с локального адреса канала. В пулах узлов Azure Linux трафик к службам IPv6, использующим externalTrafficPolicy: Cluster, не проходит. Следующие примеры устанавливают externalTrafficPolicy: Local для службы IPv6, чтобы kube-proxy отвечал на зондирующий запрос на узле.
Откройте доступ к развертыванию NGINX с помощью отдельных служб IPv4 и IPv6
LoadBalancer, используя командуkubectl expose deployment nginx.kubectl expose deployment nginx --name=nginx-ipv4 --port=80 --type=LoadBalancer kubectl expose deployment nginx --name=nginx-ipv6 --port=80 --type=LoadBalancer --overrides='{"spec":{"externalTrafficPolicy":"Local","ipFamilies":["IPv6"]}}'Вы получаете вывод, показывающий, что службы открыты.
service/nginx-ipv4 exposed service/nginx-ipv6 exposedПосле публикации развертывания и полного развертывания служб
LoadBalancerполучите IP-адреса служб с помощью командыkubectl get services.kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ipv4 LoadBalancer 10.0.88.78 20.46.24.24 80:30652/TCP 97s nginx-ipv6 LoadBalancer fd12:3456:789a:1::981a 2603:1030:8:5::2d 80:32002/TCP 63sПроверьте функциональные возможности виртуальной машины Linux или локального компьютера с назначенным IPv6-адресом и настроенной маршрутизацией IPv6. Azure Cloud Shell не поддерживает IPv6.
SERVICE_IP=$(kubectl get services nginx-ipv6 -o jsonpath='{.status.loadBalancer.ingress[0].ip}') curl -s "http://[${SERVICE_IP}]" | head -n5<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>