Samouczek 2–4: wdrażanie obciążenia Azure Kubernetes Service (AKS) w enklawie Azure

Ten samouczek przeprowadzi Cię przez proces wdrażania prywatnego klastra Azure Kubernetes Service (AKS) w enklawie Azure. Tworzysz w pełni prywatny klaster usługi AKS z szyfrowaniem zarządzanym przez klienta, integracją sieci i bezpiecznymi wzorcami dostępu.

W tym poradniku nauczysz się, jak:

  • Włączanie wymaganych funkcji Azure dla prywatnej usługi AKS
  • Weryfikowanie wymaganych zasobów dla usługi AKS
  • Wdróż prywatny klaster AKS
  • Konfigurowanie szyfrowania kluczy zarządzanych przez klienta
  • Tworzenie społecznościowych punktów końcowych na potrzeby łączności z usługą AKS
  • Przypisywanie wielu grup zasobów do obciążenia roboczego AKS
  • Uzyskiwanie dostępu do klastra AKS i jego weryfikacja

Prerequisites

Ważna

Ten samouczek jest zgodny z działaniem szablonu Prywatny klaster AKS i wymaga zasobów utworzonych przez wdrożenie AVE AKS Enclave w samouczku 2-2.

Zanim rozpoczniesz

Opis usługi AKS w enklawie Azure

Usługa AKS w enklawie Azure zapewnia:

  • W pełni prywatny klaster: serwer API dostępny wyłącznie przez prywatny punkt końcowy
  • Izolacja sieci: cały ruch pozostaje w granicach enklawy
  • Szyfrowanie zarządzane przez klienta: zarówno płaszczyzna sterowania, jak i płaszczyzna danych są szyfrowane przy użyciu CMK
  • Bezpieczne granice obciążenia: zasoby kubernetes zawarte w zasadach zabezpieczeń enklawy

Konwencje nazewnictwa zasobów

W tym samouczku użyto przykładowych nazw. Użyj konwencji nazewnictwa organizacji:

  • Enklawa: aks-enclave
  • Obciążenia: aks-workload
  • Grupa zasobów: rg-aks-cluster
  • Klaster AKS: aks-prod-01

Włączanie wymaganych funkcji Azure

Usługa AKS w enklawie Azure wymaga włączenia określonych funkcji Azure w ramach subskrypcji.

Włączanie funkcji EncryptionAtHost

Ta funkcja umożliwia szyfrowanie na poziomie hosta maszyny wirtualnej dla węzłów usługi 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

Włącz integrację serwera API z siecią wirtualną (wersja zapoznawcza)

Ta funkcja umożliwia zintegrowanie serwera interfejsu API usługi AKS bezpośrednio z siecią wirtualną.

# 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

Ważna

Poczekaj, aż przy obu funkcjach pojawi się "state": "Registered", zanim przejdziesz dalej. Rejestracja trwa zwykle od 10 do 15 minut.

Przygotowywanie klucza SSH (opcjonalnie)

Note

Uwierzytelnianie za pomocą klucza SSH na potrzeby dostępu do węzłów usługi AKS jest wycofywane. Ten krok jest obecnie wymagany, ale będzie opcjonalny w przyszłych wersjach szablonów. Jeśli nie potrzebujesz bezpośredniego dostępu do węzła, możesz pominąć tę sekcję po zaktualizowaniu szablonu.

Generowanie pary kluczy 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"

Przechowywanie klucza SSH w usłudze 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

Wdróż prywatny klaster AKS

Teraz wdróż klaster usługi AKS z pełnym szyfrowaniem i monitorowaniem.

Korzystanie z szablonu katalogu usług

  1. W obciążeniu usługi AKS wybierz pozycję + Dodaj usługę Azure.
  2. Wyszukaj i wybierz pozycję Private AKS Cluster.
  3. Konfigurowanie wdrożenia:

zakładka Podstawy

  • Nazwa klastra usługi AKS: aks-prod-01
  • Wersja platformy Kubernetes: wybierz najnowszą stabilną wersję (na przykład 1.32)

