Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете создать и использовать внутреннюю подсистему балансировки нагрузки, чтобы ограничить доступ к приложениям в службе Azure Kubernetes (AKS). Внутренняя подсистема балансировки нагрузки не имеет общедоступного IP-адреса и делает службу Kubernetes доступной только для приложений, которые могут достичь частного IP-адреса. Эти приложения могут находиться в одной виртуальной сети или в другой виртуальной сети через пиринг между виртуальными сетями. В этой статье показано, как создать и использовать внутреннюю подсистему балансировки нагрузки с AKS.
Important
Начиная с 30 сентября 2025 г. служба Azure Kubernetes (AKS) больше не поддерживает базовую подсистему балансировки нагрузки. Чтобы избежать потенциальных сбоев служб, мы рекомендуем использовать Standard Load Balancer для новых развертываний и обновления существующих развертываний до Standard Load Balancer. Дополнительные сведения об этом устаревании см. в вопросе устаревания на GitHub и объявлении об устаревании обновлений Azure. Чтобы оставаться в курсе объявлений и обновлений, следуйте заметкам о выпуске AKS.
Перед тем как начать
- В этой статье предполагается, что у вас есть кластер AKS. Если вам нужен кластер AKS, можно создать его с помощью Azure CLI, Azure PowerShell или портал Azure.
- Вам потребуется Azure CLI версии 2.0.59 или более поздней. Чтобы узнать версию, выполните команду
az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI". - Если вы хотите использовать существующую подсеть или группу ресурсов, удостоверение кластера AKS должно иметь разрешение на управление сетевыми ресурсами. Дополнительные сведения см. в статье "Настройка сети Azure CNI" в AKS. Если вы настраиваете балансировщик нагрузки для использования IP-адреса в другой подсети, убедитесь, что удостоверение кластера AKS также имеет
Readдоступ к этой подсети.- Дополнительные сведения о разрешениях см. в статье "Делегирование доступа AKS к другим ресурсам Azure".
Создание внутреннего балансировщика нагрузки
Создайте манифест сервиса с именем
internal-lb.yaml, укажите тип службыLoadBalancerи аннотациюazure-load-balancer-internal.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-appРазверните внутреннюю подсистему балансировки нагрузки с помощью
kubectl applyкоманды. Эта команда создает подсистему балансировки нагрузки Azure в группе ресурсов узла, подключенной к той же виртуальной сети, что и кластер AKS.kubectl apply -f internal-lb.yamlПросмотрите сведения о службе с помощью
kubectl get serviceкоманды.kubectl get service internal-appIP-адрес внутренней подсистемы балансировки нагрузки показан в столбце
EXTERNAL-IP, как показано в следующем примере выходных данных. В этом контексте внешний интерфейс относится к внешнему интерфейсу балансировщика нагрузки. Это не означает, что он получает общедоступный, внешний IP-адрес. Этот IP-адрес динамически назначается из той же подсети, что и кластер AKS.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
Указание IP-адреса
При указании IP-адреса подсистемы балансировки нагрузки указанный IP-адрес должен находиться в той же виртуальной сети, что и кластер AKS, но он еще не может быть назначен другому ресурсу в виртуальной сети. Например, не следует использовать IP-адрес в диапазоне, указанном для подсети Kubernetes в кластере AKS. Использование IP-адреса, который уже назначен другому ресурсу в той же виртуальной сети, может вызвать проблемы с подсистемой балансировки нагрузки.
Для получения подсетей в вашей виртуальной сети можно использовать команду az network vnet subnet list Azure CLI или командлет Get-AzVirtualNetworkSubnetConfig PowerShell.
Дополнительные сведения о подсетях см. в статье "Добавление пула узлов с уникальной подсетью".
Если вы хотите использовать определенный IP-адрес с подсистемой балансировки нагрузки, у вас есть два варианта: задать заметки службы или добавить свойство LoadBalancerIP в манифест YAML подсистемы балансировки нагрузки.
Important
Добавление свойства LoadBalancerIP в манифесте YAML балансировщика нагрузки устарело после основного проекта Kubernetes. Хотя текущее использование остается прежним, и ожидается, что существующие сервисы будут работать без изменений, мы настоятельно рекомендуем задавать аннотации сервиса. Дополнительные сведения об аннотациях службы см. в разделе поддерживаемые аннотации Azure LoadBalancer.
- Установить аннотации службы
- Добавление свойства LoadBalancerIP в манифест YAML подсистемы балансировки нагрузки
Задайте заметки службы, использующие
service.beta.kubernetes.io/azure-load-balancer-ipv4для IPv4-адреса иservice.beta.kubernetes.io/azure-load-balancer-ipv6для IPv6-адреса.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25 service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Просмотрите сведения о службе с помощью
kubectl get serviceкоманды.kubectl get service internal-appIP-адрес в столбце
EXTERNAL-IPдолжен отражать указанный IP-адрес, как показано в следующем примере выходных данных:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
Дополнительные сведения о настройке подсистемы балансировки нагрузки в другой подсети см. в разделе "Указание другой подсети".
Подключение службы Приватного канала Azure к внутренней подсистеме балансировки нагрузки
Перед тем как начать
- Вам потребуется Kubernetes версии 1.22.x или более поздней.
- Вам нужна существующая группа ресурсов с виртуальной сетью и подсетью. Эта группа ресурсов позволяет создать частную конечную точку. Если у вас нет этих ресурсов, см. статью "Создание виртуальной сети и подсети".
Создайте соединение через службу Private Link
Создайте манифест службы с именем
internal-lb-pls.yamlи типом службыLoadBalancerс аннотациямиazure-load-balancer-internalиazure-pls-create. Дополнительные варианты см. в дизайнерском документе Интеграция службы Приватной связи Azure.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-pls-create: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-appРазверните внутреннюю подсистему балансировки нагрузки с помощью
kubectl applyкоманды. Эта команда создает подсистему балансировки нагрузки Azure в группе ресурсов узла, подключенной к той же виртуальной сети, что и кластер AKS. Он также создает объект службы приватного канала, который подключается к интерфейсной IP-конфигурации подсистемы балансировки нагрузки, связанной со службой Kubernetes.kubectl apply -f internal-lb-pls.yamlПросмотрите сведения о службе с помощью
kubectl get serviceкоманды.kubectl get service internal-appIP-адрес внутренней подсистемы балансировки нагрузки показан в столбце
EXTERNAL-IP, как показано в следующем примере выходных данных. В этом контексте внешний интерфейс относится к внешнему интерфейсу балансировщика нагрузки. Это не означает, что он получает общедоступный, внешний IP-адрес.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64mПросмотрите сведения об объекте службы приватного подключения
az network private-link-service listс помощью команды.# Create a variable for the node resource group AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv) # View the details of the Private Link Service object az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o tableВаш результат должен быть похож на следующий пример результата:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Создание частной конечной точки для службы Private Link
Частная конечная точка позволяет приватно подключаться к объекту службы Kubernetes через созданную службу приватного канала.
Создайте частную конечную точку
az network private-endpoint createс помощью команды.# Create a variable for the private link service AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv) # Create the private endpoint $ az network private-endpoint create \ -g myOtherResourceGroup \ --name myAKSServicePE \ --vnet-name myOtherVNET \ --subnet pe-subnet \ --private-connection-resource-id $AKS_PLS_ID \ --connection-name connectToMyK8sService
Настройки PLS с помощью заметок
Для настройки ресурса PLS можно использовать следующие заметки:
| Annotation | Value | Description | Required | Default |
|---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Логическое значение, указывающее, требуется ли создать PLS. | Required | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
Строка, указывающая имя создаваемого ресурса PLS. | Optional | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
Строка, указывающая имя группы ресурсов, в которой создается ресурс PLS | Optional | MC_ resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
Строка, указывающая на подсеть, в которую развертывается PLS. Эта подсеть должна существовать в той же виртуальной сети, что и внутренний пул. IP-адреса NAT PLS выделяются в этой подсети. | Optional | Если service.beta.kubernetes.io/azure-load-balancer-internal-subnet, используется эта подсеть ILB. В противном случае используется подсеть по умолчанию из файла конфигурации. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Общее количество выделенных частных IP-адресов NAT. | Optional | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
Разделенный пробелом список статических IP-адресов IPv4 , которые необходимо выделить. (IPv6 сейчас не поддерживается.) Общее число IP-адресов не должно превышать число IP-адресов, указанное в service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count. Если указано меньше IP-адресов, остальные динамически выделяются. Первый IP-адрес в списке задается как Primary. |
Optional | Все IP-адреса динамически выделяются. |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" или "false" |
Логическое значение, указывающее, следует ли включить протокол TCP PROXY в PLS для передачи сведений о подключении, включая идентификатор ссылки и исходный IP-адрес. Серверная служба должна поддерживать протокол PROXY или подключения завершается ошибкой. | Optional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" или "*" |
Разделенный пробелом список идентификаторов подписок Azure, для которых служба частного подключения видима. Используйте "*", чтобы предоставить PLS всем подчинённым (с наименьшими ограничениями). |
Optional | Пустой список [], указывающий на управление доступом только на основе ролей: эта частная служба доступна только пользователям с разрешениями на управление доступом на основе ролей в вашем каталоге. (Наиболее строгий) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Разделенный пробелом список идентификаторов подписок Azure. Это позволяет автоматически утверждать запросы на подключение PE из подписок, перечисленных в PLS. Это работает только в том случае, если для параметра видимости задано "*"значение . |
Optional | [] |
Использование частных сетей
При создании кластера AKS можно указать дополнительные параметры сети. Эти параметры позволяют развернуть кластер в существующей виртуальной сети Azure и подсетях. Например, можно развернуть кластер AKS в частной сети, подключенной к локальной среде, и запускать службы, доступные только внутри организации.
Дополнительные сведения см. в статье о настройке собственных подсетей виртуальной сети с помощью Kubenet или Azure CNI.
Вам не нужно вносить изменения в предыдущие шаги, чтобы развернуть внутреннюю подсистему балансировки нагрузки, использующую частную сеть в кластере AKS. Подсистема балансировки нагрузки создается в той же группе ресурсов, что и кластер AKS, но вместо этого она подключена к частной виртуальной сети и подсети, как показано в следующем примере:
$ kubectl get service internal-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.1.15.188 10.0.0.35 80:31669/TCP 1m
Note
Удостоверение кластера, используемое кластером AKS, должно иметь по крайней мере роль участника сети в ресурсе виртуальной сети. Вы можете просмотреть идентификатор кластера с помощью команды az aks show, например az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". Роль участника сети можно назначить с помощью az role assignment create команды, например az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".
Если вы хотите определить пользовательскую роль вместо этого, вам потребуется следующее разрешение:
Microsoft.Network/virtualNetworks/subnets/join/actionMicrosoft.Network/virtualNetworks/subnets/read
Дополнительные сведения см. в разделе "Добавление, изменение" или удаление подсети виртуальной сети.
Указание другой подсети
Добавьте заметку
azure-load-balancer-internal-subnetв службу, чтобы указать подсеть для подсистемы балансировки нагрузки. Указанная подсеть должна находиться в той же виртуальной сети, что и кластер AKS. При развертывании адрес подсистемыEXTERNAL-IPбалансировки нагрузки является частью указанной подсети.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Удаление подсистемы балансировки нагрузки
Подсистема балансировки нагрузки удаляется при удалении всех служб.
Как и в случае с любым ресурсом Kubernetes, вы можете напрямую удалить службу, например kubectl delete service internal-app, которая также удаляет базовую подсистему балансировки нагрузки Azure.
Дальнейшие шаги
Дополнительные сведения о службах Kubernetes см. в документации по службам Kubernetes.