Compartir a través de


Creación de un clúster de Azure Kubernetes Service (AKS) aislado de red

Las organizaciones suelen tener estrictos requisitos de seguridad y cumplimiento para regular el tráfico de red de salida (saliente) desde un clúster para eliminar riesgos de filtración de datos. De forma predeterminada, los clústeres estándar de SKU de Azure Kubernetes Service (AKS) tienen acceso a Internet saliente sin restricciones. Este nivel de acceso a la red permite que los nodos y servicios que ejecuta accedan a recursos externos según sea necesario. Si desea restringir el tráfico de salida, es necesario el acceso a un número limitado de puertos y direcciones para mantener las tareas de mantenimiento del clúster en buen estado. En el documento conceptual sobre las reglas de FQDN y de red de salida para clústeres de AKS se proporciona una lista de los puntos de conexión necesarios para el clúster de AKS y sus complementos y características opcionales.

Una solución común para restringir el tráfico saliente del clúster es usar un dispositivo de firewall para restringir el tráfico en función de las reglas de firewall. El firewall es aplicable cuando la aplicación requiere acceso saliente, pero cuando se deben inspeccionar y proteger las solicitudes salientes. La configuración manual de un firewall con reglas de salida necesarias y FQDN es un proceso complicado, especialmente si el único requisito es crear un clúster de AKS aislado sin dependencias salientes para el arranque del clúster.

Para reducir el riesgo de filtración de datos, el clúster aislado de red permite arrancar el clúster de AKS sin dependencias de red salientes, incluso para capturar componentes o imágenes del clúster de Microsoft Artifact Registry (MAR). El operador de clúster podría configurar incrementalmente el tráfico saliente permitido para cada escenario que quiera habilitar. En este artículo se describen los pasos para crear un clúster aislado de red.

Antes de empezar

  • Lea la introducción conceptual de esta característica, que proporciona una explicación de cómo funcionan los clústeres aislados de red. En el artículo de información general también:
    • Explica dos opciones para el recurso de Azure Container Registry (ACR) privado que se usa para el arranque del clúster: ACR administrado por AKS o bring-your-own ACR.
    • Explica dos modos privados de clúster para crear acceso privado al servidor de API: basado en vínculo privado o integración con Vnet del servidor de API.
    • Explica los dos tipos de salida para el control de egreso del clúster: none o block (versión preliminar).
    • Describe las limitaciones actuales de los clústeres aislados de red.

Nota:

El tipo de salida none está disponible con carácter general. El tipo de salida block está en versión preliminar.

Importante

Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

  • En este artículo se requiere la versión 2.71.0 o posterior de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada allí la versión más reciente.
  • Debe instalar la versión aks-preview9.0.0b2 o posterior de la extensión CLI de Azureblock si utiliza el tipo de salida (versión preliminar).
    • Si aún no tiene la aks-preview extensión, instálela mediante el az extension add comando.
      az extension add --name aks-preview
      
    • Si ya tiene la aks-preview extensión, actualícela para asegurarse de que tiene la versión más reciente mediante el az extension update comando.
      az extension update --name aks-preview
      
  • Los clústeres aislados de red se admiten en clústeres de AKS mediante Kubernetes versión 1.30 o posterior.
  • Si elige usar la opción Bring your own (BYO) Azure Container Registry (ACR), debe asegurarse de que ACR es el nivel de servicio de SKU Premium.
  • Si usa un clúster aislado de red configurado con la integración con red virtual de API Server, debe seguir los requisitos previos e instrucciones de este documento.

Implementación de un clúster aislado de red con ACR administrado por AKS

AKS crea, administra y reconcilia un recurso de ACR en esta opción. No es necesario asignar permisos ni administrar el ACR. AKS administra las reglas de caché, el vínculo privado y el punto de conexión privado que se usan en el clúster aislado de red.

Creación de un clúster aislado de red

Al crear un clúster de AKS aislado de red, puede elegir uno de los siguientes modos de clúster privado: basado en vínculo privado o integración del servidor de API con Vnet.

Independientemente del modo que seleccione, debe establecer los parámetros --bootstrap-artifact-source y --outbound-type.

--bootstrap-artifact-source se puede establecer en Direct o Cache correspondiendo al uso de MAR directo (no aislado de red) y ACR privado (aislado de red) para la extracción de imágenes respectivamente.

--outbound-type parameter se puede establecer en none o block (versión preliminar). Si el tipo de salida se establece en none, AKS no configura ninguna conexión saliente para el clúster, lo que permite al usuario configurarlas personalmente. Si el tipo de salida se establece en block, se bloquean todas las conexiones salientes.

