使用 Azure CLI 获取 Kubernetes Load Balancer 的 public IP

Use Azure CLI to obtain Kubernetes Load Balancer's public IP

我在 Azure 上有 Kubernetes 运行,它使用负载均衡器。 Azure 已为该负载均衡器分配了一个 public IP 地址,为了通过 Azure CLI 设置应用程序网关,我希望使用 Azure CLI 获取 k8s 负载均衡器的 IP 地址。

我可以使用...获取负载均衡器资源...

az resource list --resource-group $k8sResourceGroup --query "[?type=='Microsoft.Network/loadBalancers']"

我从该响应中获取 id 并将其传递给...

az network lb show --id $loadBalancer.id --output json | convertfrom-json).frontendIpConfigurations

frontendIpConfigurations数组包含两个对象:入站IP地址(资源)和出站IP地址(资源)。我像这样过滤入站 IP 资源...

az network lb show --id $loadBalancer.id --output json | convertfrom-json).frontendIpConfigurations | where-object { $null -ne $_.loadBalancingRules }).loadBalancingRules[0].id

然后我得到一些看起来很像 IP 地址资源 ID 的东西 - 它与我在 Azure 门户中看到的相匹配。但是如果我然后请求资源本身,使用...

az network public-ip show --ids $loadBalancingRuleId --query "{fqdn: dnsSettings.fqdn, address: ipAddress}"

...我明白...

ResourceNotFoundError: The Resource 'Microsoft.Network/publicIPAddresses/kubernetes' under resource group '[my resource group name]' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix

是否有获取 AKS 负载均衡器的 public 入站 IP 地址的直接方法?

试试这个(假设你的LB只有一个入站IP地址。否则$pipId是一个数组)

$pipId = $(az network lb show --id $loadBalancer.id --query "frontendIpConfigurations | [?loadBalancingRules != null].publicIpAddress.id" -o tsv)

$ip = (az network public-ip show --ids $pipId --query "ipAddress" -o tsv)

Is there a straightforward method of obtaining an AKS load balancer's public inbound IP address?

与AKS的负载均衡器关联的所有public IP都是入站IP,出站IP除外。并且所有入站IP都是AKS中服务的public IP。这意味着如果您知道有多少服务具有负载均衡器类型,那么您将知道有多少 public 入站 IP 与 AKS 的负载均衡器相关联。

按照这个认知,你只需要得到服务的publicIP地址,然后通过Azure CLI就可以得到这个publicIP的资源ID:

az network public-ip list --query "[?ipAddress=='publicIPAddress'].id" -o tsv