Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При создании ресурса подсистемы балансировки нагрузки в кластере Служба Azure Kubernetes (AKS) общедоступный IP-адрес, назначенный ему, действителен только в течение срока существования этого ресурса. Если вы удалите службу Kubernetes, связанные с ней подсистема балансировки нагрузки и IP-адрес также будут удалены. Если вы хотите назначить определенный IP-адрес или сохранить IP-адрес для повторно развернутых служб Kubernetes, можно создать и использовать статический общедоступный IP-адрес.
В этой статье описывается создание статического общедоступного IP-адреса и его назначение службе Kubernetes.
Перед началом работы
- Вам понадобится установленный и настроенный Azure CLI версии 2.0.59 или новее. Чтобы узнать версию, выполните команду
az --version. Сведения об установке или обновлении см. в разделе Install Azure CLI. - В этой статье рассматривается использование IP-адреса с номером SKU Стандартный и подсистемы балансировки нагрузки с номером SKUСтандартный. Дополнительные сведения см. в статье Типы IP-адресов и методы их распределения в Azure.
Создание кластера AKS
Создайте группу ресурсов Azure с помощью
az group createкоманды.az group create --name myNetworkResourceGroup --location eastusСоздайте кластер AKS с помощью
az aks createкоманды.az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
Создание статического IP-адреса
Получите имя группы ресурсов узла с помощью
az aks showкоманды и запроса дляnodeResourceGroupсвойства.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsvСоздайте статический общедоступный IP-адрес в группе ресурсов узла с помощью
az network public-ip createкоманды.az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method staticВнимание
AKS больше не поддерживает балансировщик нагрузки Basic. Если в кластере используется базовый Load Balancer, выполните обновление до Load Balancer (цен. категория "Стандартный") перед настройкой статического общедоступного IP-адреса.
Получите статический общедоступный IP-адрес с помощью
az network public-ip showкоманды. Укажите имя группы ресурсов узла и созданного вами общедоступного IP-адреса, а затем выполните запрос дляipAddress.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Создание службы Kubernetes со статическим IP-адресом
Создайте файл с именем
load-balancer-service.yamlи скопируйте содержимое следующего ФАЙЛА YAML. Укажите имя ресурса общедоступного IP-адреса (myAKSPublicIP), созданное в разделе "Создание статического IP-адреса " и имени группы ресурсов узла.Удостоверение уровня управления AKS имеет разрешения участника в группе ресурсов узла по умолчанию, поэтому общедоступный IP-адрес, создаваемый в этой статье, не требует назначения другой роли. Если в другой группе ресурсов используется входящий или исходящий общедоступный IP-адрес, предоставьте удостоверению уровня управления необходимые разрешения для этой группы ресурсов. Дополнительные сведения см. в разделе "Управляемые удостоверения" в AKS.
Внимание
Свойство
loadBalancerIPв манифесте службы Kubernetes считается устаревшим в соответствии с upstream Kubernetes. Существующие сервисы продолжают работать без изменений, но вместо них используйте аннотации сервисов.Annotation Purpose service.beta.kubernetes.io/azure-pip-nameУкажите имя ресурса общедоступного IP-адреса. service.beta.kubernetes.io/azure-load-balancer-ipv4Укажите IPv4-адрес. service.beta.kubernetes.io/azure-load-balancer-ipv6Укажите IPv6-адрес. apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancerПримечание.
service.beta.kubernetes.io/azure-pip-nameДобавление заметки гарантирует наиболее эффективное создание LoadBalancer и настоятельно рекомендуется избежать потенциального регулирования.Задайте общедоступную метку DNS для службы с помощью заметки
service.beta.kubernetes.io/azure-dns-label-nameслужбы. Эта служба публикует полное доменное имя (FQDN) для службы с помощью общедоступных DNS-серверов Azure и домена верхнего уровня. Значение аннотации должно быть уникальным в расположении Azure, поэтому рекомендуется использовать достаточно подробно описанную метку. Azure автоматически добавляет суффикс по умолчанию, например<location>.cloudapp.azure.com, к имени, которое вы указали, создавая полное доменное имя.Примечание.
Если вы хотите опубликовать службу в собственном домене, ознакомьтесь с azure DNS и проектом внешнего DNS .
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label> name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancerПеред созданием сервиса убедитесь, что в вашем кластере есть рабочая нагрузка с подами, использующими метку
app: azure-load-balancer. Манифест сервиса выбирает поды с этой меткой, но не создает Deployment.Создайте службу с помощью
kubectl applyкоманды.kubectl apply -f load-balancer-service.yamlУбедитесь, что служба выбирает по крайней мере один запущенный модуль pod.
kubectl get pods -l app=azure-load-balancerЧтобы просмотреть метку DNS для подсистемы балансировки нагрузки, используйте
kubectl describeкоманду.kubectl describe service azure-load-balancerМетка DNS будет указана в списке под
Annotations, как показано в следующем кратком примере вывода:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
Устранение неполадок
В этом разделе предполагается, что вы завершили создание статического IP-адреса, попытались выполнить действия, описанные в статье "Создание службы Kubernetes со статическим IP-адресом" и запуск кластера AKS. Чтобы получить имя группы ресурсов узла, используйте az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv.
Если ресурс общедоступного IP-адреса, имя которого указано в аннотации service.beta.kubernetes.io/azure-pip-name, не существует в группе ресурсов, указанной в service.beta.kubernetes.io/azure-load-balancer-resource-group, или удостоверение плоскости управления AKS не может получить доступ к этой группе ресурсов, не удаётся создать службу балансировщика нагрузки. Для устранения неполадок просмотрите аннотации службы и события создания с помощью команды kubectl describe. Укажите имя службы, указанной в манифесте YAML, как показано в следующем примере:
kubectl describe service azure-load-balancer
В выходных данных отображаются сведения о ресурсе службы Kubernetes. Следующий пример вывода показывает Warning в Events: "user supplied IP address was not found". В этом сценарии убедитесь, что аннотация azure-pip-name соответствует имени ресурса статического общедоступного IP-адреса, а аннотация azure-load-balancer-resource-group соответствует группе ресурсов, которая его содержит.
Name: azure-load-balancer
Namespace: default
Labels: <none>
Annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
Selector: app=azure-load-balancer
Type: LoadBalancer
IP: 10.0.18.125
IP: 40.121.183.52
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32582/TCP
Endpoints: <pod-ip>:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatingLoadBalancer 7s (x2 over 22s) service-controller Creating load balancer
Warning CreatingLoadBalancerFailed 6s (x2 over 12s) service-controller Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found
Следующие шаги
Для получения большего контроля над сетевым трафиком в приложениях используйте надстройку маршрутизации приложений для AKS. Дополнительные сведения о надстройке маршрутизации приложений см. в разделе "Управляемый входящий трафик NGINX" с надстройкой маршрутизации приложений.