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.
Cuando se crea un recurso de equilibrador de carga en un clúster de Azure Kubernetes Service (AKS), la dirección IP pública asignada a él solo es válida durante la duración de ese recurso. Si elimina el servicio de Kubernetes, el equilibrador de carga asociado y la dirección IP también se eliminan. Si quiere asignar una dirección IP específica o conservar una dirección IP para los servicios de Kubernetes reimplementados, puede crear y usar una dirección IP pública estática.
En este artículo se muestra cómo crear una dirección IP pública estática y asignarla al servicio de Kubernetes.
Antes de empezar
- Es preciso que esté instalada y configurada la versión 2.0.59 o posterior de la CLI de Azure, o cualquier otra posterior. Ejecute
az --versionpara encontrar la versión. Para la instalación o la actualización, consulte Instalación de la CLI de Azure. - En este artículo se describe el uso de una dirección IP de SKU Estándar con un equilibrador de carga de SKU Estándar. Para más información, consulte Tipos de direcciones IP y métodos de asignación en Azure.
Creación de un clúster de AKS
Cree un grupo de recursos de Azure con el comando
az group create.az group create --name myNetworkResourceGroup --location eastusCree un clúster de AKS mediante el
az aks createcomando .az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
Crear una dirección IP estática
Obtenga el nombre del grupo de recursos del nodo mediante el comando
az aks showy la consulta de la propiedadnodeResourceGroup.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsvCree una dirección IP pública estática en el grupo de recursos del nodo mediante el
az network public-ip createcomando .az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method staticImportante
AKS ya no admite Load Balancer Basic. Si el clúster usa un Load Balancer Básico, actualice a Standard Load Balancer antes de configurar una dirección IP pública estática.
Obtenga la dirección IP pública estática mediante el
az network public-ip showcomando . Especifique el nombre del grupo de recursos del nodo y la dirección IP pública que creó, y consulte elipAddress.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Creación de un servicio de Kubernetes con la dirección IP estática
Cree un archivo denominado
load-balancer-service.yamly copie en el contenido del siguiente archivo YAML. Proporcione el nombre del recurso de DIRECCIÓN IP pública (myAKSPublicIP) que creó en la sección Creación de una dirección IP estática y el nombre del grupo de recursos del nodo.La identidad del plano de control de AKS tiene permisos de colaborador en el grupo de recursos del nodo de forma predeterminada, por lo que la dirección IP pública que cree en este artículo no requiere otra asignación de roles. Si usa una dirección IP pública entrante o saliente en otro grupo de recursos, conceda a la identidad del plano de control los permisos necesarios en ese grupo de recursos. Para más información, consulte Identidades administradas en AKS.
Importante
La propiedad
loadBalancerIPde un manifiesto de servicio de Kubernetes ha quedado obsoleta, siguiendo a Kubernetes upstream. Los servicios existentes siguen funcionando sin modificaciones, pero usan anotaciones de servicio en su lugar.Anotación propósito service.beta.kubernetes.io/azure-pip-nameEspecifique el nombre del recurso de dirección IP pública. service.beta.kubernetes.io/azure-load-balancer-ipv4Especifique una dirección IPv4. service.beta.kubernetes.io/azure-load-balancer-ipv6Especifique una dirección 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-balancerNota:
Añadir la anotación
service.beta.kubernetes.io/azure-pip-namegarantiza la creación más eficiente del equilibrador de carga y es muy recomendable para evitar posibles problemas de limitación de velocidad.Establezca una etiqueta DNS orientada al público en el servicio mediante la anotación de servicio
service.beta.kubernetes.io/azure-dns-label-name. Esto publica un nombre de dominio completo (FQDN) para su servicio mediante los servidores DNS públicos y el dominio de nivel superior de Azure. El valor de la anotación debe ser único dentro de la ubicación de Azure, por lo que se recomienda usar una etiqueta suficientemente calificada. Azure anexa automáticamente un sufijo predeterminado en la ubicación seleccionada, como<location>.cloudapp.azure.com, al nombre que proporcione y crea el FQDN.Nota:
Si quiere publicar el servicio en su propio dominio, consulte Azure DNS y el proyecto external-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-balancerAntes de crear el servicio, asegúrese de que el clúster tenga una carga de trabajo con pods que usen la
app: azure-load-balanceretiqueta . El manifiesto de servicio selecciona pods con esta etiqueta, pero no crea una implementación.Cree el servicio mediante el
kubectl applycomando .kubectl apply -f load-balancer-service.yamlCompruebe que el servicio selecciona al menos un pod en ejecución y listo.
kubectl get pods -l app=azure-load-balancerPara ver la etiqueta DNS del equilibrador de carga, use el comando
kubectl describe:kubectl describe service azure-load-balancerLa etiqueta DNS se mostrará en
Annotations, como se muestra en la siguiente salida de ejemplo condensada:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
Solución de problemas
En esta sección se supone que ha completado la sección Creación de una dirección IP estática, ha intentado los pasos descritos en Creación de un servicio de Kubernetes con la dirección IP estática y tener un clúster de AKS en ejecución. Para recuperar el nombre del grupo de recursos del nodo, use az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv.
Si el recurso de dirección IP pública denominado en la service.beta.kubernetes.io/azure-pip-name anotación no existe en el grupo de recursos especificado por service.beta.kubernetes.io/azure-load-balancer-resource-groupo la identidad del plano de control de AKS no puede acceder a ese grupo de recursos, se produce un error en la creación del servicio del equilibrador de carga. Para solucionar problemas, revise las anotaciones de servicio y los eventos de creación mediante el kubectl describe comando . Indique el nombre del servicio especificado en el manifiesto de YAML, como se muestra en este ejemplo:
kubectl describe service azure-load-balancer
La salida le muestra información sobre el recurso de servicio de Kubernetes. En la salida del ejemplo siguiente se muestra un Warning en : Events"user supplied IP address was not found". En este escenario, asegúrese de que la azure-pip-name anotación coincide con el nombre del recurso de dirección IP pública estática y la azure-load-balancer-resource-group anotación coincide con el grupo de recursos que lo contiene.
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
Pasos siguientes
Para obtener más control sobre el tráfico de red a las aplicaciones, use el complemento de enrutamiento de aplicaciones para AKS. Para obtener más información sobre el complemento de enrutamiento de aplicaciones, consulte Entrada NGINX administrada con el complemento de enrutamiento de aplicaciones.