Używanie wewnętrznego modułu równoważenia obciążenia z usługą Azure Kubernetes Service (AKS)

Możesz utworzyć i użyć wewnętrznego modułu równoważenia obciążenia, aby ograniczyć dostęp do aplikacji w usłudze Azure Kubernetes Service (AKS). Wewnętrzny moduł równoważenia obciążenia nie ma publicznego adresu IP i sprawia, że usługa Kubernetes jest dostępna tylko dla aplikacji, które mogą uzyskać dostęp do prywatnego adresu IP. Te aplikacje mogą znajdować się w tej samej sieci wirtualnej lub w innej sieci wirtualnej za pośrednictwem komunikacji równorzędnej sieci wirtualnych. W tym artykule przedstawiono sposób tworzenia i używania wewnętrznego modułu równoważenia obciążenia za pomocą usługi AKS.

Ważne

Od 30 września 2025 r. usługa Azure Kubernetes Service (AKS) nie obsługuje już usługi Load Balancer w warstwie Podstawowa. Aby uniknąć potencjalnych zakłóceń usługi, zalecamy użycie usługi Load Balancer w warstwie Standardowa dla nowych wdrożeń i uaktualnienie istniejących wdrożeń do usługi Load Balancer w warstwie Standardowa. Aby uzyskać więcej informacji na temat tego wycofania, zobacz zgłoszenie GitHub dotyczące wycofania i ogłoszenie o wycofaniu na platformie Azure Updates. Aby być na bieżąco z ogłoszeniami i aktualizacjami, śledź notatki o wydaniu AKS.

Zanim rozpoczniesz

Utwórz wewnętrzny moduł równoważenia obciążenia.

  1. Utwórz manifest usługi o nazwie internal-lb.yaml z typem LoadBalancer usługi i adnotacją azure-load-balancer-internal .

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Wdróż wewnętrzny moduł równoważenia obciążenia przy użyciu polecenia kubectl apply. To polecenie tworzy równoważnik obciążenia Azure w grupie zasobów węzłów, łączonej z tą samą siecią wirtualną co klaster AKS.

    kubectl apply -f internal-lb.yaml
    
  3. Wyświetl szczegóły usługi przy użyciu kubectl get service polecenia .

    kubectl get service internal-app
    

    Adres IP wewnętrznego modułu równoważenia obciążenia jest wyświetlany w EXTERNAL-IP kolumnie, jak pokazano w poniższych przykładowych danych wyjściowych. W tym kontekście External odnosi się do zewnętrznego interfejsu modułu równoważenia obciążenia. Nie oznacza to, że otrzymuje publiczny, zewnętrzny adres IP. Ten adres IP jest dynamicznie przypisywany z tej samej podsieci co klaster usługi AKS.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.248.59   10.240.0.7    80:30555/TCP   2m
    

Określanie adresu IP

Po określeniu adresu IP modułu równoważenia obciążenia adres IP musi być dostępny w podsieci używanej przez moduł równoważenia obciążenia. Domyślnie moduł równoważenia obciążenia używa tej samej podsieci co klaster usługi AKS. Nie używaj adresu IP zarezerwowanego przez platformę Azure, adresu IP już przypisanego do innego zasobu ani adresu IP z zakresu CIDR usługi Kubernetes.

Aby uzyskać podsieci w sieci wirtualnej, możesz użyć polecenia az network vnet subnet list Azure CLI lub polecenia cmdlet Get-AzVirtualNetworkSubnetConfig programu PowerShell.

Aby uzyskać więcej informacji na temat podsieci, zobacz Dodawanie puli węzłów z unikatową podsiecią.

Jeśli chcesz użyć określonego adresu IP z modułem równoważenia obciążenia, masz dwie opcje: ustaw adnotacje usługi lub dodaj właściwość LoadBalancerIP do manifestu YAML modułu równoważenia obciążenia.

Ważne

Dodawanie właściwości LoadBalancerIP do manifestu YAML modułu równoważenia obciążenia jest wycofywane zgodnie z upstream Kubernetes. Chociaż bieżące użycie pozostaje takie same, a istniejące usługi powinny działać bez modyfikacji, zdecydowanie zalecamy ustawienie adnotacji usługi. Aby uzyskać więcej informacji na temat adnotacji usług, zobacz adnotacje obsługiwane przez usługę Azure Load Balancer.

  1. Ustaw adnotacje usługi przy użyciu service.beta.kubernetes.io/azure-load-balancer-ipv4 dla adresu IPv4 i service.beta.kubernetes.io/azure-load-balancer-ipv6 adresu IPv6.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Wyświetl szczegóły usługi przy użyciu kubectl get service polecenia .

    kubectl get service internal-app
    

    Adres IP w kolumnie EXTERNAL-IP powinien odzwierciedlać określony adres IP, jak pokazano w następujących przykładowych danych wyjściowych:

    NAME           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.184.168   10.240.0.25   80:30225/TCP   4m
    

Aby uzyskać więcej informacji na temat konfigurowania modułu równoważenia obciążenia w innej podsieci, zobacz Określanie innej podsieci.

Ważne

