google-cloud-platform - 使入口/服务在 GKE 上公开 DNS 可解析
问题描述
我们在 Google Cloud 上设置了一个 GKE 集群,我们希望新的入口路由能够在相应的子域下自动解析。
我们有一个子域(比如说 app-dev.company.com),它已经解析为我们的入口控制器(Traefik)的公共 IP,当我在 k8s 上创建一个服务“hello-world”时,它应该可以在下自动公开解析hello-world.app-dev.company.com 也是如此。
我以前在 Azure 上使用集群,只需使用存根域和上游 DNS 配置 CoreDNS,然后它就可以工作了。现在谷歌出于某种原因仍在使用 kube-dns;我尝试在 kube-dns 中配置存根域“app-dev.company.com”并安装 CoreDNS(并将 kube-dns 缩小到 0),但这不起作用并且破坏了其他一些东西,所以我回滚了它。
我还研究了谷歌的云 DNS 服务(因为谷歌推荐它),但我不希望在 tbh 中硬供应商锁定,我也不确定这是否能达到我想要的效果。
有人可以在这里指出我正确的方向吗?
解决方案
一些东西:
- 您需要保留一个全局静态 IP 地址。
- 您将需要创建/更新您的 DNS 记录以指向该 IP 地址。
- GKE Ingress 和 GCP 外部负载均衡器之间存在 1-1 映射。这意味着您不能将多个 Ingress 资源映射到同一个外部 IP。
- 如果您想在同一个 Ingress 后面拥有多个应用程序,您可以将 Ingress 资源配置为使用基于路径或基于名称的虚拟主机来路由到多个后端应用程序。
预留静态 IP 地址:
gcloud compute addresses create ${ADDRESS} --global
将 ${ADDRESS} 替换为您喜欢的任何名称。
注释您的 Ingress 资源以告诉负载均衡器使用上面创建的静态 IP
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: helloweb
annotations:
kubernetes.io/ingress.global-static-ip-name: ${ADDRESS}
将 ${ADDRESS} 替换为上一步中创建的静态 IP 的名称
配置多个后端应用
基于路径:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-app-fanout
annotations:
kubernetes.io/ingress.global-static-ip-name: ${ADDRESS}
spec:
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: app1
port:
number: 8080
- path: /app2/*
pathType: ImplementationSpecific
backend:
service:
name: app2
port:
number: 8080
- path: /app3/*
pathType: ImplementationSpecific
backend:
service:
name: app3
port:
number: 8080
您将按如下方式访问您的应用程序:
- app-dev.company.com
- app-dev.company.com/app2
- app-dev.company.com/app3
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-app-virtual
annotations:
kubernetes.io/ingress.global-static-ip-name: ${ADDRESS}
spec:
rules:
- host: app1.app-dev.company.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: app1
port:
number: 8080
- host: app2.app-dev.company.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: app2
port:
number: 8080
- host: ap32.app-dev.company.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: app3
port:
number: 8080
您将按如下方式访问您的应用程序:
- app1.app-dev.company.com
- app2.app-dev.company.com
- app3.app-dev.company.com
配置 DNS 记录 如果您选择进行基于路径的路由,那么您只需要添加一个 DNS A 记录,它将app-dev.company.com映射到上面创建的全局 IP 地址。
如果您选择基于名称的虚拟主机,则需要创建通配符记录映射 * .app-dev.company.com到全局 IP 地址。
有关更多信息,请参阅https://cloud.google.com/kubernetes-engine/docs/tutorials/configuring-domain-name-static-ip。
推荐阅读
- javascript - Service Worker 失败 - RedirectMode 不是“follow”时重定向响应
- python - Django:如何将 1 个字段项显示为带有剩余字段项作为值的标题?
- java - Jackson JSON序列化:当所有字段都为空时如何忽略嵌套对象?
- php - 同时编辑多个实体
- c - 使用 i2c 和 ssh 时需要 Tcp 吗?
- jquery - jQuery 验证和 ASP.NET MVC 不显示错误消息
- kubernetes - kubernetes nginx-ingress 控制器 Liveness 探测失败
- r - R将数据框转换为标记矩阵
- postman - 新创建的环境未显示在邮递员本机应用程序上
- excel - 如何将 Excel 中的数据与 Access 数据库匹配?