Udostępnij za pośrednictwem


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.

Uwaga

Usługa Azure Load Balancer jest dostępna w dwóch jednostkach SKU: Podstawowa i Standardowa. Jednostka SKU w warstwie Standardowa jest używana domyślnie podczas tworzenia klastra usługi AKS. Podczas tworzenia typu usługi LoadBalancer uzyskasz ten sam typ modułu równoważenia obciążenia co podczas aprowizowania klastra. Aby uzyskać więcej informacji, zobacz Porównanie jednostek SKU usługi Azure Load Balancer.

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 kubectl apply obciążenia przy użyciu polecenia . To polecenie tworzy moduł równoważenia obciążenia platformy Azure w grupie zasobów węzła połączonej z tą samą siecią wirtualną co klaster usługi 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 określony adres IP musi znajdować się w tej samej sieci wirtualnej co klaster usługi AKS, ale nie można go jeszcze przypisać do innego zasobu w sieci wirtualnej. Na przykład nie należy używać adresu IP w zakresie wyznaczonym dla podsieci Kubernetes w klastrze usługi AKS. Użycie adresu IP, który jest już przypisany do innego zasobu w tej samej sieci wirtualnej, może powodować problemy z modułem równoważenia obciążenia.

Aby uzyskać podsieci w sieci wirtualnej, możesz użyć az network vnet subnet list polecenia wiersza polecenia platformy Azure lub Get-AzVirtualNetworkSubnetConfig polecenia cmdlet 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

Dodanie właściwości LoadBalancerIP do manifestu YAML modułu równoważenia obciążenia jest przestarzałe po nadrzędnym rozwiązaniu 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.

  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
    
  1. 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

Zanim rozpoczniesz

  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 kubectl apply obciążenia przy użyciu polecenia . To polecenie tworzy moduł równoważenia obciążenia platformy Azure w grupie zasobów węzła połączonej z tą samą siecią wirtualną co klaster usługi AKS. Tworzy również obiekt usługi Private Link, który łączy się z konfiguracją adresu IP frontonu modułu równoważenia obciążenia skojarzonego z usługą 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 .

    # Create a variable for the private link service
    
    AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --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
    

Dostosowania PLS za pośrednictwem adnotacji

Poniżej przedstawiono adnotacje, których można użyć do dostosowania zasobu PLS.

Annotation Wartość Opis Wymagani Wartość domyślna
service.beta.kubernetes.io/azure-pls-create "true" Wartość logiczna wskazująca, czy należy utworzyć usługę PLS. Wymagania
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 zostanie utworzony 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 zostanie wdrożona usługa PLS. Ta podsieć musi istnieć w tej samej sieci wirtualnej co pula zaplecza. 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-subnetjest używana ta podsieć modułu równoważenia obciążenia. 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 nazw fqdn 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. Należy pamiętać, że usługa zaplecza MUSI obsługiwać protokół PROXY lub połączenia nie powiedzie się. Opcjonalnie false
service.beta.kubernetes.io/azure-pls-visibility "sub1 sub2 sub3 … subN" lub "*" Oddzielona spacją lista identyfikatorów subskrypcji platformy Azure, dla których widoczna jest usługa łącza prywatnego. Użyj "*" polecenia , aby uwidocznić usługę PLS dla wszystkich podsieci (najmniej restrykcyjne). Opcjonalnie Pusta lista [] wskazująca tylko kontrolę dostępu opartą na rolach: ta usługa łącza prywatnego będzie dostępna tylko dla osób z uprawnieniami kontroli dostępu na podstawie ról w katalogu. (Najbardziej restrykcyjne)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" Rozdzielona spacją lista identyfikatorów subskrypcji platformy Azure. Umożliwia to automatyczne zatwierdzanie żądań połączeń PE z subskrypcji wymienionych w usłudze PLS. To działa tylko wtedy, gdy widoczność jest ustawiona na "*". Opcjonalnie []

Korzystanie z sieci 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 tej samej grupie zasobów co klaster usługi AKS, ale zamiast tego jest 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 usługi AKS musi mieć co najmniej rolę Współautor 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ółautor sieci można przypisać za pomocą az role assignment create polecenia , 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
    

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

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

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.