usługa Private Link ma następujące ograniczenia:

  • usługa Private Link obsługuje tylko ruch IPv4 i obsługuje tylko protokoły transportu TCP i UDP.
  • Jeśli usługa używa externalTrafficPolicy: Localusługi , podsieć usługi Private Link musi być inna niż podsieć zasobnika. Aby użyć tej samej podsieci, ustaw externalTrafficPolicy na Cluster.
  • Jeśli włączysz protokół PROXY i użyjesz externalTrafficPolicy: Local, musisz skonfigurować niestandardową sondę kondycji, ponieważ domyślna sonda kondycji nie powiedzie się.

Aby uzyskać więcej informacji, zobacz ograniczenia usługi Private Link i ograniczenia integracji usługi Azure Private Link.

  1. Utwórz manifest usługi o nazwie z internal-lb-pls.yaml typem LoadBalancer usługi i azure-load-balancer-internal adnotacjami i azure-pls-create . Aby uzyskać więcej opcji, zapoznaj się z dokumentem projektowym integracji usługi Azure Private Link.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
        service.beta.kubernetes.io/azure-pls-create: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Wdróż wewnętrzny moduł równoważenia obciążenia przy użyciu polecenia kubectl apply. To polecenie tworzy równoważnik obciążenia Azure w grupie zasobów węzłów, łączonej z tą samą siecią wirtualną co klaster AKS. Tworzy również obiekt usługi Private Link, który łączy się z konfiguracją adresu IP frontonu wewnętrznego modułu równoważenia obciążenia skojarzonego z obiektem usługi Kubernetes.

    kubectl apply -f internal-lb-pls.yaml
    
  3. Wyświetl szczegóły usługi przy użyciu kubectl get service polecenia .

    kubectl get service internal-app
    

    Adres IP wewnętrznego modułu równoważenia obciążenia jest wyświetlany w EXTERNAL-IP kolumnie, jak pokazano w poniższych przykładowych danych wyjściowych. W tym kontekście External odnosi się do zewnętrznego interfejsu modułu równoważenia obciążenia. Nie oznacza to, że otrzymuje publiczny, zewnętrzny adres IP.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.125.17.53  10.125.0.66   80:30430/TCP   64m
    
  4. Wyświetl szczegóły obiektu usługi Private Link przy użyciu az network private-link-service list polecenia .

    # Create a variable for the node resource group
    
    AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
    
    # View the details of the Private Link Service object
    
    az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
    

    Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:

    Name      Alias
    --------  -------------------------------------------------------------------------
    pls-xyz   pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
    

Prywatny punkt końcowy umożliwia prywatne łączenie się z obiektem usługi Kubernetes za pośrednictwem utworzonej usługi Private Link.

Utwórz prywatny punkt końcowy przy użyciu az network private-endpoint create polecenia . Zastąp pls-xyz nazwą usługi Private Link Service zwróconą w poprzednim kroku.

Ustaw --resource-group na docelową grupę zasobów, w której chcesz utworzyć prywatny punkt końcowy. Ustaw --vnet-name i --subnet na sieć wirtualną i podsieć, która zawiera prywatny punkt końcowy. Ustaw --private-connection-resource-id wartość identyfikatora zasobu usługi Private Link pobranego w pliku AKS_PLS_ID.

# Create variables for the Private Link Service

AKS_PLS_NAME=pls-xyz
AKS_PLS_ID=$(az network private-link-service show -g $AKS_MC_RG --name $AKS_PLS_NAME --query id -o tsv)

# Create the private endpoint

az network private-endpoint create \
    -g myOtherResourceGroup \
    --name myAKSServicePE \
    --vnet-name myOtherVNET \
    --subnet pe-subnet \
    --private-connection-resource-id $AKS_PLS_ID \
    --connection-name connectToMyK8sService

Aby dostosować zasób PLS, możesz użyć następujących adnotacji:

