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.
Este tutorial le guía a través de la implementación de un clúster de Azure Kubernetes Service (AKS) privado en Azure Enclave. Cree un clúster de AKS totalmente privado con cifrado administrado por el cliente, integración de red y patrones de acceso seguro.
En este tutorial aprenderá a:
- Habilitación de las características de Azure necesarias para AKS privado
- Validación de los recursos necesarios para AKS
- Implementación de un clúster de AKS privado
- Configuración del cifrado de claves administradas por el cliente
- Creación de puntos de conexión de la comunidad para la conectividad de AKS
- Asociar varios grupos de recursos a una carga de trabajo de AKS
- Acceso al clúster de AKS y validación
Prerequisites
- Finalización de Tutorial 2-3: Implementar la carga de trabajo de Azure Virtual Desktop
- Enclave de AKS con subredes para nodos, servidor de la API y punto de conexión privado
- Dependencias comunes (Key Vault, identidad administrada, conjunto de cifrado de disco) del Tutorial 2-2: Creación de un entorno de enclave de Azure
- Zonas DNS privadas para AKS implementadas
- Rol de colaborador en el grupo de recursos de carga de trabajo de AKS
- Rol de Colaborador de Azure Kubernetes Service en la suscripción
- CLI de Azure o Azure PowerShell instalados para operaciones avanzadas
Importante
Este tutorial se alinea con el comportamiento de la plantilla de clúster de AKS privado y requiere los recursos creados por la implementación de enclave de AVE AKS en el tutorial 2-2.
Antes de empezar
Comprender AKS en Azure Enclave
AKS en Azure Enclave proporciona:
- Clúster totalmente privado: solo se puede acceder al servidor de API a través del punto de conexión privado.
- Aislamiento de red: todo el tráfico permanece dentro de los límites del enclave
- Cifrado administrado por el cliente: tanto el plano de control como el plano de datos cifrados con CMK
- Límites de carga de trabajo seguros: recursos de Kubernetes contenidos en las directivas de seguridad del enclave
Convenciones de nomenclatura de recursos
En este tutorial se usan nombres de ejemplo. Use la convención de nomenclatura de su organización:
- Enclave:
aks-enclave - Carga de trabajo:
aks-workload - Grupos de recursos:
rg-aks-cluster - Clúster de AKS:
aks-prod-01
Habilitación de las características de Azure necesarias
AKS en Azure Enclave requiere que se habiliten características de Azure específicas en la suscripción.
Habilitación de la característica EncryptionAtHost
Esta característica habilita el cifrado en el nivel de host de máquina virtual para los nodos de AKS.
# Register the feature
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
# Check registration status (may take 10-15 minutes)
az feature show --namespace Microsoft.Compute --name EncryptionAtHost
# Once registered, refresh the provider
az provider register --namespace Microsoft.Compute
Habilitación de la integración de red virtual de API Server (versión preliminar)
Esta característica permite que el servidor de API de AKS se integre directamente en la red virtual.
# Register the feature
az feature register --namespace Microsoft.ContainerService --name EnableAPIServerVnetIntegrationPreview
# Check registration status
az feature show --namespace Microsoft.ContainerService --name EnableAPIServerVnetIntegrationPreview
# Once registered, refresh the provider
az provider register --namespace Microsoft.ContainerService
Importante
Espere a que ambas características se muestren "state": "Registered" antes de continuar. El registro suele tardar entre 10 y 15 minutos.
Preparación de la clave SSH (opcional)
Note
La autenticación de clave SSH para el acceso al nodo de AKS está en desuso. Este paso es necesario actualmente, pero será opcional en futuras versiones de plantilla. Si no necesita acceso directo al nodo, puede omitir esta sección cuando se actualice la plantilla.
Generar par de claves SSH
# Create .ssh directory if it doesn't exist
$sshDir = "$env:USERPROFILE\.ssh"
if (-not (Test-Path $sshDir)) {
New-Item -ItemType Directory -Path $sshDir
}
# Generate SSH key pair
ssh-keygen -t rsa -b 4096 -f "$sshDir\aks-nodes" -N '""'
# Display the public key
Get-Content "$sshDir\aks-nodes.pub"
Almacenamiento de la clave SSH en Key Vault
# Read the SSH public key
$sshPublicKey = Get-Content "$env:USERPROFILE\.ssh\aks-nodes.pub" -Raw
# Store in Key Vault as a secret
az keyvault secret set `
--vault-name "kv-ave-shared-<uniqueid>" `
--name "aks-ssh-public-key" `
--value $sshPublicKey
Implementación de un clúster de AKS privado
Ahora implemente el clúster de AKS con cifrado y supervisión completos.
Uso de una plantilla de catálogo de servicios
- En la carga de trabajo de AKS, seleccione + Agregar un servicio Azure.
- Busque y seleccione Clúster de AKS privado.
- Configurar la implementación:
Pestaña Aspectos básicos
-
Nombre del clúster de AKS:
aks-prod-01 -
Versión de Kubernetes: seleccione la versión estable más reciente (por ejemplo,
1.32)
Monitorización
- Nombre del área de trabajo de Log Analytics: Seleccione el destino de registro de su enclave o comunidad.
Encryption
- Nombre del conjunto de cifrado de disco: escriba el nombre que usó en el Tutorial 2-2.
- Nombre de la clave de cifrado: escriba el nombre de la clave del almacén de claves.
- Key Vault: seleccione el almacén de claves que tenga ese nombre de clave.
Acceso
- Nombre de identidad de AKS: escriba el nombre que usó en el Tutorial 2-2.
- Nombre del grupo de recursos de identidad de AKS: actualice el nombre del grupo de recursos para que coincida con la ubicación de la identidad.
Networking
- Nombre de subred de AKS: escriba el nombre de la subred de AKS.
- Nombre de subred del grupo de agentes: escriba el nombre de la subred del grupo de agentes.
-
CIDR para el tráfico de servicio:
172.16.0.0/16 -
Dirección IP del servicio DNS de Kubernetes:
172.16.0.10
Configuración de subred:
-
Subred del nodo: Seleccione
aksSubnetde su enclave -
Subred del servidor de API: Selecciona
agentSubnetde tu enclave -
Subred de extremo privado: Seleccione
AzureVirtualEnclaveSubnetde su enclave
Grupo de nodos
Seleccione Next para omitir esta pestaña en este tutorial.
Etiquetas
-
Entorno:
Production -
Carga de trabajo:
AKS -
Gestionado por:
Azure Enclave
- Seleccione Revisar + crear.
- Revise cuidadosamente todas las configuraciones.
- Selecciona Crear.
Note
El clúster de AKS crea automáticamente un grupo de recursos administrado.
Creación de puntos de conexión de la comunidad para la conectividad de AKS
AKS requiere conectividad saliente a varios servicios de Azure. Crea puntos de conexión de comunidad para estos requisitos.
Note
Si has creado puntos de conexión de comunidad de AKS en el Tutorial 2-1, comprueba que incluyan todos los FQDN necesarios.
Configuración del punto de conexión de la comunidad
Ve a tu comunidad (por ejemplo,
cmt-fabrikam).Seleccione Puntos de conexión comunitarios>+ Crear o edite uno existente
ce-aks-services.Asegúrese de que existen estas reglas:
Regla 1: Microsoft Container Registry
-
Nombre:
mcr -
Destino:
mcr.microsoft.com,*.data.mcr.microsoft.com -
Protocolo:
HTTPS -
Puerto:
443
Regla 2: Administración de AKS
-
Nombre:
aks-management -
Destino:
*.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com -
Protocolo:
HTTPS -
Puerto:
443
Regla 3: administración de Azure
-
Nombre:
azure-management -
Destino:
management.azure.com,login.microsoftonline.com -
Protocolo:
HTTPS -
Puerto:
443
Regla 4: Repositorio de paquetes
-
Nombre:
packages -
Destino:
packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com -
Protocolo:
HTTPS -
Puerto:
443
Regla 5: Azure Monitor (si está habilitada)
-
Nombre:
monitoring -
Destino:
*.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com -
Protocolo:
HTTPS -
Puerto:
443
-
Nombre:
Seleccione Revisar y crear y, a continuación, Crear o Guardar.
Configuración de reglas de salida de NSG
Agregue reglas de seguridad de salida a su NSG para permitir el tráfico de AKS.
- Vaya a Grupos de seguridad de red>
nsg-aks-nodes. - Seleccione Reglas de seguridad> de salida+ Agregar.
- Agregue una regla para la salida HTTPS:
-
Fuente:
VirtualNetwork -
Destino:
Internet -
Puerto de destino:
443 -
Protocolo:
TCP -
Acción:
Allow -
Prioridad:
1000 -
Nombre:
Allow_HTTPS_Outbound
-
Fuente:
Asociar grupos de recursos de AKS a la carga de trabajo
AKS crea un grupo de recursos administrado (MRG) para la infraestructura del clúster. Asocia tanto el grupo de recursos de usuario como el MRG a tu carga de trabajo.
Uso del portal de Azure
- Vaya al servicio Azure Enclave en el portal de Azure.
- Seleccione la comunidad (por ejemplo,
cmt-fabrikam). - Seleccione Enclaves y abra el enclave de AKS (por ejemplo,
ve-aks). - Seleccione Cargas de trabajo y abra la carga de trabajo de AKS (por ejemplo,
wl-aks). - En la información general de la carga de trabajo, seleccione Propiedades o Grupos de recursos vinculados.
- Seleccione + Agregar grupo de recursos.
- Agregue el grupo de recursos de usuario:
- Seleccione Suscripción: Su suscripción.
- Seleccione Grupo de recursos:
rg-aks-cluster - Seleccione Agregar.
- Vuelva a seleccionar + Agregar grupo de recursos de nuevo.
- Agregue el grupo de recursos administrados de AKS:
- El nombre del RG administrado sigue el siguiente patrón:
MC_rg-aks-cluster_aks-prod-01_<region> - Seleccione Suscripción: Su suscripción.
- Seleccionar grupo de recursos: el grupo de recursos administrado de AKS
- Seleccione Agregar.
- El nombre del RG administrado sigue el siguiente patrón:
- Compruebe que ambos grupos de recursos aparecen en la lista de grupos de recursos vinculados de la carga de trabajo.
Sugerencia
Para buscar el nombre del grupo de recursos administrados de AKS, vaya al clúster de AKS en el portal y compruebe la propiedad Grupo de recursos node en la página Información general.
Acceso al clúster de AKS
Acceda al clúster de AKS privado a través de una máquina virtual de administración o Azure Bastion dentro del enclave.
Conexión a la máquina virtual de administración
- Conéctese a la máquina virtual de administrador a través de Azure Bastion o RDP.
- Asegúrese de que la máquina virtual de administración tiene CLI de Azure instalado.
- Inicie sesión en Azure:
az login
Obtención de credenciales de AKS
# Get cluster credentials
az aks get-credentials `
--resource-group rg-aks-cluster `
--name aks-prod-01 `
--admin
# Verify connection
kubectl get nodes
La salida esperada muestra los nodos con estado Ready:
NAME STATUS ROLES AGE VERSION
aks-systempool-12345678-vmss000000 Ready agent 5m v1.29.5
aks-systempool-12345678-vmss000001 Ready agent 5m v1.29.5
aks-systempool-12345678-vmss000002 Ready agent 5m v1.29.5
Desplegar carga de trabajo de prueba
Implemente una aplicación de ejemplo para validar el clúster.
Creación de un espacio de nombres
kubectl create namespace test-app
Implementación de una aplicación de ejemplo
# Save as test-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: test-app
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: mcr.microsoft.com/oss/nginx/nginx:1.25.3
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: test-app
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
targetPort: 80
# Apply the deployment
kubectl apply -f test-deployment.yaml
# Check deployment status
kubectl get deployments -n test-app
kubectl get pods -n test-app
kubectl get services -n test-app
Validación de la implementación
Realice una validación completa del clúster de AKS.
Comprobación del estado del clúster
# Check node status
kubectl get nodes -o wide
# Check system pods
kubectl get pods -n kube-system
# Check node conditions
kubectl describe nodes | grep -A 5 Conditions
Comprobación del cifrado
# Check if encryption at host is enabled
az aks show --resource-group rg-aks-cluster --name aks-prod-01 --query "securityProfile.enableEncryptionAtHost"
# Check disk encryption set
az aks show --resource-group rg-aks-cluster --name aks-prod-01 --query "diskEncryptionSetId"
Valide la conectividad de red.
# Test DNS resolution
kubectl run -it --rm debug --image=mcr.microsoft.com/dotnet/runtime-deps:6.0 --restart=Never -- nslookup kubernetes.default
# Test internet connectivity through community endpoints
kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- curl -I https://mcr.microsoft.com
# Check service connectivity
kubectl get services -A
Comprobación de la supervisión y los registros
# Check if Container Insights is enabled
az aks show --resource-group rg-aks-cluster --name aks-prod-01 --query "addonProfiles.omsagent.enabled"
# Query logs in Log Analytics
az monitor log-analytics query `
--workspace <workspace-id> `
--analytics-query "ContainerLog | where TimeGenerated > ago(1h) | limit 10"
Comprobación del cumplimiento de Azure Policy
# Check Azure Policy add-on status
kubectl get pods -n kube-system | grep azure-policy
# View policy violations (if any)
kubectl get constrainttemplates
kubectl get constraints
Configuración del acceso kubectl para otros usuarios
Conceda a otros usuarios acceso al clúster de AKS.
Uso de Azure RBAC
# Assign Azure Kubernetes Service Cluster User Role
az role assignment create `
--assignee user@contoso.com `
--role "Azure Kubernetes Service Cluster User Role" `
--scope "/subscriptions/<subscription-id>/resourceGroups/rg-aks-cluster/providers/Microsoft.ContainerService/managedClusters/aks-prod-01"
# For admin access
az role assignment create `
--assignee user@contoso.com `
--role "Azure Kubernetes Service Cluster Admin Role" `
--scope "/subscriptions/<subscription-id>/resourceGroups/rg-aks-cluster/providers/Microsoft.ContainerService/managedClusters/aks-prod-01"
Uso del RBAC de Kubernetes
# Create role binding for namespace access
kubectl create rolebinding user-viewer `
--clusterrole=view `
--user=user@contoso.com `
--namespace=test-app
Solucionar los problemas comunes
Se produce un error en la creación del clúster
Síntoma: falla el despliegue del clúster de AKS
Soluciones:
- Compruebe que las marcas de características están registradas:
EncryptionAtHost,EnableAPIServerVnetIntegrationPreview - Compruebe que los tamaños de subred son adecuados para el número de nodos y la densidad de pods.
- Comprobación de que el conjunto de cifrado de disco y la identidad administrada tienen los permisos adecuados
- Revisión del registro de actividad para ver mensajes de error específicos
Nodos no listos
Síntoma: los nodos muestran NotReady el estado
Soluciones:
- Comprobación de que la subred del nodo tiene conectividad saliente a los puntos de conexión necesarios
- Verificar que los puntos de conexión comunitarios incluyen todos los FQDN de AKS necesarios
- Compruebe que las reglas de NSG permiten el tráfico saliente en el puerto 443
- Revise los registros de nodo:
kubectl describe node <node-name>
Los pods no pueden descargar imágenes
Síntoma: Pods atascados en ImagePullBackOff
Soluciones:
- Verificar que el punto de conexión de la comunidad incluya
mcr.microsoft.comy*.data.mcr.microsoft.com - Comprobar que el NSG permite HTTPS saliente (puerto 443)
- Asegúrate de que la resolución de DNS funciona:
nslookup mcr.microsoft.comdesde el pod - Revise los secretos para extraer imágenes si utiliza registros privados
No se puede conectar al servidor de API
Síntoma: kubectl se produce un error en los comandos con el tiempo de espera de conexión
Soluciones:
- Compruebe que está en una máquina virtual o recurso de administración con conectividad de enclave
- Comprobación de que la zona DNS privada está vinculada a la red virtual
- Comprobación de la configuración de subred del servidor de API
- Pruebe la resolución DNS:
nslookup <cluster-fqdn>
La supervisión no funciona
Síntoma: no hay registros ni métricas en Azure Monitor
Soluciones:
- Comprobación de que el complemento de Container Insights está habilitado
- Comprueba que los puntos de conexión de la comunidad incluyan los FQDN de supervisión
- Comprobación de que el área de trabajo de Log Analytics sea accesible desde el clúster
- Comprueba que los
omsagentpods se estén ejecutando:kubectl get pods -n kube-system | grep omsagent
Limpieza de recursos
Para evitar cargos continuos, elimine los recursos cuando ya no sea necesario.
Eliminación del clúster de AKS
# Delete AKS cluster (also deletes managed resource group)
az aks delete --resource-group rg-aks-cluster --name aks-prod-01 --yes --no-wait
# Delete user resource group
az group delete --name rg-aks-cluster --yes --no-wait
# Delete infrastructure resource group
az group delete --name rg-aks-infrastructure --yes --no-wait
Advertencia
Al eliminar el clúster de AKS, se quitan permanentemente todas las cargas de trabajo y los datos. Asegúrese de que tiene copias de seguridad si es necesario.
Pasos siguientes
Ha completado la serie de tutoriales para implementar cargas de trabajo de AKS y Azure Virtual Desktop en Azure Enclave.
Siguientes pasos recomendados
- Configuración del escalado automático para AKS
- Implementación de aplicaciones con Helm
- Implementación de GitOps con Flux
- Configuración del controlador de entrada
- Habilitar la identidad de carga de trabajo