Monitoring

  • Nazwa obszaru roboczego usługi Log Analytics: wybierz miejsce docelowe rejestrowania dla enklawy lub społeczności.

Encryption

  • Nazwa zestawu szyfrowania dysków: Wprowadź nazwę użytej w Samouczku 2-2.
  • Nazwa klucza szyfrowania: wprowadź nazwę klucza magazynu kluczy.
  • Key Vault: wybierz magazyn kluczy z kluczem o tej nazwie.

Dostęp

  • Nazwa tożsamości AKS: Wprowadź nazwę, której użyto w samouczku 2-2.
  • Nazwa grupy zasobów tożsamości AKS: zaktualizuj nazwę grupy zasobów tak, aby odpowiadała grupie zasobów, w której znajduje się Twoja tożsamość.

Sieć

  • Nazwa podsieci usługi AKS: wprowadź nazwę podsieci usługi AKS
  • Nazwa podsieci puli agentów: wprowadź nazwę podsieci puli agentów
  • CIDR dla ruchu usługi: 172.16.0.0/16
  • Adres IP usługi DNS Kubernetes: 172.16.0.10

Konfiguracja podsieci:

  • Podsieć węzłów: Wybierz aksSubnet w swojej enklawie
  • Podsieć serwera API: Wybierz agentSubnet z enklawy
  • Podsieć prywatnego punktu końcowego: wybierz AzureVirtualEnclaveSubnet w enklawie

Pula węzłów

Wybierz, Next aby pominąć tę kartę dla tego samouczka.

Tags

  • Środowisko: Production
  • Obciążenie: AKS
  • Zarządzane przez: Azure Enclave
  1. Wybierz pozycję Recenzja i Utwórz.
  2. Dokładnie przejrzyj wszystkie ustawienia.
  3. Wybierz Utwórz.

Note

Klaster usługi AKS automatycznie tworzy zarządzaną grupę zasobów.

Tworzenie społecznościowych punktów końcowych na potrzeby łączności z usługą AKS

Usługa AKS wymaga łączności wychodzącej z kilkoma usługami Azure. Utwórz społecznościowe punkty końcowe zgodnie z tymi wymaganiami.

Note

Jeśli w samouczku 2-1 utworzyłeś punkty końcowe społeczności AKS, sprawdź, czy zawierają wszystkie wymagane nazwy FQDN.

Skonfiguruj punkt końcowy społeczności

  1. Odwiedź swoją społeczność (na przykład cmt-fabrikam).

  2. Wybierz Punkty końcowe społeczności>+ Utwórz lub edytuj istniejące ce-aks-services.

  3. Upewnij się, że istnieją następujące reguły:

    Reguła 1: Microsoft Container Registry

    • Nazwa: mcr
    • Miejsce docelowe: mcr.microsoft.com,*.data.mcr.microsoft.com
    • Protokół: HTTPS
    • Port: 443

    Reguła 2. Zarządzanie usługą AKS

    • Nazwa: aks-management
    • Miejsce docelowe: *.hcp.<region>.azmk8s.io,<region>.dp.kubernetesconfiguration.azure.com
    • Protokół: HTTPS
    • Port: 443

    Reguła 3: zarządzanie Azure

    • Nazwa: azure-management
    • Miejsce docelowe: management.azure.com,login.microsoftonline.com
    • Protokół: HTTPS
    • Port: 443

    Reguła 4. Repozytorium pakietów

    • Nazwa: packages
    • Miejsce docelowe: packages.microsoft.com,acs-mirror.azureedge.net,azure.archive.ubuntu.com
    • Protokół: HTTPS
    • Port: 443

    Reguła 5: Azure Monitor (jeśli jest włączona)

    • Nazwa: monitoring
    • Miejsce docelowe: *.ods.opinsights.azure.com,*.oms.opinsights.azure.com,dc.services.visualstudio.com
    • Protokół: HTTPS
    • Port: 443
  4. Wybierz pozycję Przejrzyj i utwórz , a następnie pozycję Utwórz lub Zapisz.

