Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para restringir el acceso a las aplicaciones en Azure Kubernetes Service (AKS), puede crear y usar un equilibrador de carga interno. Un equilibrador de carga interno no dispone de dirección IP pública y hace que un servicio de Kubernetes sea accesible solo para las aplicaciones que pueden acceder a la dirección IP privada. Estas aplicaciones pueden estar dentro de la misma red virtual o en otra red virtual a través del emparejamiento de redes virtuales. En este artículo se muestra cómo crear y usar un equilibrador de carga interno con AKS.
Importante
A partir del 30 de septiembre de 2025, Azure Kubernetes Service (AKS) ya no admite Basic Load Balancer. Para evitar posibles interrupciones del servicio, se recomienda usar Standard Load Balancer para nuevas implementaciones y actualizar las implementaciones existentes a Standard Load Balancer. Para obtener más información sobre esta retirada, consulte la Incidencia sobre retirada de GitHub y el Anuncio de la retirada de las actualizaciones de Azure. Para mantenerse informado sobre los anuncios y actualizaciones, siga las notas de lanzamiento de AKS.
Antes de empezar
- En este artículo se supone que ya tiene un clúster de AKS. Si necesita un clúster de AKS, puede crear uno mediante la CLI de Azure, Azure PowerShell o Azure Portal.
- Es necesaria la versión 2.0.59 o posterior de la CLI de Azure. Ejecute
az --versionpara encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure. - Si quiere usar una subred o un grupo de recursos existentes, la identidad de clúster de AKS necesita permiso para administrar los recursos de red. Para más información, consulte Configuración de redes de Azure CNI en AKS. Si va a configurar el equilibrador de carga para usar una dirección IP en otra subred, asegúrese de que la identidad del clúster de AKS también tiene
Readacceso a esa subred.- Para más información sobre los permisos, consulte Delegación del acceso de AKS a otros recursos de Azure.
Creación de un conjunto de equilibrador de carga interno
Cree un manifiesto de servicio denominado
internal-lb.yamlcon el tipo de servicioLoadBalancery la anotaciónazure-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-appImplemente el equilibrador de carga interno mediante el comando
kubectl apply. Este comando crea un equilibrador de carga de Azure en el grupo de recursos del nodo, conectado a la misma red virtual que el clúster de AKS.kubectl apply -f internal-lb.yamlVea los detalles del servicio mediante el comando
kubectl get service.kubectl get service internal-appLa dirección IP del equilibrador de carga interno se muestra en la columna
EXTERNAL-IP, como se muestra en la salida del ejemplo siguiente. En este contexto, External hace referencia a la interfaz externa del equilibrador de carga. No significa que reciba una dirección IP pública y externa. Esta dirección IP se asigna dinámicamente desde la misma subred que el clúster de 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
Especificación de una dirección IP
Al especificar una dirección IP para el equilibrador de carga, la dirección IP debe estar disponible en la subred que usa el equilibrador de carga. De forma predeterminada, el equilibrador de carga usa la misma subred que el clúster de AKS. No use una dirección IP reservada Azure, una dirección IP ya asignada a otro recurso o una dirección IP del CIDR del servicio Kubernetes.
Puede usar el comando de la CLI de Azure az network vnet subnet list o el cmdlet de PowerShell Get-AzVirtualNetworkSubnetConfig para obtener las subredes de la red virtual.
Para obtener más información sobre las subredes, vea Incorporación de un grupo de nodos con una subred única.
Si quiere usar una dirección IP específica con el equilibrador de carga interno, tiene dos opciones: configurar las anotaciones de servicio o agregar la propiedad LoadBalancerIP al manifiesto YAML del equilibrador de carga.
Importante
La adición de la propiedad LoadBalancerIP al manifiesto YAML del equilibrador de carga está en desuso después de Kubernetes ascendente. Aunque se espera que el uso actual siga siendo el mismo y los servicios existentes funcionen sin modificaciones, se recomienda encarecidamente establecer anotaciones de servicio en su lugar. Para obtener más información sobre las anotaciones de servicio, consulte anotaciones admitidas de Azure Load Balancer.
- Configurar anotaciones de servicio
-
Adición de la
LoadBalancerIPpropiedad al manifiesto YAML del equilibrador de carga
Configure las anotaciones de servicio usando
service.beta.kubernetes.io/azure-load-balancer-ipv4para una dirección IPv4 yservice.beta.kubernetes.io/azure-load-balancer-ipv6para una dirección 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-appVea los detalles del servicio mediante el comando
kubectl get service.kubectl get service internal-appLa dirección IP de la columna
EXTERNAL-IPdebe reflejar la dirección IP especificada, como se muestra en la siguiente salida de ejemplo:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
Para obtener más información sobre cómo configurar el equilibrador de carga en una subred diferente, consulte Especificación de una subred diferente.
Conexión del servicio Azure Private Link a un equilibrador de carga interno de AKS
Requisitos del servicio Private Link
- El clúster debe ejecutar una versión de Kubernetes compatible en AKS.
- El clúster de AKS debe usar un Load Balancer estándar con el tipo de grupo de back-end
nodeIPConfiguration. Private Link Service no admite Load Balancer Basic ni el tipo de grupo de servidores back-end basado en IPnodeIP. Para obtener más información, consulte limitaciones del servicio Private Link. - Necesita un grupo de recursos existente con una red virtual y una subred. Este grupo de recursos es donde crea el punto de conexión privado. Si no tiene estos recursos, vea Creación de una red virtual y una subred.
Importante
Private Link Service tiene las restricciones siguientes:
- Private Link Service solo admite tráfico IPv4 y solo admite los protocolos de transporte TCP y UDP.
- Si el servicio usa
externalTrafficPolicy: Local, la subred del servicio Private Link debe ser diferente de la subred de pod. Para usar la misma subred, establezcaexternalTrafficPolicyenCluster. - Si habilita el protocolo PROXY y usa
externalTrafficPolicy: Local, debe configurar un sondeo de estado personalizado porque se produce un error en el sondeo de estado predeterminado.
Para obtener más información, consulte limitaciones del servicio Private Link y restricciones de integración del servicio Azure Private Link.
Creación de una conexión de servicio Private Link
Cree un manifiesto de servicio denominado
internal-lb-pls.yamlcon el tipo de servicioLoadBalancery las anotacionesazure-load-balancer-internalyazure-pls-create. Para obtener más opciones, consulte el documento de diseño Integración de servicio de Azure Private LinkapiVersion: 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-appImplemente el equilibrador de carga interno mediante el comando
kubectl apply. Este comando crea un equilibrador de carga de Azure en el grupo de recursos del nodo, conectado a la misma red virtual que el clúster de AKS. También crea un objeto Private Link Service que se conecta a la configuración ip de front-end del equilibrador de carga interno asociado al objeto de servicio de Kubernetes.kubectl apply -f internal-lb-pls.yamlVea los detalles del servicio mediante el comando
kubectl get service.kubectl get service internal-appLa dirección IP del equilibrador de carga interno se muestra en la columna
EXTERNAL-IP, como se muestra en la salida del ejemplo siguiente. En este contexto, External hace referencia a la interfaz externa del equilibrador de carga. No significa que reciba una dirección IP pública y externa.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64mVea los detalles del objeto de servicio de Private Link mediante el comando
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 tableEl resultado debería ser similar al ejemplo siguiente:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Creación de un punto de conexión privado en el servicio Private Link
Un punto de conexión privado permite conectarse de forma privada al objeto service de Kubernetes mediante el objeto Service de Private Link que se ha creado.
Cree el punto de conexión privado usando el comando az network private-endpoint create. Reemplace por pls-xyz el nombre del servicio Private Link devuelto en el paso anterior.
Establezca --resource-group en el grupo de recursos de destino en el que desea crear el punto de conexión privado. Establezca --vnet-name y --subnet en la red virtual y la subred que contienen el punto de conexión privado. Establezca --private-connection-resource-id en el identificador de recurso del servicio de Private Link recuperado en AKS_PLS_ID.
# Create variables for the Private Link Service
AKS_PLS_NAME=pls-xyz
AKS_PLS_ID=$(az network private-link-service show -g $AKS_MC_RG --name $AKS_PLS_NAME --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
personalizaciones del servicio Private Link mediante anotaciones
Puede utilizar las siguientes anotaciones para personalizar el recurso PLS:
| Anotación | Value | Descripción | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Booleano que indica si es necesario crear un PLS. | Obligatorio | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
Cadena que especifica el nombre del recurso PLS que se va a crear. | Opcional | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
Cadena que especifica el nombre del grupo de recursos donde se crea el recurso PLS. | Opcional | MC_resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
Cadena que indica la subred en la que se implementa el PLS. Esta subred debe existir en la misma red virtual que el grupo de back-end. Las direcciones IP NAT de PLS se asignan dentro de esta subred. | Opcional | Si service.beta.kubernetes.io/azure-load-balancer-internal-subnet, se usa esta subred ILB. De lo contrario, se usa la subred predeterminada del archivo de configuración. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Número total de direcciones IP NAT privadas que se van a asignar. | Opcional | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
Lista separada por espacios de direcciones IP de IPv4 estáticas que se van a asignar. (IPv6 no se admite ahora mismo). El número total de direcciones IP no debe ser mayor que el número de direcciones IP especificado en service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count. Si se especifican menos direcciones IP, el resto se asigna dinámicamente. La primera dirección IP de la lista se establece como Primary. |
Opcional | Todas las direcciones IP se asignan dinámicamente. |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
Lista separada por espacios de nombres de dominio completos asociados al PLS. | Opcional | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" o "false" |
Booleano que indica si el protocolo TCP PROXY debe estar habilitado en el PLS para pasar a través de la información de conexión, incluido el identificador de vínculo y la dirección IP de origen. El servicio back-end DEBE admitir el protocolo PROXY o se produce un error en la conexión. | Opcional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" o "*" |
Lista separada por espacios de identificadores de suscripción de Azure para los que el Servicio Private Link es visible. Use "*" para exponer el PLS a todos los subs (menos restrictivo). |
Opcional | Lista [] vacía que indica solo el control de acceso basado en rol: este servicio de Private Link solo está disponible para los usuarios con los permisos de RBAC Azure necesarios, incluidos los usuarios autorizados en todos los inquilinos. (Más restrictivo) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Una lista separada por espacios de identificadores de suscripción de Azure cuyas solicitudes de conexión de PE al PLS se aprueban automáticamente. La lista de aprobación automática debe ser un subconjunto de la lista de visibilidad. | Opcional | [] |
Uso de un equilibrador de carga interno con redes privadas
Al crear su clúster de AKS, puede especificar la configuración de red avanzada. Esta configuración permite implementar el clúster en una red y subredes virtuales de Azure existentes. Por ejemplo, puede implementar el clúster de AKS en una red privada conectada a su entorno local y ejecutar servicios que son solo accesibles internamente.
Para obtener más información, vea cómo configurar sus propias subredes de red virtual con Kubenet o Azure CNI.
No es necesario realizar ningún cambio en los pasos anteriores para implementar un equilibrador de carga interno que use una red privada en un clúster de AKS. El equilibrador de carga se crea en el grupo de recursos de nodo del clúster de AKS y se conecta a la red virtual privada y a la subred, como se muestra en el ejemplo siguiente:
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
Nota:
La identidad de clúster que usa el clúster de AKS al menos debe tener el rol de Colaborador de la red en el recurso de la red virtual. Puede ver la identidad del clúster mediante el comando az aks show, como az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". Puede asignar el rol Colaborador de red mediante el comando az role assignment create, como az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".
Si quiere definir un rol personalizado en su lugar, necesita los permisos siguientes:
Microsoft.Network/virtualNetworks/subnets/join/actionMicrosoft.Network/virtualNetworks/subnets/read
Para más información, consulte Agregar, cambiar o eliminar una subred de red virtual.
Especificación de una subred diferente
Agregue la anotación azure-load-balancer-internal-subnet al servicio para especificar una subred para el equilibrador de carga. La subred especificada debe estar en la misma red virtual que el clúster de AKS. Cuando se implementa, la dirección del equilibrador de carga EXTERNAL-IP forma parte de la subred especificada.
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
Establezca el valor de la anotación service.beta.kubernetes.io/azure-load-balancer-internal-subnet como cadena con el nombre de la subred, como "apps-subnet".
Eliminación del equilibrador de carga
El equilibrador de carga se elimina al eliminar todos sus servicios de Kubernetes.
Puede eliminar directamente un servicio del mismo modo que cualquier recurso de Kubernetes, como kubectl delete service internal-app, acción que también eliminará el equilibrador de carga de Azure subyacente.
Pasos siguientes
Más información sobre los servicios de Kubernetes en la documentación de servicios de Kubernetes.