Использование статического общедоступного IP-адреса и DNS-метки с подсистемой балансировки нагрузки Службы Azure Kubernetes (AKS)
При создании ресурса подсистемы балансировки нагрузки в кластере Служба Azure Kubernetes (AKS) общедоступный IP-адрес, назначенный ему, действителен только в течение срока существования этого ресурса. Если вы удалите службу Kubernetes, связанные с ней подсистема балансировки нагрузки и IP-адрес также будут удалены. Если вы хотите назначить определенный IP-адрес или сохранить IP-адрес для повторно развернутых служб Kubernetes, можно создать и использовать статический общедоступный IP-адрес.
В этой статье описывается создание статического общедоступного IP-адреса и его назначение службе Kubernetes.
Подготовка к работе
- Вам понадобится Azure CLI версии 2.0.59 или более поздней версии. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. - В этой статье рассматривается использование 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
Примечание.
Если вы используете подсистему балансировки нагрузки SKU уровня "Базовый" в кластере AKS, используйте базовый параметр при
--sku
определении общедоступного IP-адреса. Только IP-адреса с номером SKU Базовый работают с подсистемой балансировки нагрузки с номером SKU Базовый, и только IP-адреса с номером SKU Стандартный работают с подсистемой балансировки нагрузки с номером SKU Стандартный.Получите статический общедоступный IP-адрес с помощью
az network public-ip list
команды. Укажите имя созданной группы ресурсов узла и общедоступный IP-адрес и запросите для нееipAddress
.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Создание службы со статическим IP-адресом
Сначала определите тип управляемого удостоверения, используемого кластером AKS, назначаемого системой или назначаемого пользователем. Если вы не уверены, вызовите команду az aks show и запросите свойство типа удостоверения.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query identity.type \ --output tsv
Если кластер использует управляемое удостоверение, значение свойства типа будет иметь значение SystemAssigned или UserAssigned.
Если кластер использует субъект-службу, значение свойства типа будет иметь значение NULL. Рассмотрите возможность обновления кластера для использования управляемого удостоверения.
Если кластер AKS использует управляемое удостоверение, назначаемое системой, запросите идентификатор субъекта управляемого удостоверения следующим образом:
# Get the principal ID for a system-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.principalId \ --output tsv)
Если кластер AKS использует управляемое удостоверение, назначаемое пользователем, идентификатор субъекта будет иметь значение NULL. Запросите идентификатор клиента управляемого удостоверения, назначаемого пользователем, вместо этого:
# Get the client ID for a user-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.userAssignedIdentities.*.clientId \ --output tsv
Назначьте делегированные разрешения для управляемого удостоверения, используемого кластером AKS для группы ресурсов общедоступного IP-адреса, вызвав
az role assignment create
команду.# Get the resource ID for the node resource group. RG_SCOPE=$(az group show \ --name <node resource group> \ --query id \ --output tsv) # Assign the Network Contributor role to the managed identity, # scoped to the node resource group. az role assignment create \ --assignee ${CLIENT_ID} \ --role "Network Contributor" \ --scope ${RG_SCOPE}
Внимание
Если вы настроили исходящий IP-адрес, убедитесь, что удостоверение кластера имеет разрешения как на исходящий общедоступный IP-адрес, так и на входящий общедоступный IP-адрес.
Создайте файл с именем
load-balancer-service.yaml
и скопируйте содержимое следующего ФАЙЛА YAML, указав собственный общедоступный IP-адрес, созданный на предыдущем шаге, и имя группы ресурсов узла.Внимание
loadBalancerIP
Добавление свойства в манифест YAML подсистемы балансировки нагрузки устарело после вышестоящего Kubernetes. Хотя текущее использование остается неизменным и существующие службы, как ожидается, работают без изменений, мы настоятельно рекомендуем задать заметки службы. Чтобы задать заметки службы, можно использовать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-адреса, как показано в примере YAML.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
Создайте службу и развертывание с помощью
kubectl apply
команды.kubectl apply -f load-balancer-service.yaml
Чтобы просмотреть метку DNS для подсистемы балансировки нагрузки, используйте
kubectl describe service
команду.kubectl describe service azure-load-balancer
Метка DNS будет указана в
Annotations
списке, как показано в следующем сжатом примере выходных данных:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kuberenetes.io/azure-dns-label-name: <unique-service-label>
Устранение неполадок
Если статический IP-адрес, определенный в свойстве манифеста службы Kubernetes, не существует или не был создан в loadBalancerIP
группе ресурсов узла и нет других делегирований, создание службы балансировки нагрузки завершается ошибкой. Чтобы устранить неполадки, просмотрите события создания службы с помощью kubectl describe
команды. Укажите имя службы, указанной в манифесте YAML, как показано в следующем примере:
kubectl describe service azure-load-balancer
В выходных данных отображаются сведения о ресурсе службы Kubernetes. В следующем примере выходных данных показано Warning
в следующем примере : Events
"user supplied IP address was not found
". В этом сценарии убедитесь, что вы создали статический общедоступный IP-адрес в группе ресурсов узла и что IP-адрес, указанный в манифесте службы Kubernetes, правильно.
Name: azure-load-balancer
Namespace: default
Labels: <none>
Annotations: <none>
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: <none>
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" с надстройкой маршрутизации приложений.
Azure Kubernetes Service