Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra come distribuire un cluster di Servizio Azure Kubernetes (AKS) privato in Azure Enclave. Si crea un cluster del servizio Azure Kubernetes completamente privato con crittografia gestita dal cliente, integrazione di rete e modelli di accesso sicuro.
In questa esercitazione apprenderai a:
- Abilitare le funzionalità di Azure necessarie per AKS privato
- Convalida delle risorse necessarie per AKS
- Distribuisci un cluster AKS privato
- Configurare la crittografia della chiave gestita dal cliente
- Creare endpoint della community per la connettività di AKS
- Associare più gruppi di risorse al carico di lavoro AKS
- Accedere al cluster AKS e convalidare
Prerequisiti
- Completamento del Tutorial 2-3: Distribuire il carico di lavoro di Desktop virtuale Azure
- Enclave di AKS creata con subnet del nodo, del server API e dell'endpoint privato
- Dipendenze comuni (Key Vault, identità gestita, set di crittografia del disco) da Tutorial 2-2: Creare un ambiente Azure Enclave
- Zone DNS private per AKS distribuite
- Ruolo collaboratore nel gruppo di risorse del carico di lavoro del servizio Azure Kubernetes
- ruolo Collaboratore di servizio Azure Kubernetes nella sottoscrizione
- interfaccia della riga di comando di Azure o Azure PowerShell installati per operazioni avanzate
Importante
Questa esercitazione si allinea al comportamento del modello Private AKS Cluster e richiede le risorse create dalla distribuzione AVE AKS Enclave in Tutorial 2-2.
Prima di iniziare
Informazioni su AKS in Azure Enclave
AKS in Azure Enclave offre:
- Cluster completamente privato: server API accessibile solo tramite endpoint privato
- Isolamento della rete: tutto il traffico rimane entro i limiti dell'enclave
- Crittografia gestita dal cliente: sia il piano di controllo sia il piano dati sono crittografati con una chiave gestita dal cliente (CMK)
- Limiti del carico di lavoro sicuri: risorse Kubernetes contenute nei criteri di sicurezza dell'enclave
Convenzioni di denominazione delle risorse
Questa esercitazione usa nomi di esempio. Usa la convenzione di denominazione della tua organizzazione:
- Enclave:
aks-enclave - Carico di lavoro:
aks-workload - Gruppo di risorse:
rg-aks-cluster - Cluster AKS:
aks-prod-01
Abilitare le funzionalità di Azure necessarie
AKS in Azure Enclave richiede che specifiche funzionalità di Azure siano abilitate per la sottoscrizione.
Abilitare la funzionalità EncryptionAtHost
Questa funzionalità abilita la crittografia a livello di host della macchina virtuale per i nodi del servizio Azure Kubernetes.
# 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
Abilitare l'integrazione della rete virtuale del server API (anteprima)
Questa funzionalità consente di integrare il server API del servizio Azure Kubernetes direttamente nella rete virtuale.
# 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
Attendere che entrambe le funzionalità visualizzino "state": "Registered" prima di procedere. La registrazione richiede in genere 10-15 minuti.
Preparare la chiave SSH (facoltativo)
Note
L'autenticazione tramite chiave SSH per l'accesso ai nodi di AKS è in fase di deprecazione. Questo passaggio è attualmente obbligatorio, ma sarà facoltativo nelle versioni future del modello. Se non è necessario l'accesso diretto ai nodi, è possibile ignorare questa sezione quando il modello viene aggiornato.
Generare una coppia di chiavi 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"
Archiviare la chiave SSH in 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
Distribuire un cluster AKS privato
Distribuisci ora il cluster AKS con crittografia completa e monitoraggio.
Usare il modello di catalogo dei servizi
- Nel carico di lavoro AKS, seleziona + Aggiungi un servizio Azure.
- Cercare e selezionare Cluster AKS privato.
- Configurare la distribuzione:
Scheda Informazioni di base
-
Nome del cluster AKS:
aks-prod-01 -
Versione di Kubernetes: selezionare la versione stabile più recente (ad esempio,
1.32)
Monitoraggio
- Nome dell'area di lavoro Log Analytics: Seleziona la destinazione dei log dell'enclave o della comunità.
Encryption
- Nome del set di crittografia dei dischi: Immettere il nome utilizzato nel Tutorial 2-2.
- Nome della chiave di crittografia: immettere il nome della chiave dell'insieme di credenziali delle chiavi.
- Key Vault: seleziona il tuo key vault con quel nome di chiave.
Accesso
- Nome identità AKS: Immetti il nome che hai utilizzato in Esercitazione 2-2.
- Nome del gruppo di risorse dell'identità AKS: aggiornare il nome del gruppo di risorse in modo che corrisponda al gruppo di risorse in cui si trova l'identità.
Networking
- Nome subnet AKS: immetti il nome della subnet AKS
- Nome subnet del pool di agenti: Immettere il nome della subnet del pool di agenti
-
CIDR per il traffico di servizio:
172.16.0.0/16 -
Indirizzo IP del servizio DNS Kubernetes:
172.16.0.10
Configurazione subnet:
-
Sottorete del nodo: seleziona
aksSubnetdalla tua enclave -
Sottorete del server API: Selezionare
agentSubnetdalla tua enclave -
Subnet dell'endpoint privato: selezionare
AzureVirtualEnclaveSubnetdall'enclave
Pool di nodi
Seleziona Next per saltare questa scheda in questo tutorial.
Tag
-
Ambiente:
Production -
Carico di lavoro:
AKS -
Gestito da:
Azure Enclave
- Selezionare Verifica e crea.
- Esaminare attentamente tutte le impostazioni.
- Fare clic su Crea.
Note
Il cluster AKS crea automaticamente un gruppo di risorse gestito.
Creare endpoint della community per la connettività di AKS
AKS richiede connettività in uscita verso diversi servizi Azure. Creare endpoint della community per questi requisiti.
Note
Se hai creato endpoint della community di AKS nel tutorial 2-1, verifica che includano tutti gli FQDN necessari.
Configurare l'endpoint della community
Vai nella tua comunità (ad esempio,
cmt-fabrikam).Seleziona endpoint della community>+ Crea o modifica quelli esistenti
ce-aks-services.Verificare che queste regole esistano:
Regola 1: Microsoft Container Registry
-
Nome:
mcr -
Destinazione:
mcr.microsoft.com,*.data.mcr.microsoft.com -
Protocollo:
HTTPS -
Porta:
443
Regola 2: Gestione di AKS
-
Nome:
aks-management -
Destinazione:
*.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com -
Protocollo:
HTTPS -
Porta:
443
Regola 3: gestione Azure
-
Nome:
azure-management -
Destinazione:
management.azure.com,login.microsoftonline.com -
Protocollo:
HTTPS -
Porta:
443
Regola 4: Repository di pacchetti
-
Nome:
packages -
Destinazione:
packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com -
Protocollo:
HTTPS -
Porta:
443
Regola 5: Monitoraggio di Azure (se abilitata)
-
Nome:
monitoring -
Destinazione:
*.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com -
Protocollo:
HTTPS -
Porta:
443
-
Nome:
Selezionare Rivedi e crea e quindi Crea o Salva.
Configurare le regole in uscita di NSG
Aggiungi regole di sicurezza in uscita al tuo NSG per consentire il traffico AKS.
- Passare a Gruppi di>
nsg-aks-nodessicurezza di rete. - Selezionare Regole >+ Aggiungi.
- Aggiungere una regola per HTTPS in uscita:
-
Fonte:
VirtualNetwork -
Destinazione:
Internet -
Porta di destinazione:
443 -
Protocollo:
TCP -
Azione:
Allow -
Priorità:
1000 -
Nome:
Allow_HTTPS_Outbound
-
Fonte:
Associare i gruppi di risorse AKS al workload
AKS crea un gruppo di risorse gestito (MRG) per l'infrastruttura del cluster. Associa sia il gruppo di risorse dell'utente sia MRG al tuo carico di lavoro.
Uso del portale di Azure
- Passa al servizio Azure Enclave nel portale di Azure.
- Seleziona la Community (ad esempio,
cmt-fabrikam). - Selezionare Enclaves e aprire l'enclave AKS (ad esempio,
ve-aks). - Seleziona Carichi di lavoro e apri il tuo carico di lavoro AKS (ad esempio,
wl-aks). - Nella panoramica del carico di lavoro selezionare Proprietà o Gruppi di risorse collegati.
- Selezionare + Aggiungi gruppo di risorse.
- Aggiungere il gruppo di risorse utente:
- Selezionare Sottoscrizione: sottoscrizione
- Selezionare Gruppo di risorse:
rg-aks-cluster - Seleziona Aggiungi
- Selezionare di nuovo + Aggiungi gruppo di risorse .
- Aggiungi il gruppo di risorse gestito di AKS:
- Il nome RG gestito segue il modello:
MC_rg-aks-cluster_aks-prod-01_<region> - Selezionare Sottoscrizione: sottoscrizione
- Selezionare Gruppo di risorse: Il gruppo di risorse gestito di AKS
- Seleziona Aggiungi
- Il nome RG gestito segue il modello:
- Verificare che entrambi i gruppi di risorse siano visualizzati nell'elenco dei gruppi di risorse collegati del carico di lavoro.
Tip
Per trovare il nome del gruppo di risorse gestite del servizio Azure Kubernetes, passare al cluster del servizio Azure Kubernetes nel portale e controllare la proprietà Gruppo di risorse Node nella pagina Panoramica.
Accedi al cluster AKS
Accedi al cluster AKS privato tramite una VM amministrativa o Azure Bastion all'interno dell'enclave.
Connettersi alla macchina virtuale di amministrazione
- Connettersi alla macchina virtuale amministratore tramite Azure Bastion o RDP.
- Assicurarsi che la VM di amministrazione abbia installato interfaccia della riga di comando di Azure.
- Accedere a Azure:
az login
Ottenere le credenziali di AKS
# Get cluster credentials
az aks get-credentials `
--resource-group rg-aks-cluster `
--name aks-prod-01 `
--admin
# Verify connection
kubectl get nodes
L'output previsto mostra i nodi nello Ready stato:
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
Distribuire il carico di lavoro di test
Distribuire un'applicazione di esempio per convalidare il cluster.
Crea spazio dei nomi
kubectl create namespace test-app
Distribuire l'applicazione di esempio
# 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
Convalidare la distribuzione
Esegui la convalida completa del cluster AKS.
Controllare l'integrità del cluster
# 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
Verificare la crittografia
# 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"
Convalidare la connettività di rete
# 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
Controllare il monitoraggio e i log
# 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"
Verificare la conformità di Criteri di Azure
# 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
Configurare l'accesso kubectl per altri utenti
Concedi ad altri utenti l'accesso al cluster AKS.
Uso della rete RBAC di Azure
# 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 di RBAC in Kubernetes
# Create role binding for namespace access
kubectl create rolebinding user-viewer `
--clusterrole=view `
--user=user@contoso.com `
--namespace=test-app
Risoluzione dei problemi comuni
La creazione del cluster non riesce
Sintomo: la distribuzione del cluster AKS non riesce
Soluzioni:
- Verificare che i flag di funzionalità siano registrati:
EncryptionAtHost,EnableAPIServerVnetIntegrationPreview - Verificare che le dimensioni delle subnet siano adeguate per il numero di nodi e la densità dei pod
- Verificare che il set di crittografia del disco e l'identità gestita dispongano delle autorizzazioni appropriate
- Esaminare il registro attività per specifici messaggi di errore
Nodi non pronti
Sintomo: i nodi mostrano NotReady lo stato
Soluzioni:
- Verificare che la subnet del nodo abbia connettività in uscita verso gli endpoint richiesti
- Verifica che gli endpoint della community includano tutti gli FQDN AKS necessari
- Verificare che le regole NSG consentano il traffico in uscita sulla porta 443
- Esaminare i log dei nodi:
kubectl describe node <node-name>
I pod non riescono a scaricare le immagini
Sintomo: i pod sono bloccati in ImagePullBackOff
Soluzioni:
- Verificare che l'endpoint della community includa
mcr.microsoft.come*.data.mcr.microsoft.com - Verificare che NSG consenta HTTPS in uscita (porta 443)
- Verificare che la risoluzione DNS funzioni:
nslookup mcr.microsoft.comdal pod - Controllare i segreti per il download delle immagini se si usano registry privati
Non è possibile connettersi al server API
Sintomo: kubectl i comandi hanno esito negativo con timeout della connessione
Soluzioni:
- Verificare di essere nella macchina virtuale o nella risorsa di amministrazione con connettività dell'enclave
- Verificare che la zona DNS privata sia collegata alla rete virtuale
- Verificare la configurazione della subnet del server API
- Testare la risoluzione DNS:
nslookup <cluster-fqdn>
Monitoraggio non funzionante
Sintomo: nessun log o metrica in Monitoraggio di Azure
Soluzioni:
- Verificare che il componente aggiuntivo Container Insights sia abilitato
- Verificare che gli endpoint della community includano gli FQDN di monitoraggio
- Verificare che l'area di lavoro di Log Analytics sia accessibile dal cluster
- Verificare che
omsagenti pod siano in esecuzione:kubectl get pods -n kube-system | grep omsagent
Pulire le risorse
Per evitare addebiti in corso, eliminare le risorse quando non sono più necessarie.
Eliminare il cluster 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
Avvertimento
L'eliminazione del cluster del servizio Azure Kubernetes rimuove definitivamente tutti i carichi di lavoro e i dati. Assicurarsi di disporre di backup, se necessario.
Passaggi successivi
Hai completato la serie di tutorial per distribuire i carichi di lavoro di Desktop virtuale Azure e AKS in Azure Enclave!
Passaggi successivi consigliati
- Configurare la scalabilità automatica per AKS
- Distribuire applicazioni con Helm
- Implementare GitOps con Flux
- Configurare il controller di ingresso
- Abilita l'identità del carico di lavoro