Cree un clúster de red aislada basada en vínculos privados mediante la ejecución del comando az aks create con los parámetros --bootstrap-artifact-source, --enable-private-cluster y --outbound-type.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}   --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none  --network-plugin azure --enable-private-cluster

Integración con red virtual de un servidor de API

Cree un clúster de AKS aislado de red configurado con la integración con red virtual del servidor de API ejecutando el comando az aks create con los parámetros --bootstrap-artifact-source, --enable-private-cluster, --enable-apiserver-vnet-integration y --outbound-type.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration

Actualización de un clúster de AKS existente al tipo aislado de red

Si prefiere habilitar el aislamiento de red en un clúster de AKS existente en lugar de crear un nuevo clúster, use el comando az aks update.

Para habilitar la característica aislada de red en un clúster de AKS existente, ejecute primero el siguiente comando para actualizar bootstrap-artifact-source:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache  

A continuación, debe volver a crear una imagen manual de todos los grupos de nodos existente:

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Nota:

Debe asegurarse de que el saliente existe hasta que se complete la primera imagen de nuevo. Para comprobar si se completa la imagen de nuevo, ejecute:

NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done

Espere y asegúrese de que se completa la imagen de imagen y, a continuación, ejecute el siguiente comando para actualizar outbound-type:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none

Tenga en cuenta que debe volver a crear una imagen manual de todos los grupos de nodos existentes de nuevo:

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Recuerde cambiar la imagen de los grupos de nodos del clúster después de habilitar el modo de aislamiento de red para un clúster existente. De lo contrario, la característica no surtirá efecto para el clúster.

Implementación de un clúster aislado de red con BYO ACR

AKS admite la incorporación de su propio ACR (BYO ACR). Para admitir el escenario de BYO ACR, debe configurar un punto de conexión privado de ACR y una zona DNS privada antes de crear el clúster de AKS.

Los pasos siguientes muestran cómo preparar estos recursos:

  • Red virtual personalizada y subredes para AKS y ACR.
  • ACR, regla de caché de ACR, punto de conexión privado y zona DNS privada.
  • Identidad del plano de control personalizado e identidad de kubelet.

Paso 1: Crear la red virtual y las subredes

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az network vnet create  --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16

az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24 

SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)

az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled

Paso 2: Deshabilitar la conectividad saliente de red virtual (opcional)

Hay varias maneras de deshabilitar la conectividad saliente de la red virtual.

Paso 3: Crear el ACR y habilitación de la caché de artefactos

  1. Cree el ACR con el vínculo privado.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Cree una regla de caché de ACR siguiendo el siguiente comando para permitir a los usuarios almacenar en caché imágenes de contenedor y archivos binarios MAR en el nuevo ACR; tenga en cuenta que el nombre de la regla de caché y los nombres de repositorio deben estar estrictamente alineados con la guía siguiente.

    az acr cache create -n aks-managed-mcr -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "aks-managed-repository/*"
    

Nota:

Con BYO ACR, es su responsabilidad asegurarse de que la regla de caché de ACR se crea y mantiene correctamente como se indicó anteriormente. Este paso es fundamental para la creación, el funcionamiento y la actualización del clúster. Esta regla de caché NO debe modificarse.

Paso 4: Crear un punto de conexión privado para ACR

az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection

NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)

REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)

Paso 5: Crear una zona DNS privada y agregar registros

Cree una zona DNS privada denominada privatelink.azurecr.io. Agregue los registros del punto de conexión REST del registro {REGISTRY_NAME}.azurecr.io y el punto de conexión de datos del registro {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io.

az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"

az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false

az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}

az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}

Paso 6: Crear identidades del plano de control y de kubelet

Identidad del plano de control

az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Identidad de kubelet

az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Concesión de permisos AcrPull para la identidad de kubelet

az role assignment create --role AcrPull --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Después de configurar estos recursos, puede continuar con la creación del clúster de AKS aislado de red con BYO ACR.

Paso 7: Creación de un clúster aislado de red mediante BYO ACR

Al crear un clúster aislado de red, puede elegir uno de los siguientes modos de clúster privado: integración con Vnet del servidor de API o basado en vínculo privado.

Independientemente del modo que seleccione, debe establecer los parámetros --bootstrap-artifact-source y --outbound-type.

--bootstrap-artifact-source se puede establecer en Direct o Cache correspondientes al uso directo del Registro de artefactos Microsoft (MAR) (NO aislado de red) y ACR privado (aislado de red) para las extracción de imágenes, respectivamente.

