Pulumi部署AKS集群:公网IP与负载均衡器域名关联问题
解决Pulumi部署AKS时域名与负载均衡器公网IP关联问题
方案1:通过公网IP资源ID获取对象并绑定域名
在Pulumi里,你可以用azure.network.PublicIp.get方法,通过已拿到的资源ID直接获取公网IP对象,接着更新它的域名标签来绑定FQDN。示例代码如下:
import * as azure from "@pulumi/azure"; // 替换成你获取到的负载均衡器公网IP资源ID const lbPublicIpId = "<公网IP资源ID>"; // 通过ID拉取公网IP实例 const lbPublicIp = azure.network.PublicIp.get("lb-public-ip", lbPublicIpId); // 更新公网IP的域名标签,生成对应FQDN const updatedPublicIp = new azure.network.PublicIp("updated-lb-public-ip", { name: lbPublicIp.name, resourceGroupName: lbPublicIp.resourceGroupName, location: lbPublicIp.location, sku: lbPublicIp.sku, allocationMethod: lbPublicIp.allocationMethod, domainNameLabel: "your-custom-domain-prefix", // 这里填你的域名前缀 }, { replaceOnChanges: ["domainNameLabel"] });
注意:replaceOnChanges配置要加上,避免修改域名标签时触发不必要的资源重建;同时要确认这个公网IP确实是AKS负载均衡器在用的那个。
方案2:让AKS负载均衡器直接使用带FQDN的自定义公网IP
如果要让AKS的负载均衡器直接用你预先创建好的带域名的公网IP,按以下步骤操作:
- 先创建带域名标签的公网IP:
import * as azure from "@pulumi/azure"; const customPublicIp = new azure.network.PublicIp("aks-lb-public-ip", { resourceGroupName: "<你的资源组名称>", location: "<部署区域>", sku: "Standard", // AKS负载均衡器默认用Standard SKU,要匹配 allocationMethod: "Static", domainNameLabel: "your-custom-domain-prefix", });
- 在创建Kubernetes LoadBalancer类型的Service时,通过注解指定这个公网IP:
import * as k8s from "@pulumi/kubernetes"; // 这里替换成你的AKS集群资源实例 const aksCluster = <你的AKS集群定义>; const exampleService = new k8s.core.v1.Service("example-service", { metadata: { annotations: { "service.beta.kubernetes.io/azure-load-balancer-ipv4": customPublicIp.ipAddress, }, }, spec: { type: "LoadBalancer", ports: [{ port: 80, targetPort: 80 }], selector: { app: "your-app-label" }, }, }, { provider: aksCluster.provider });
这样AKS的负载均衡器就会绑定你预先创建的公网IP,对应的FQDN也会直接生效。
内容的提问来源于stack exchange,提问作者Steve Hostettler
相关产品推荐
相关产品推荐