Adnotacja Wartość Opis Wymagane Wartość domyślna
service.beta.kubernetes.io/azure-pls-create "true" Wartość logiczna wskazująca, czy należy utworzyć usługę PLS. Wymagane
service.beta.kubernetes.io/azure-pls-name <PLS name> Ciąg określający nazwę zasobu PLS do utworzenia. Opcjonalnie "pls-<LB frontend config name>"
service.beta.kubernetes.io/azure-pls-resource-group Resource Group name Ciąg określający nazwę grupy zasobów, w której jest tworzony zasób PLS Opcjonalnie MC_resource
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet <Subnet name> Ciąg wskazujący podsieć, do której wdrożono usługę PLS. Ta podsieć musi istnieć w tej samej sieci wirtualnej co pula zaplecza technicznego. Adresy IP translatora adresów sieciowych USŁUGI PLS są przydzielane w tej podsieci. Opcjonalnie Jeśli service.beta.kubernetes.io/azure-load-balancer-internal-subnet, używana jest ta podsieć ILB. W przeciwnym razie używana jest domyślna podsieć z pliku konfiguracji.
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count [1-8] Łączna liczba prywatnych adresów IP translatora adresów sieciowych do przydzielenia. Opcjonalnie 1
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address "10.0.0.7 ... 10.0.0.10" Rozdzielona spacją lista statycznych adresów IP IPv4 do przydzielenia. (Protokół IPv6 nie jest obecnie obsługiwany). Łączna liczba adresów IP nie powinna być większa niż liczba adresów IP określonych w elem service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count. Jeśli określono mniej adresów IP, pozostałe są przydzielane dynamicznie. Pierwszy adres IP na liście jest ustawiony jako Primary. Opcjonalnie Wszystkie adresy IP są przydzielane dynamicznie.
service.beta.kubernetes.io/azure-pls-fqdns "fqdn1 fqdn2" Rozdzielona spacją lista w pełni kwalifikowanych nazw domen skojarzonych z usługą PLS. Opcjonalnie []
service.beta.kubernetes.io/azure-pls-proxy-protocol "true" lub "false" Wartość logiczna wskazująca, czy protokół TCP PROXY powinien być włączony w usłudze PLS w celu przekazywania informacji o połączeniu, w tym identyfikatora łącza i źródłowego adresu IP. Usługa zaplecza MUSI obsługiwać protokół PROXY lub połączenie kończy się niepowodzeniem. Opcjonalnie false
service.beta.kubernetes.io/azure-pls-visibility "sub1 sub2 sub3 … subN" lub "*" Oddzielona spacją lista identyfikatorów subskrypcji Azure, dla których jest widoczna usługa Private Link. Użyj "*" , aby uwidocznić usługę PLS dla wszystkich subskrybentów (najmniej restrykcyjne). Opcjonalnie Pusta lista [] wskazująca, że obowiązuje wyłącznie kontrola dostępu oparta na rolach: Ta usługa Private Link jest dostępna tylko dla użytkowników z wymaganymi uprawnieniami kontroli dostępu opartej na rolach (Azure RBAC), w tym dla autoryzowanych użytkowników z innych dzierżaw. (Najbardziej restrykcyjne)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" Rozdzielona spacją lista identyfikatorów subskrypcji Azure, których żądania połączenia PE z usługą PLS są automatycznie zatwierdzane. Lista automatycznego zatwierdzania musi być podzbiorem listy widoczności. Opcjonalnie []

Użyj wewnętrznego modułu równoważenia obciążenia w sieciach prywatnych

Podczas tworzenia klastra usługi AKS można określić zaawansowane ustawienia sieci. Te ustawienia umożliwiają wdrożenie klastra w istniejącej sieci wirtualnej i podsieci platformy Azure. Możesz na przykład wdrożyć klaster usługi AKS w sieci prywatnej połączonej ze środowiskiem lokalnym i uruchamiać usługi, które są dostępne tylko wewnętrznie.

Aby uzyskać więcej informacji, zobacz konfigurowanie własnych podsieci sieci wirtualnych za pomocą rozwiązania Kubenet lub usługi Azure CNI.

Nie musisz wprowadzać żadnych zmian w poprzednich krokach w celu wdrożenia wewnętrznego modułu równoważenia obciążenia korzystającego z sieci prywatnej w klastrze usługi AKS. Moduł równoważenia obciążenia jest tworzony w grupie zasobów węzła dla klastra usługi AKS i połączony z prywatną siecią wirtualną i podsiecią, jak pokazano w poniższym przykładzie:

kubectl get service internal-app

NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
internal-app   LoadBalancer   10.1.15.188   10.0.0.35     80:31669/TCP   1m

Uwaga

Tożsamość klastra używana przez klaster AKS musi mieć co najmniej rolę Współtwórcy sieci w zasobie sieci wirtualnej. Tożsamość klastra można wyświetlić przy użyciu az aks show polecenia , takiego jak az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". Rolę Współautora sieci można przypisać za pomocą polecenia az role assignment create, takiego jak az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".

Jeśli zamiast tego chcesz zdefiniować rolę niestandardową, potrzebne są następujące uprawnienia:

  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read

Aby uzyskać więcej informacji, zobacz Dodawanie, zmienianie lub usuwanie podsieci sieci wirtualnej.

Określanie innej podsieci

Dodaj adnotację azure-load-balancer-internal-subnet do usługi, aby określić podsieć modułu równoważenia obciążenia. Określona podsieć musi znajdować się w tej samej sieci wirtualnej co klaster usługi AKS. Po wdrożeniu adres modułu równoważenia EXTERNAL-IP obciążenia jest częścią określonej podsieci.

apiVersion: v1
kind: Service
metadata:
  name: internal-app
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: internal-app

Ustaw wartość adnotacji service.beta.kubernetes.io/azure-load-balancer-internal-subnet na ciąg znaków z nazwą podsieci, na przykład "apps-subnet".

Usuwanie modułu równoważenia obciążenia

Moduł równoważenia obciążenia jest usuwany po usunięciu wszystkich jego usług Kubernetes.

Podobnie jak w przypadku dowolnego zasobu Kubernetes, możesz bezpośrednio usunąć usługę, taką jak kubectl delete service internal-app, która również usuwa bazowy moduł równoważenia obciążenia platformy Azure.

Następne kroki

Aby dowiedzieć się więcej na temat usług Kubernetes, zobacz dokumentację usług Kubernetes.