--outbound-type parameter se puede establecer en none o block (versión preliminar). Si el tipo de salida se establece en none, AKS no configura ninguna conexión saliente para el clúster, lo que permite al usuario configurarlas personalmente. Si el tipo de salida se establece en block, se bloquean todas las conexiones salientes.

Cree un clúster aislado de red basado en vínculo privado que acceda a ACR mediante la ejecución del comando az aks create con los parámetros necesarios.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster

Integración con red virtual de un servidor de API

En el caso de un clúster aislado de red configurado con la integración de red virtual del servidor de API, cree primero una subred y asigne el rol correcto con los siguientes comandos:

az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24

export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Cree un clúster de aislado de red configurado con la integración con red virtual del servidor de API y acceda a ACR mediante la ejecución del comando az aks create con los parámetros necesarios.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

Actualización de un clúster de AKS ya existente

Si prefiere habilitar el aislamiento de red en un clúster de AKS existente en lugar de crear un nuevo clúster, use el comando az aks update.

Al crear el punto de conexión privado y la zona DNS privada para BYO ACR, use la red virtual y las subredes existentes del clúster de AKS existente. Al asignar el permiso AcrPull a la identidad de kubelet, use la identidad de kubelet existente del clúster de AKS existente.

Para habilitar la característica aislada de red en un clúster de AKS existente, ejecute primero el siguiente comando para actualizar bootstrap-artifact-source:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} 

A continuación, debe volver a crear una imagen manual de todos los grupos de nodos existente:

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Nota:

Debe asegurarse de que el saliente existe hasta que se complete la primera imagen de nuevo. Para comprobar si se completa la imagen de nuevo, ejecute:

NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done

Espere y asegúrese de que se completa la imagen de imagen y, a continuación, ejecute el siguiente comando para actualizar outbound-type:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none

Tenga en cuenta que debe volver a crear una imagen manual de todos los grupos de nodos existentes de nuevo:

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Recuerde cambiar la imagen de los grupos de nodos del clúster después de habilitar la característica de clúster aislado de red. De lo contrario, la característica no surtirá efecto para el clúster.

Actualización del identificador de ACR

Es posible actualizar el ACR privado que se usa con un clúster aislado de red. Para identificar el identificador de recurso de ACR, use el comando az aks show.

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

Para actualizar el identificador de ACR, ejecute el comando az aks update con los parámetros --bootstrap-artifact-source y --bootstrap-container-registry-resource-id.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <New BYO ACR resource ID>

Al actualizar el identificador de ACR en un clúster existente, debe volver a crear una imagen manual de todos los nodos existentes.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Recuerde cambiar la imagen de los grupos de nodos del clúster después de habilitar la característica de clúster aislado de red. De lo contrario, la característica no surtirá efecto para el clúster.

Validación de que el clúster aislado de red está habilitado

Para validar que la característica de clúster aislado de red está habilitada, use el comando az aks show

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

En la salida siguiente se muestra que la característica está habilitada, en función de los valores de la propiedad outboundType (ninguno o bloqueado) y la propiedad artifactSource (almacenado en caché).

"kubernetesVersion": "1.30.3",
"name": "myAKSCluster"
"type": "Microsoft.ContainerService/ManagedClusters"
"properties": {
  ...
  "networkProfile": {
    ...
    "outboundType": "none",
    ...
  },
  ...
  "bootstrapProfile": {
    "artifactSource": "Cache",
    "containerRegistryId": "/subscriptions/my-subscription-id/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
  },
  ...
}

Deshabilitación del clúster aislado de red

Deshabilite la característica de clúster aislado de red ejecutando el comando az aks update con los parámetros --bootstrap-artifact-source y --outbound-type.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer

Al deshabilitar la característica en un clúster existente, debe volver a crear una imagen manual de todos los nodos existentes.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Importante

Recuerde cambiar la imagen de los grupos de nodos del clúster después de deshabilitar la característica de clúster aislado de red. De lo contrario, la característica no surtirá efecto para el clúster.

Solución de problemas

Si tiene problemas, como errores en la extracción de imágenes, consulte Solución de problemas de clústeres de Azure Kubernetes Service (AKS) aislados de red.

Pasos siguientes

Si desea configurar la configuración de restricción de salida mediante Azure Firewall, visite Control del tráfico de salida mediante Azure Firewall en AKS.

Si quiere restringir cómo se comunican los pods entre sí y con las restricciones de tráfico horizontal de derecha a izquierda en el clúster, vea Protección del tráfico entre pods mediante directivas de red en AKS.