Konfigurowanie wychodzących reguł sieciowej grupy zabezpieczeń

Dodaj do NSG reguły zabezpieczeń ruchu wychodzącego, aby zezwolić na ruch AKS.

  1. Przejdź do Sieciowe grupy zabezpieczeń>nsg-aks-nodes.
  2. Wybierz Reguły zabezpieczeń ruchu wychodzącego>+ Dodaj.
  3. Dodaj regułę dla ruchu wychodzącego HTTPS:
    • Źródło: VirtualNetwork
    • Miejsce docelowe: Internet
    • Port docelowy: 443
    • Protokół: TCP
    • Akcja: Allow
    • Priorytet: 1000
    • Nazwa: Allow_HTTPS_Outbound

Przypisywanie grup zasobów AKS do obciążenia roboczego

Usługa AKS tworzy zarządzaną grupę zasobów (MRG) dla infrastruktury klastra. Przypisz do obciążenia roboczego zarówno grupę zasobów użytkownika, jak i MRG.

Korzystanie z portalu Azure

  1. Przejdź do usługi enklawy Azure w portalu Azure.
  2. Wybierz swoją społeczność (na przykład cmt-fabrikam).
  3. Wybierz Enclaves i otwórz enklawę AKS (na przykład ve-aks).
  4. Wybierz pozycję Obciążenia i otwórz obciążenie usługi AKS (na przykład wl-aks).
  5. W przeglądzie obciążenia wybierz pozycję Właściwości lub Połączone grupy zasobów.
  6. Wybierz + Dodaj grupę zasobów.
  7. Dodaj grupę zasobów użytkownika:
    • Wybierz pozycję Subskrypcja: Twoja subskrypcja
    • Wybierz pozycję Grupa zasobów: rg-aks-cluster
    • Wybierz Dodaj
  8. Ponownie wybierz pozycję + Dodaj grupę zasobów .
  9. Dodaj zarządzaną grupę zasobów AKS:
    • Nazwa zarządzanej grupy zasobów ma następujący format: MC_rg-aks-cluster_aks-prod-01_<region>
    • Wybierz pozycję Subskrypcja: Twoja subskrypcja
    • Wybierz Grupa zasobów: grupa zasobów zarządzana przez usługę AKS
    • Wybierz Dodaj
  10. Sprawdź, czy obie grupy zasobów są wyświetlane na liście połączonych grup zasobów obciążenia.

Tip

Aby znaleźć nazwę zarządzanej grupy zasobów usługi AKS, przejdź do klastra usługi AKS w portalu i sprawdź właściwość grupy zasobów Node na stronie Przegląd.

Dostęp do klastra AKS

Uzyskaj dostęp do prywatnego klastra AKS za pośrednictwem administracyjnej maszyny wirtualnej lub usługi Azure Bastion wewnątrz enklawy.

Nawiązywanie połączenia z maszyną wirtualną administratora

  1. Nawiąż połączenie z maszyną wirtualną administratora za pośrednictwem Azure Bastion lub protokołu RDP.
  2. Upewnij się, że na maszynie wirtualnej administratora zainstalowano Azure CLI.
  3. Zaloguj się do platformy Azure:
az login

Pobierz poświadczenia AKS

# Get cluster credentials
az aks get-credentials `
    --resource-group rg-aks-cluster `
    --name aks-prod-01 `
    --admin

# Verify connection
kubectl get nodes

Oczekiwany wynik pokazuje węzły ze stanem 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

Wdrażanie obciążenia testowego

Wdróż przykładową aplikację, aby zweryfikować klaster.

Tworzenie przestrzeni nazw

kubectl create namespace test-app

Wdrażanie przykładowej aplikacji

# 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

Weryfikowanie wdrożenia

Przeprowadź kompleksową weryfikację klastra AKS.

Sprawdzanie kondycji klastra

# 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

Zweryfikuj szyfrowanie

# 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"

Sprawdź łączność sieciową

# 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

Sprawdzanie monitorowania i dzienników

# 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"

Weryfikowanie zgodności 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

Konfigurowanie dostępu kubectl dla innych użytkowników

Udziel innym użytkownikom dostępu do klastra usługi AKS.

Korzystanie z funkcji 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"

Korzystanie z RBAC w Kubernetes

# Create role binding for namespace access
kubectl create rolebinding user-viewer `
    --clusterrole=view `
    --user=user@contoso.com `
    --namespace=test-app

