Использование статического общедоступного 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

  1. Создайте группу ресурсов Azure с помощью az group create команды.

    az group create --name myNetworkResourceGroup --location eastus
    
  2. Создайте кластер AKS с помощью az aks create команды.

    az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
    

Создание статического IP-адреса

  1. Получите имя группы ресурсов узла с помощью az aks show команды и запроса для nodeResourceGroup свойства.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. Создайте статический общедоступный 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 Стандартный.

  3. Получите статический общедоступный 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-адресом

  1. Убедитесь, что удостоверение кластера, используемое кластером AKS, имеет делегированные разрешения группе ресурсов общедоступного IP-адреса с помощью az role assignment create команды.

    CLIENT_ID=$(az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query identity.principalId -o tsv)
    RG_SCOPE=$(az group show --name <node resource group> --query id -o tsv)
    az role assignment create \
        --assignee ${CLIENT_ID} \
        --role "Network Contributor" \
        --scope ${RG_SCOPE}
    

    Внимание

    Если вы настроили исходящий IP-адрес, убедитесь, что удостоверение кластера имеет разрешения как на исходящий общедоступный IP-адрес, так и на входящий общедоступный IP-адрес.

  2. Создайте файл с именем 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 и настоятельно рекомендуется избежать потенциального регулирования.

  3. Задайте общедоступную метку 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
    
  4. Создайте службу и развертывание с помощью kubectl apply команды.

    kubectl apply -f load-balancer-service.yaml
    
  5. Чтобы просмотреть метку 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" с надстройкой маршрутизации приложений.