Configuración del controlador de entrada NGINX para que admita la zona DNS privada de Azure con el complemento de enrutamiento de aplicaciones
En este artículo se muestra cómo configurar un controlador de entrada NGINX para que funcione con el equilibrador de carga interno de Azure y cómo configurar una zona DNS privada de Azure para habilitar la resolución de DNS de los puntos de conexión privados y resolver dominios específicos.
- Un clúster de AKS con el complemento de enrutamiento de aplicaciones.
- Para asociar una zona DNS privada de Azure, necesita el rol Propietario, Administrador de cuentas de Azure o Coadministrador de Azure en la suscripción de Azure.
Para conectarse al clúster de Kubernetes desde su equipo local, use kubectl
, el cliente de la línea de comandos de Kubernetes. Lo puede instalar localmente. Para ello debe usar el comando az aks install-cli. Si usa Azure Cloud Shell, kubectl
ya está instalado.
En el ejemplo siguiente se configura la conexión al clúster denominado myAKSCluster en myResourceGroup mediante el comando az aks get-credentials
.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Para publicar una zona DNS privada en la red virtual, tiene que especificar la lista de redes virtuales que pueden resolver registros en ella. Estos se denominan vínculos de red virtual.
En el ejemplo siguiente se crea una red virtual denominada myAzureVNet en el grupo de recursos myResourceGroup y una subred denominada mySubnet para crear dentro de la red virtual con un prefijo de dirección específico.
az network vnet create \
--name myAzureVNet \
--resource-group myResourceGroup \
--location eastus \
--address-prefix 10.2.0.0/16 \
--subnet-name mysubnet \
--subnet-prefixes 10.2.0.0/24
Oharra
Puede configurar el complemento de enrutamiento de aplicaciones para crear registros automáticamente en una o varias zonas DNS globales y privadas de Azure para los hosts definidos en los recursos de entrada. Todas las zonas DNS globales y privadas de Azure deben estar en el mismo grupo de recursos.
Cree una zona DNS mediante el comando az network private-dns zone create, especificando el nombre de la zona y el grupo de recursos en el que se va a crear. En el ejemplo siguiente, se crea una zona DNS llamada private.contoso.com en el grupo de recursos MyResourceGroup.
az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com
Puede crear un vínculo de red virtual a la zona DNS que creó anteriormente con el comando az network private-dns link vnet create. En el ejemplo siguiente se crea un vínculo denominado myDNSLink a la zona private.contoso.com de la red virtual myAzureVNet. Incluya el parámetro --registration-enabled
para especificar que el vínculo no está habilitado para el registro.
az network private-dns link vnet create --resource-group myResourceGroup \
--name myDNSLink \
--zone-name private.contoso.com \
--virtual-network myAzureVNet \
--registration-enabled false
La característica de registro automático de zonas privadas de Azure DNS administra registros DNS para las máquinas virtuales implementadas en una red virtual. Al vincular una red virtual que tiene una zona DNS privada con esta configuración habilitada, se crea un registro DNS para cada máquina virtual de Azure del nodo de AKS implementado en la red virtual.
Oharra
El comando az aks approuting zone add
usa los permisos del usuario que ejecuta el comando para crear la asignación de roles zona de Azure DNS. El rol Colaborador de zona DNS privada es un rol integrado para administrar recursos DNS privados que se asigna a la identidad administrada del complemento. Para obtener más información sobre las identidades administradas de AKS, consulte Resumen de identidades administradas.
Recupere el id. de recurso de la zona DNS mediante el comando
az network dns zone show
y establezca la salida en una variable denominadaZONEID
. En el ejemplo siguiente, se consulta la zona private.contoso.com en el grupo de recursos MyResourceGroup.ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
Actualice el complemento para habilitar la integración con Azure DNS mediante el comando
az aks approuting zone
. Puede pasar una lista separada por comas de identificadores de recursos de zona DNS. En el ejemplo siguiente se actualiza el clúster de AKS myAKSCluster en el grupo de recursos myResourceGroup.az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
Creación de un controlador de entrada NGINX con una dirección IP privada y un equilibrador de carga interno
El complemento de enrutamiento de aplicaciones usa una definición de recursos personalizados (CRD) de Kubernetes denominada NginxIngressController
para configurar controladores de entrada NGINX. Puede crear más controladores de entrada o modificar la configuración existente.
La CRD NginxIngressController
tiene un campo loadBalancerAnnotations
para controlar el comportamiento del servicio del controlador de entrada NGINX al establecer anotaciones del equilibrador de carga.
Realice los pasos siguientes para crear un controlador de entrada NGINX con una instancia interna de Azure Load Balancer con una dirección IP privada.
Copie el siguiente manifiesto YAML en un nuevo archivo denominado nginx-internal-controller.yaml y guarde el archivo en el equipo local.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-internal spec: ingressClassName: nginx-internal controllerNamePrefix: nginx-internal loadBalancerAnnotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Cree los recursos del controlador de entrada NGINX mediante el comando
kubectl apply
.kubectl apply -f nginx-internal-controller.yaml
En la siguiente salida de ejemplo se muestran los recursos creados:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Comprobación de que se creó el controlador de entrada
Puede comprobar el estado del controlador de entrada NGINX mediante el comando
kubectl get nginxingresscontroller
.kubectl get nginxingresscontroller
En la siguiente salida de ejemplo se muestra el recurso creado. El controlador puede tardar unos minutos en estar disponible:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE default webapprouting.kubernetes.azure.com nginx True nginx-internal nginx-internal nginx-internal True
El complemento de enrutamiento de aplicaciones usa anotaciones en objetos de entrada de Kubernetes para crear los recursos adecuados.
Cree el espacio de nombres de una aplicación llamado
hello-web-app-routing
para ejecutar los pods de ejemplo mediante el comandokubectl create namespace
.kubectl create namespace hello-web-app-routing
Cree la implementación copiando el siguiente manifiesto YAML en un nuevo archivo denominado deployment.yaml y guarde el archivo en el equipo local.
apiVersion: apps/v1 kind: Deployment metadata: name: aks-helloworld namespace: hello-web-app-routing spec: replicas: 1 selector: matchLabels: app: aks-helloworld template: metadata: labels: app: aks-helloworld spec: containers: - name: aks-helloworld image: mcr.microsoft.com/azuredocs/aks-helloworld:v1 ports: - containerPort: 80 env: - name: TITLE value: "Welcome to Azure Kubernetes Service (AKS)"
Cree el servicio copiando el siguiente manifiesto YAML en un nuevo archivo denominado service.yaml y guarde el archivo en el equipo local.
apiVersion: v1 kind: Service metadata: name: aks-helloworld namespace: hello-web-app-routing spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld
Cree los recursos del clúster mediante el comando
kubectl apply
.kubectl apply -f deployment.yaml -n hello-web-app-routing
En la siguiente salida de ejemplo se muestran los recursos creados:
deployment.apps/aks-helloworld created created
kubectl apply -f service.yaml -n hello-web-app-routing
En la siguiente salida de ejemplo se muestran los recursos creados:
service/aks-helloworld created created
Cree el recurso de entrada que usa un nombre de host en la zona DNS privada de Azure y una dirección IP privada.
Copie el siguiente manifiesto YAML en un nuevo archivo denominado ingress.yaml y guarde el archivo en el equipo local.
Actualice
<Hostname>
con el nombre del host DNS, por ejemplo,helloworld.private.contoso.com
. Compruebe que está especificandonginx-internal
para el valoringressClassName
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: nginx-internal rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix
Cree los recursos del clúster mediante el comando
kubectl apply
.kubectl apply -f ingress.yaml -n hello-web-app-routing
En la siguiente salida de ejemplo se muestran los recursos creados:
ingress.networking.k8s.io/aks-helloworld created
Compruebe que la entrada administrada se ha creado con el comando kubectl get ingress
.
kubectl get ingress -n hello-web-app-routing
En la siguiente salida de ejemplo se muestra la entrada administrada creada:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld nginx-internal helloworld.private.contoso.com 10.224.0.7 80 98s
En unos minutos, ejecute el comando az network private-dns record-set a list para ver los registros A de la zona DNS privada de Azure. Especifique el nombre del grupo de recursos y el nombre de la zona DNS. En este ejemplo, el grupo de recursos es myResourceGroup y la zona DNS es private.contoso.com.
az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com
En la siguiente salida de ejemplo se muestra el registro creado:
[
{
"aRecords": [
{
"ipv4Address": "10.224.0.7"
}
],
"etag": "188f0ce5-90e3-49e6-a479-9e4053f21965",
"fqdn": "helloworld.private.contoso.com.",
"id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/helloworld",
"isAutoRegistered": false,
"name": "helloworld",
"resourceGroup": "foo",
"ttl": 300,
"type": "Microsoft.Network/privateDnsZones/A"
}
]
En caso de que necesite otra información de configuración relacionada con el cifrado SSL, otro controlador de entrada NGINX y la configuración del recurso de entrada, revise Configuración de DNS y SSL y Configuración del complemento de enrutamiento de aplicaciones.
Azure Kubernetes Service oharrak
Azure Kubernetes Service iturburu irekiko proiektu bat da. Hautatu esteka bat oharrak bidaltzeko: