Udostępnij za pośrednictwem


Tworzenie izolowanego klastra usługi Azure Kubernetes Service (AKS) sieci (wersja zapoznawcza)

Organizacje zwykle mają ścisłe wymagania dotyczące zabezpieczeń i zgodności, aby regulować ruch sieciowy wychodzący (wychodzący) z klastra w celu wyeliminowania ryzyka eksfiltracji danych. Domyślnie klastry usługi Azure Kubernetes Service (AKS) mają nieograniczony wychodzący dostęp do Internetu. Ten poziom dostępu do sieci umożliwia węzłom i usługom, które są uruchamiane w celu uzyskania dostępu do zasobów zewnętrznych zgodnie z potrzebami. Jeśli chcesz ograniczyć ruch wychodzący, ograniczona liczba portów i adresów musi być dostępna, aby zachować zadania konserwacji klastra w dobrej kondycji.

Jednym z rozwiązań do zabezpieczania adresów wychodzących jest użycie urządzenia zapory, które może kontrolować ruch wychodzący na podstawie nazw domen.

Inne rozwiązanie, izolowany klaster usługi AKS w sieci (wersja zapoznawcza), upraszcza konfigurowanie ograniczeń ruchu wychodzącego dla klastra gotowego do użycia. Izolowany klaster usługi AKS w sieci zmniejsza ryzyko eksfiltracji danych lub niezamierzonego ujawnienia publicznych punktów końcowych klastra.

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Zanim rozpoczniesz

  • Zapoznaj się z koncepcyjnym omówieniem tej funkcji, która zawiera wyjaśnienie sposobu działania izolowanych klastrów sieciowych. Artykuł z omówieniem:
  • Ten artykuł wymaga wersji 2.63.0 lub nowszej interfejsu wiersza polecenia platformy Azure. Jeśli używasz usługi Azure Cloud Shell, najnowsza wersja jest już tam zainstalowana.

  • Zainstaluj rozszerzenie interfejsu wiersza polecenia platformy aks-preview Azure w wersji 9.0.0b2 lub nowszej.

    • Jeśli nie masz aks-preview jeszcze rozszerzenia, zainstaluj je przy użyciu az extension add polecenia .

      az extension add --name aks-preview
      
    • Jeśli masz aks-preview już rozszerzenie, zaktualizuj je, aby upewnić się, że masz najnowszą wersję przy użyciu az extension update polecenia .

      az extension update --name aks-preview
      
  • Zarejestruj flagę NetworkIsolatedClusterPreview funkcji przy użyciu polecenia az feature register .

    az feature register --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Sprawdź stan rejestracji przy użyciu polecenia az feature show . Wyświetlenie stanu Zarejestrowane trwa kilka minut:

    az feature show --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Uwaga

    Jeśli zdecydujesz się utworzyć izolowany klaster sieciowy z integracją z siecią wirtualną usługi API Server skonfigurowaną pod kątem dostępu prywatnego serwera interfejsu API, należy powtórzyć powyższe kroki, aby zarejestrować EnableAPIServerVnetIntegrationPreview flagę funkcji. Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację Microsoft.ContainerService dostawców zasobów i Microsoft.ContainerRegistry przy użyciu polecenia az provider register :

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Jeśli wybierasz opcję Bring your own (BYO) Azure Container Registry (ACR), upewnij się, że usługa ACR spełnia następujące wymagania:

  • (Opcjonalnie) Jeśli chcesz użyć dowolnej opcjonalnej funkcji usługi AKS lub dodatku, która wymaga dostępu do sieci wychodzącej, ten dokument zawiera wymagania dotyczące ruchu wychodzącego dla każdej funkcji. Ponadto ten dokument wylicza funkcje lub dodatki, które obsługują integrację linków prywatnych na potrzeby bezpiecznego połączenia z sieci wirtualnej klastra. Jeśli integracja linków prywatnych nie jest dostępna dla żadnej z tych funkcji, klaster można skonfigurować przy użyciu tabeli routingu zdefiniowanego przez użytkownika i usługi Azure Firewall na podstawie reguł sieci i reguł aplikacji wymaganych dla tej funkcji.

Uwaga

Następujące rozszerzenia klastra usługi AKS nie są jeszcze obsługiwane w klastrach izolowanych w sieci:

Wdrażanie izolowanego klastra sieciowego za pomocą usługi ACR zarządzanej przez usługę AKS

Usługa AKS tworzy, zarządza i uzgadnia zasób usługi ACR w tej opcji. Nie musisz przypisywać żadnych uprawnień ani zarządzać usługą ACR. Usługa AKS zarządza regułami pamięci podręcznej, linkiem prywatnym i prywatnym punktem końcowym używanym w izolowanym klastrze sieci.

Tworzenie izolowanego klastra sieciowego

Podczas tworzenia izolowanego klastra usługi AKS w sieci można wybrać jeden z następujących trybów klastra prywatnego — usługa Private Link lub integracja z siecią wirtualną serwera interfejsu API.

Niezależnie od wybranego trybu należy ustawić --bootstrap-artifact-source i --outbound-type parametry.

--bootstrap-artifact-sourcemożna ustawić na wartość lub Cache odpowiadać Direct funkcji bezpośredniej mcR (NIE izolowanej sieci) i prywatnej usługi ACR (izolowanej sieci) na potrzeby ściągania obrazów.

--outbound-type parameter Można go ustawić na none wartość lub block. Jeśli typ ruchu wychodzącego jest ustawiony na nonewartość , usługa AKS nie konfiguruje żadnych połączeń wychodzących dla klastra, co pozwala użytkownikowi na ich samodzielne skonfigurowanie. Jeśli typ ruchu wychodzącego jest ustawiony na wartość bloku, wszystkie połączenia wychodzące są blokowane.

Utwórz izolowany klaster usługi AKS w sieci prywatnej, uruchamiając polecenie az aks create z parametrami --bootstrap-artifact-source, --enable-private-clusteri --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

Integracja z siecią wirtualną serwera API

Utwórz izolowany klaster usługi AKS w sieci wirtualnej interfejsu API Server, uruchamiając polecenie az aks create z parametrami --bootstrap-artifact-source, --enable-private-cluster--enable-apiserver-vnet-integration i --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

Aktualizowanie istniejącego klastra usługi AKS do typu izolowanego sieci

Jeśli wolisz włączyć izolację sieci w istniejącym klastrze usługi AKS zamiast tworzyć nowy klaster, użyj polecenia az aks update .

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

Po włączeniu tej funkcji wszystkie nowo dodane węzły mogą pomyślnie uruchomić bez ruchu wychodzącego. Po włączeniu izolacji sieciowej w istniejącym klastrze należy pamiętać, że należy ręcznie odtworzyć wszystkie istniejące węzły.

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

Ważne

Pamiętaj, aby odtworzyć obraz pul węzłów klastra po włączeniu trybu izolacji sieciowej dla istniejącego klastra. W przeciwnym razie funkcja nie będzie obowiązywać dla klastra.

Wdrażanie izolowanego klastra sieciowego przy użyciu usługi Bring Your Own ACR

Usługa AKS obsługuje wprowadzanie własnego (BYO) usługi ACR. Aby obsługiwać scenariusz usługi BYO ACR, przed utworzeniem klastra AKS należy skonfigurować prywatny punkt końcowy usługi ACR i prywatną strefę DNS.

W poniższych krokach pokazano, jak przygotować te zasoby:

  • Niestandardowa sieć wirtualna i podsieci dla usług AKS i ACR.
  • Reguły usługi ACR, reguły pamięci podręcznej usługi ACR, prywatny punkt końcowy i prywatna strefa DNS.
  • Niestandardowa tożsamość płaszczyzny sterowania i tożsamość kubeletu.

Krok 1. Tworzenie sieci wirtualnej i podsieci

Domyślny dostęp wychodzący dla podsieci usługi AKS musi mieć wartość false.

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 --default-outbound-access false

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

Krok 2. Tworzenie usługi ACR i włączanie pamięci podręcznej artefaktów

  1. Utwórz usługę ACR przy użyciu linku prywatnego i anonimowego dostępu do ściągania.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    az acr update --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --anonymous-pull-enabled true
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Utwórz regułę pamięci podręcznej usługi ACR, aby umożliwić użytkownikom buforowanie obrazów kontenerów MCR w nowym rejestrze ACR.

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

Krok 3. Tworzenie prywatnego punktu końcowego dla usługi 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)

Krok 4. Tworzenie prywatnej strefy DNS i dodawanie rekordów

Utwórz prywatną strefę DNS o nazwie privatelink.azurecr.io. Dodaj rekordy dla punktu końcowego {REGISTRY_NAME}.azurecr.ioREST rejestru i punkt końcowy {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.iodanych rejestru .

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}

Krok 5. Tworzenie płaszczyzny sterowania i tożsamości kubelet

Tożsamość płaszczyzny sterowania

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)

Tożsamość rozwiązania 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)

Udzielanie uprawnień usługi AcrPull dla tożsamości kubelet

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

Po skonfigurowaniu tych zasobów można utworzyć izolowany klaster usługi AKS sieci za pomocą usługi BYO ACR.

Krok 6. Tworzenie klastra izolowanego sieci przy użyciu usługi BYO ACR

Podczas tworzenia izolowanego klastra usługi AKS w sieci można wybrać jeden z następujących trybów klastra prywatnego — usługa Private Link lub integracja z siecią wirtualną serwera interfejsu API.

Niezależnie od wybranego trybu należy ustawić --bootstrap-artifact-source i --outbound-type parametry.

--bootstrap-artifact-sourcemożna ustawić na wartość lub Cache odpowiadać Direct funkcji bezpośredniej mcR (NIE izolowanej sieci) i prywatnej usługi ACR (izolowanej sieci) na potrzeby ściągania obrazów.

