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
- W tym artykule założono, że masz istniejący klaster usługi AKS. Jeśli potrzebujesz klastra usługi AKS, możesz go utworzyć przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
- Potrzebujesz interfejsu wiersza polecenia platformy Azure w wersji 2.0.59 lub nowszej. Uruchom polecenie
az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. - Jeśli chcesz użyć istniejącej podsieci lub grupy zasobów, tożsamość klastra usługi AKS musi mieć uprawnienia do zarządzania zasobami sieciowymi. Aby uzyskać informacje, zobacz Używanie sieci kubenet z własnymi zakresami adresów IP w usłudze AKS lub Konfigurowanie sieci usługi Azure CNI w usłudze AKS. Jeśli konfigurujesz moduł równoważenia obciążenia tak, aby używał adresu IP w innej podsieci, upewnij się, że tożsamość klastra usługi AKS ma również dostęp do odczytu do tej podsieci.
- Aby uzyskać więcej informacji na temat uprawnień, zobacz Delegowanie dostępu do usługi AKS do innych zasobów platformy Azure.
Utwórz wewnętrzny moduł równoważenia obciążenia.
Utwórz manifest usługi o nazwie
internal-lb.yaml
z typemLoadBalancer
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
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
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.
- Ustawianie adnotacji usługi
- Dodawanie właściwości LoadBalancerIP do manifestu YAML modułu równoważenia obciążenia
Ustaw adnotacje usługi przy użyciu
service.beta.kubernetes.io/azure-load-balancer-ipv4
dla adresu IPv4 iservice.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
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
Łączenie usługi Azure Private Link z wewnętrznym modułem równoważenia obciążenia
Zanim rozpoczniesz
- Potrzebujesz rozwiązania Kubernetes w wersji 1.22.x lub nowszej.
- Potrzebna jest istniejąca grupa zasobów z siecią wirtualną i podsiecią. Ta grupa zasobów służy do tworzenia prywatnego punktu końcowego. Jeśli nie masz tych zasobów, zobacz Tworzenie sieci wirtualnej i podsieci.
Tworzenie połączenia usługi Private Link
Utwórz manifest usługi o nazwie z
internal-lb-pls.yaml
typemLoadBalancer
usługi iazure-load-balancer-internal
adnotacjami iazure-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
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
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
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
Tworzenie prywatnego punktu końcowego w usłudze Private Link
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-subnet jest 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żeniaEXTERNAL-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.
Azure Kubernetes Service