如何在GKE上实现Ingress/Service自动对应公网可解析子域名
GKE集群自动子域名公网解析实现方案
方案一:通配符DNS+Traefik自动路由匹配(无厂商绑定,轻量无额外组件)
- 操作步骤:
- 在你的公网DNS服务商处,为
app-dev.company.com配置通配符A记录*.app-dev.company.com,解析值为Traefik的公网IP,TTL按需求设置即可,开发环境建议设为300s - Traefik配置自动Host匹配规则:开启Ingress自动发现,配置全局规则,当集群内Service标注
traefik.ingress.kubernetes.io/router.host: {serviceName}.app-dev.company.com或者配置Ingress模板,自动将Service名称作为子域名前缀拼接在app-dev.company.com,自动生成对应Ingress路由规则 - 验证:新建
hello-world服务创建后,直接访问hello-world.app-dev.company.com,公网解析会直接命中通配符记录指向Traefik,Traefik自动匹配路由到对应服务
- 在你的公网DNS服务商处,为
- 优势:无需修改集群DNS配置,完全不依赖云厂商DNS服务,一次配置长期有效
方案二:ExternalDNS对接自有DNS服务(可控性高,适合生产环境)
- 操作步骤:
- 部署K8s官方开源组件ExternalDNS,配置对接你自己管理的公网DNS服务(自建Bind/PowerDNS或任意第三方DNS服务商均可,无需使用Cloud DNS)
- 配置ExternalDNS过滤规则,只监听带有指定annotation的Ingress/Service资源,自动同步公网DNS记录
- 配置Traefik侧Ingress自动生成规则,新建服务时自动生成对应host的Ingress资源,触发ExternalDNS自动创建解析记录
方案三:CoreDNS替换kube-dns的正确操作(兼容Azure使用习惯)
- 操作步骤:
- 先关闭GKE对kube-dns的托管特性,执行命令 `gcloud container clusters update <集群名称> --update-addons=KubeDNS=DISABLED --zone <集群可用区>
- 按照官方标准流程部署CoreDNS到集群,配置
app-dev.company.com的存根域,上游设置为公网DNS服务器 - 将原有kube-dns服务的ClusterIP绑定到CoreDNS服务,确保集群内DNS请求全部走CoreDNS
- 注意:不要直接缩容kube-dns副本,GKE托管的kube-dns会被自动重建,直接操作会引发集群DNS故障
内容的提问来源于stack exchange,提问作者Michael Niemand
相关产品推荐
相关产品推荐

