Použití statické veřejné IP adresy a popisku DNS s nástrojem pro vyrovnávání zatížení Azure Kubernetes Service (AKS)
Když vytvoříte prostředek nástroje pro vyrovnávání zatížení v clusteru Azure Kubernetes Service (AKS), veřejná IP adresa, která je k němu přiřazená, platí jenom po dobu životnosti tohoto prostředku. Pokud odstraníte službu Kubernetes, odstraní se i přidružený nástroj pro vyrovnávání zatížení a přidružená IP adresa. Pokud chcete znovu nasazeným službám Kubernetes přiřadit konkrétní IP adresu nebo zachovat jejich IP adresu, můžete vytvořit a použít statickou veřejnou IP adresu.
V tomto článku se dozvíte, jak vytvořit statickou veřejnou IP adresu a přiřadit ji ke službě Kubernetes.
Než začnete
- Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.0.59 nebo novější. Verzi zjistíte spuštěním příkazu
az --version
. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI. - Tento článek popisuje použití IP adresy skladové položky Standard s nástrojem pro vyrovnávání zatížení skladové položky Standard . Další informace najdete v tématu Typy IP adres a metody přidělování v Azure.
Vytvoření clusteru AKS
Pomocí příkazu vytvořte skupinu
az group create
prostředků Azure.az group create --name myNetworkResourceGroup --location eastus
Pomocí příkazu vytvořte cluster
az aks create
AKS.az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
Vytvoření statické IP adresy
Pomocí příkazu a dotazu na
nodeResourceGroup
vlastnost získejteaz aks show
název skupiny prostředků uzlu.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
Pomocí příkazu vytvořte statickou veřejnou IP adresu ve skupině
az network public ip create
prostředků uzlu.az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method static
Poznámka:
Pokud v clusteru AKS používáte nástroj pro vyrovnávání zatížení skladové položky Basic, při definování veřejné IP adresy použijte pro parametr Basic
--sku
. S nástrojem pro vyrovnávání zatížení skladové položky Basic fungují jenom IP adresy skladových položek Úrovně Basic a pouze IP adresy SKU Úrovně Standard fungují s nástroji pro vyrovnávání zatížení SKU Úrovně Standard.Pomocí příkazu získejte statickou veřejnou IP adresu
az network public-ip list
. Zadejte název skupiny prostředků uzlu a veřejnou IP adresu, kterou jste vytvořili, a zadejte dotaz naipAddress
.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Vytvoření služby pomocí statické IP adresy
Nejprve určete, jaký typ spravované identity váš cluster AKS používá, přiřazený systémem nebo přiřazený uživatelem. Pokud si nejste jistí, zavolejte příkaz az aks show a zadejte dotaz na vlastnost typu identity.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query identity.type \ --output tsv
Pokud cluster používá spravovanou identitu, hodnota vlastnosti typu bude buď SystemAssigned , nebo UserAssigned.
Pokud cluster používá instanční objekt, hodnota vlastnosti typu bude null. Zvažte upgrade clusteru tak, aby používal spravovanou identitu.
Pokud váš cluster AKS používá spravovanou identitu přiřazenou systémem, zadejte dotaz na ID objektu zabezpečení spravované identity následujícím způsobem:
# 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)
Pokud váš cluster AKS používá spravovanou identitu přiřazenou uživatelem, bude ID objektu zabezpečení null. Místo toho zadejte dotaz na ID klienta spravované identity přiřazené uživatelem:
# 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
Přiřaďte delegovaná oprávnění pro spravovanou identitu používanou clusterem AKS pro skupinu prostředků veřejné IP adresy voláním
az role assignment create
příkazu.# 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}
Důležité
Pokud jste přizpůsobili odchozí IP adresu, ujistěte se, že vaše identita clusteru má oprávnění k odchozí veřejné IP adrese i k příchozí veřejné IP adrese.
Vytvořte soubor s názvem
load-balancer-service.yaml
a zkopírujte do obsahu následujícího souboru YAML a zadejte vlastní veřejnou IP adresu vytvořenou v předchozím kroku a název skupiny prostředků uzlu.Důležité
loadBalancerIP
Přidání vlastnosti do manifestu YAML nástroje pro vyrovnávání zatížení zastaralá po upstreamu Kubernetes. I když současné využití zůstává stejné a očekává se, že stávající služby budou fungovat bez úprav, důrazně doporučujeme místo toho nastavit poznámky ke službám . Pokud chcete nastavit poznámky služby, můžete použítservice.beta.kubernetes.io/azure-pip-name
název veřejné IP adresy nebo použítservice.beta.kubernetes.io/azure-load-balancer-ipv4
pro adresu IPv4 aservice.beta.kubernetes.io/azure-load-balancer-ipv6
adresu IPv6, jak je znázorněno v příkladu 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
Poznámka:
Přidáním poznámky
service.beta.kubernetes.io/azure-pip-name
zajistíte nejúčinnější vytváření LoadBalanceru a důrazně se doporučuje zabránit potenciálnímu omezování.Nastavte pro službu popisek DNS veřejně přístupný pomocí poznámky ke službě
service.beta.kubernetes.io/azure-dns-label-name
. Tím se publikuje plně kvalifikovaný název domény (FQDN) pro vaši službu pomocí veřejných serverů DNS Azure a domény nejvyšší úrovně. Hodnota poznámky musí být v rámci umístění Azure jedinečná, proto doporučujeme použít dostatečně kvalifikovaný popisek. Azure automaticky připojí výchozí příponu do vybraného umístění, například<location>.cloudapp.azure.com
k zadanému názvu, a vytvoří plně kvalifikovaný název domény.Poznámka:
Pokud chcete publikovat službu ve vlastní doméně, podívejte se na Azure DNS a 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
Pomocí příkazu vytvořte službu a nasazení
kubectl apply
.kubectl apply -f load-balancer-service.yaml
Pokud chcete zobrazit popisek DNS vašeho nástroje pro vyrovnávání zatížení, použijte
kubectl describe service
příkaz.kubectl describe service azure-load-balancer
Popisek DNS bude uvedený pod položkou
Annotations
, jak je znázorněno v následujícím zhuštěném příkladu výstupu:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kuberenetes.io/azure-dns-label-name: <unique-service-label>
Odstraňování potíží
Pokud statická IP adresa definovaná ve loadBalancerIP
vlastnosti manifestu služby Kubernetes neexistuje nebo nebyla vytvořena ve skupině prostředků uzlu a nejsou nakonfigurované žádné další delegování, vytvoření služby nástroje pro vyrovnávání zatížení selže. Při řešení potíží zkontrolujte události vytváření služby pomocí kubectl describe
příkazu. Zadejte název služby zadané v manifestu YAML, jak je znázorněno v následujícím příkladu:
kubectl describe service azure-load-balancer
Výstup ukazuje informace o prostředku služby Kubernetes. Následující příklad výstupu ukazuje Warning
v : Events
"user supplied IP address was not found
. V tomto scénáři se ujistěte, že jste vytvořili statickou veřejnou IP adresu ve skupině prostředků uzlu a že IP adresa zadaná v manifestu služby Kubernetes je správná.
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
Další kroky
Pokud chcete mít větší kontrolu nad síťovým provozem do vašich aplikací, použijte doplněk směrování aplikací pro AKS. Další informace o doplňku směrování aplikace najdete v tématu Spravované příchozí přenosy dat NGINX pomocí doplňku směrování aplikace.
Azure Kubernetes Service