Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas tworzenia zasobu modułu równoważenia obciążenia w klastrze usługi Azure Kubernetes Service (AKS) publiczny adres IP przypisany do niego jest ważny tylko przez okres istnienia tego zasobu. Usunięcie usługi Kubernetes spowoduje również usunięcie skojarzonego modułu równoważenia obciążenia i adresu IP. Jeśli chcesz przypisać określony adres IP lub zachować adres IP do ponownego wdrożenia usług Kubernetes, możesz utworzyć statyczny publiczny adres IP i go użyć.
W tym artykule pokazano, jak utworzyć statyczny publiczny adres IP i przypisać go do usługi Kubernetes.
Zanim rozpoczniesz
- Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 2.0.59 lub nowszej, zainstalowany i skonfigurowany. 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. - W tym artykule opisano używanie adresu IP jednostki SKU w warstwie Standardowa z modułem równoważenia obciążenia jednostki SKU w warstwie Standardowa . Aby uzyskać więcej informacji, zobacz Typy adresów IP i metody alokacji na platformie Azure.
Tworzenie klastra AKS
Utwórz grupę zasobów platformy Azure przy użyciu
az group create
polecenia .az group create --name myNetworkResourceGroup --location eastus
Utwórz klaster AKS przy użyciu polecenia
az aks create
.az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
Tworzenie statycznego adresu IP
Aby uzyskać nazwę grupy zasobów węzła, użyj polecenia
az aks show
i zapytania o właściwośćnodeResourceGroup
.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
Utwórz statyczny publiczny adres IP w grupie zasobów węzła
az network public ip create
przy użyciu polecenia .az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method static
Uwaga
Jeśli używasz w klastrze AKS SKU Basic równoważnika obciążenia, użyj Basic dla parametru
--sku
podczas definiowania publicznego adresu IP. Tylko Podstawowe adresy IP SKU współpracują z podstawowym modułem równoważenia obciążenia SKU, a tylko Standardowe adresy IP SKU działają ze standardowymi modułami równoważenia obciążenia SKU.Pobierz statyczny publiczny adres IP przy użyciu
az network public-ip list
polecenia . Określ nazwę utworzonej grupy zasobów węzła i publiczny adres IP, a następnie wykonaj zapytanie dotyczące elementuipAddress
.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Tworzenie usługi przy użyciu statycznego adresu IP
Najpierw określ typ tożsamości zarządzanej, z której korzysta klaster usługi AKS, przypisany przez system lub przypisany przez użytkownika. Jeśli nie masz pewności, wywołaj polecenie az aks show i wykonaj zapytanie o właściwość typu tożsamości.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query identity.type \ --output tsv
Jeśli klaster korzysta z tożsamości zarządzanej, wartość właściwości type będzie SystemAssigned lub UserAssigned.
Jeśli klaster używa pryncypału usługi, właściwość typu będzie mieć wartość null. Rozważ aktualizację klastra, aby korzystać z zarządzanej tożsamości.
Jeśli klaster usługi AKS używa tożsamości zarządzanej przypisanej przez system, wykonaj zapytanie o identyfikator podmiotu tożsamości zarządzanej w następujący sposób:
# Get the principal ID for a system-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.principalId \ --output tsv)
Jeśli klaster usługi AKS używa tożsamości zarządzanej przypisanej przez użytkownika, identyfikator podmiotu zabezpieczeń będzie mieć wartość null. Zamiast tego wykonaj zapytanie dotyczące identyfikatora klienta tożsamości zarządzanej przypisanej przez użytkownika:
# Get the client ID for a user-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.userAssignedIdentities.*.clientId \ --output tsv
Przypisz delegowane uprawnienia do zarządzanej tożsamości używanej przez klaster AKS dla grupy zasobów, w której znajduje się publiczny adres IP, wywołując polecenie
az role assignment create
.# Get the resource ID for the node resource group. RG_SCOPE=$(az group show \ --name <node resource group> \ --query id \ --output tsv) # Assign the Network Contributor role to the managed identity, # scoped to the node resource group. az role assignment create \ --assignee ${CLIENT_ID} \ --role "Network Contributor" \ --scope ${RG_SCOPE}
Ważne
Jeśli dostosowano adres IP wychodzący, upewnij się, że tożsamość klastra ma uprawnienia zarówno do publicznego adresu IP wychodzącego, jak i publicznego adresu IP przychodzącego.
Utwórz plik o nazwie
load-balancer-service.yaml
i skopiuj zawartość następującego pliku YAML, podając własny publiczny adres IP utworzony w poprzednim kroku i nazwę grupy zasobów węzła.Ważne
Dodanie właściwości
loadBalancerIP
do manifestu YAML modułu równoważenia obciążenia jest uznawane za przestarzałe zgodnie z oryginalnymi wytycznymi projektu Kubernetes. Chociaż obecne wykorzystanie pozostaje niezmienione i istniejące usługi powinny działać bez modyfikacji, zdecydowanie zalecamy ustawienie adnotacji usługi. Aby ustawić adnotacje usługi, można użyćservice.beta.kubernetes.io/azure-pip-name
jako nazwy publicznego adresu IP albo użyćservice.beta.kubernetes.io/azure-load-balancer-ipv4
dla adresu IPv4 iservice.beta.kubernetes.io/azure-load-balancer-ipv6
dla adresu IPv6, jak pokazano w przykładowym YAML.apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancer
Uwaga
Dodanie adnotacji
service.beta.kubernetes.io/azure-pip-name
zapewnia najbardziej efektywne tworzenie LoadBalancer i zdecydowanie zaleca się jego stosowanie, aby uniknąć potencjalnego ograniczania przepustowości.Ustaw publiczne oznaczenie DNS dla usługi, korzystając z adnotacji usługi
service.beta.kubernetes.io/azure-dns-label-name
. Spowoduje to opublikowanie w pełni kwalifikowanej nazwy domeny (FQDN) dla usługi przy użyciu publicznych serwerów DNS platformy Azure i domeny najwyższego poziomu. Wartość adnotacji musi być unikatowa w obrębie lokalizacji platformy Azure, dlatego zalecamy użycie wystarczająco kwalifikowanej etykiety. Platforma Azure automatycznie dołącza domyślny sufiks w wybranej lokalizacji, takiej jak<location>.cloudapp.azure.com
, do podanej nazwy, tworząc nazwę FQDN.Uwaga
Jeśli chcesz opublikować usługę we własnej domenie, zobacz Azure DNS i projekt external-dns .
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label> name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancer
Utwórz usługę i wdrożenie przy użyciu polecenia
kubectl apply
.kubectl apply -f load-balancer-service.yaml
Aby wyświetlić etykietę DNS modułu równoważenia obciążenia, użyj
kubectl describe service
polecenia .kubectl describe service azure-load-balancer
Etykieta DNS zostanie wyświetlona w obszarze
Annotations
, jak pokazano w następujących skondensowanych przykładowych danych wyjściowych:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kuberenetes.io/azure-dns-label-name: <unique-service-label>
Rozwiązywanie problemów
Jeśli statyczny adres IP zdefiniowany we właściwości manifestu usługi Kubernetes nie istnieje lub nie został utworzony w grupie zasobów dla węzłów i nie ma skonfigurowanych żadnych innych konfiguracji delegacyjnych, tworzenie usługi równoważenia obciążenia zakończy się niepowodzeniem. Aby rozwiązać problemy, przejrzyj zdarzenia związane z tworzeniem usługi przy użyciu polecenia kubectl describe
. Podaj nazwę usługi określonej w manifeście YAML, jak pokazano w poniższym przykładzie:
kubectl describe service azure-load-balancer
Dane wyjściowe zawierają informacje o zasobie usługi Kubernetes. Następujące przykładowe dane wyjściowe pokazują element Warning
w pliku Events
: "user supplied IP address was not found
". W tym scenariuszu upewnij się, że w grupie zasobów węzła utworzono statyczny publiczny adres IP i że adres IP określony w manifeście usługi Kubernetes jest poprawny.
Name: azure-load-balancer
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=azure-load-balancer
Type: LoadBalancer
IP: 10.0.18.125
IP: 40.121.183.52
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32582/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatingLoadBalancer 7s (x2 over 22s) service-controller Creating load balancer
Warning CreatingLoadBalancerFailed 6s (x2 over 12s) service-controller Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found
Następne kroki
Aby uzyskać większą kontrolę nad ruchem sieciowym do aplikacji, użyj dodatku routingu aplikacji dla usługi AKS. Aby uzyskać więcej informacji na temat dodatku do routingu aplikacji, zobacz Zarządzany NGINX ingress z dodatkiem routingu aplikacji.
Azure Kubernetes Service