Rozwiązywanie typowych problemów

Tworzenie klastra kończy się niepowodzeniem

Objaw: wdrażanie klastra usługi AKS kończy się niepowodzeniem

Rozwiązania:

  • Sprawdź, czy flagi funkcji są zarejestrowane: EncryptionAtHost, EnableAPIServerVnetIntegrationPreview
  • Sprawdź, czy wielkości podsieci są wystarczające dla liczby węzłów i zagęszczenia podów
  • Sprawdź, czy zestaw szyfrowania dysków i tożsamość zarządzana mają odpowiednie uprawnienia
  • Przejrzyj dziennik aktywności pod kątem określonych komunikatów o błędach

Węzły nie są gotowe

Objaw: Węzły wyświetlają status NotReady

Rozwiązania:

  • Sprawdź, czy podsieć węzła ma łączność wychodzącą z wymaganymi punktami końcowymi
  • Sprawdź, czy społecznościowe punkty końcowe obejmują wszystkie wymagane nazwy FQDN usługi AKS
  • Sprawdź, czy reguły NSG zezwalają na ruch wychodzący na porcie 443
  • Przejrzyj dzienniki węzłów: kubectl describe node <node-name>

Zasobniki nie mogą ściągać obrazów

Objaw: Pody utknęły w ImagePullBackOff

Rozwiązania:

  • Zweryfikuj, czy punkt końcowy społecznościowy zawiera mcr.microsoft.com i *.data.mcr.microsoft.com
  • Sprawdź, czy NSG zezwala na wychodzący ruch HTTPS na porcie 443
  • Upewnij się, że rozpoznawanie nazw DNS działa: nslookup mcr.microsoft.com z zasobnika
  • Sprawdź sekrety do pobierania obrazów, jeśli używasz rejestrów prywatnych

Nie można nawiązać połączenia z serwerem interfejsu API

Objaw: kubectl polecenia kończą się niepowodzeniem z powodu przekroczenia limitu czasu połączenia

Rozwiązania:

  • Upewnij się, że pracujesz na administracyjnej maszynie wirtualnej lub zasobie z łącznością z enklawą
  • Sprawdź, czy prywatna strefa DNS jest połączona z siecią wirtualną
  • Weryfikowanie konfiguracji podsieci serwera interfejsu API
  • Testuj rozpoznawanie nazw przez DNS: nslookup <cluster-fqdn>

Monitorowanie nie działa

Objaw: Brak dzienników ani metryk w Azure Monitor

Rozwiązania:

  • Sprawdzanie, czy dodatek Container Insights jest włączony
  • Sprawdź, czy punkty końcowe społecznościowe obejmują monitorowane nazwy FQDN
  • Sprawdź, czy obszar roboczy Log Analytics jest dostępny z klastra
  • Sprawdź, czy omsagent zasobniki są uruchomione: kubectl get pods -n kube-system | grep omsagent

Uprzątnij zasoby

Aby uniknąć bieżących opłat, usuń zasoby, gdy nie są już potrzebne.

Usuń klaster 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

Warning

Usunięcie klastra usługi AKS powoduje trwałe usunięcie wszystkich obciążeń i danych. Upewnij się, że masz kopie zapasowe w razie potrzeby.

Następne kroki

Ukończono serię samouczków dotyczącą wdrażania obciążeń Azure Virtual Desktop i AKS w Azure Enclave!