--outbound-type parameter Można go ustawić na none wartość lub block. Jeśli typ ruchu wychodzącego jest ustawiony na nonewartość , usługa AKS nie konfiguruje żadnych połączeń wychodzących dla klastra, co pozwala użytkownikowi na ich samodzielne skonfigurowanie. Jeśli typ ruchu wychodzącego jest ustawiony na wartość bloku, wszystkie połączenia wychodzące są blokowane.

Utwórz izolowany klaster sieci oparty na łączach prywatnych, który uzyskuje dostęp do usługi ACR, uruchamiając polecenie az aks create z wymaganymi parametrami.

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

Integracja z siecią wirtualną serwera API

W przypadku izolowanego klastra sieciowego z integracją z siecią wirtualną serwera interfejsu API najpierw utwórz podsieć i przypisz poprawną rolę za pomocą następujących poleceń:

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

Utwórz izolowany w sieci klaster usługi AKS skonfigurowany przy użyciu integracji z siecią wirtualną serwera API i uzyskaj dostęp do usługi ACR, uruchamiając polecenie az aks create z wymaganymi parametrami.

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}

Aktualizowanie istniejącego klastra usługi AKS

Jeśli wolisz włączyć izolację sieci w istniejącym klastrze usługi AKS zamiast tworzyć nowy klaster, użyj polecenia az aks update .

Podczas tworzenia prywatnego punktu końcowego i prywatnej strefy DNS dla usługi BYO ACR użyj istniejącej sieci wirtualnej i podsieci istniejącego klastra usługi AKS. Po przypisaniu uprawnienia usługi AcrPull do tożsamości kubelet użyj istniejącej tożsamości kubelet istniejącego klastra AKS.

Aby włączyć funkcję izolowanej sieci w istniejącym klastrze usługi AKS, użyj następującego polecenia:

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

Po włączeniu funkcji izolowanego klastra sieci węzły w nowo dodanej puli węzłów mogą pomyślnie uruchamiać się bez ruchu wychodzącego. Należy odtworzyć istniejące pule węzłów, aby nowo skalowany węzeł mógł pomyślnie uruchomić. Po włączeniu funkcji w istniejącym klastrze należy ręcznie odtworzyć wszystkie istniejące węzły.

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

Ważne

Pamiętaj, aby odtworzyć pule węzłów klastra po włączeniu funkcji klastra izolowanego sieci. W przeciwnym razie funkcja nie będzie obowiązywać dla klastra.

Aktualizowanie identyfikatora usługi ACR

Istnieje możliwość zaktualizowania prywatnego rejestru ACR używanego z izolowanym klastrem usługi AKS sieci. Aby zidentyfikować identyfikator zasobu usługi ACR, użyj az aks show polecenia .

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

Aktualizowanie identyfikatora usługi ACR jest wykonywane przez uruchomienie az aks update polecenia z parametrami --bootstrap-artifact-source i --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>

Po zaktualizowaniu identyfikatora usługi ACR w istniejącym klastrze należy ręcznie odtworzyć wszystkie istniejące węzły.

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

Ważne

Pamiętaj, aby odtworzyć pule węzłów klastra po włączeniu funkcji klastra izolowanego sieci. W przeciwnym razie funkcja nie będzie obowiązywać dla klastra.

Sprawdzanie, czy klaster izolowany w sieci jest włączony

Aby sprawdzić, czy funkcja klastra izolowanego sieci jest włączona, użyj polecenia "az aks show"

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

Następujące dane wyjściowe pokazują, że funkcja jest włączona na podstawie wartości outboundType właściwości (brak lub zablokowane) i artifactSource właściwości (Buforowane).

"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"
  },
  ...
}

Wyłączanie klastra izolowanego sieci

Wyłącz funkcję izolowanego klastra sieci, uruchamiając az aks update polecenie z parametrami --bootstrap-artifact-source i --outbound-type .

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

Po wyłączeniu funkcji w istniejącym klastrze należy ręcznie odtworzyć wszystkie istniejące węzły.

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

Ważne

Pamiętaj, aby odtworzyć obraz pul węzłów klastra po wyłączeniu funkcji klastra izolowanego sieci. W przeciwnym razie funkcja nie będzie obowiązywać dla klastra.

Następne kroki

W tym artykule przedstawiono, jakie porty i adresy mają być dozwolone, jeśli chcesz ograniczyć ruch wychodzący dla klastra.

Jeśli chcesz skonfigurować konfigurację ograniczeń ruchu wychodzącego przy użyciu usługi Azure Firewall, odwiedź stronę Kontrolowanie ruchu wychodzącego przy użyciu usługi Azure Firewall w usłudze AKS.

Jeśli chcesz ograniczyć sposób komunikacji zasobników między sobą a ograniczeniami ruchu wschodnio-zachodniego w klastrze, zobacz Zabezpieczanie ruchu między zasobnikami przy użyciu zasad sieciowych w usłudze AKS.