gke 和自动创建域以启用 http 路由

gke and auto created domain for enabling http routing

我需要为 GKE 集群使用一个域来访问集群和应用程序的入口,类似于 azure AKS http 附加组件,它提供了一个通用创建的域(不是自定义域) https://docs.microsoft.com/en-us/azure/aks/http-application-routing Google cloud 也有解决方案吗?

我们的 GKE creating/deleting 流程是 IaC 工具的一部分,我们正在为 dev/test/staging 自动化集群和应用程序部署。通用域创建和将托管 dns 区域绑定到集群资源为我们提供了极大的灵活性。否则,我们必须创建自定义域和托管 dns 区域,它们将是静态的,会给配置工具带来不必要的复杂性。

GCP 尚未实现这样的资源,但是可以使用可用的 Cloud DNS APIs 1, as for example the ResourceRecordSets 2 之一自动执行此操作,以将 A 记录配置到要分配主机的 ManagedZone ,在 Ingress 控制器创建后编写此配置脚本。

例如,检索分配给发出命令 kubectl describe ing <ingress-name> |grep “Address:” |awk ‘{print }’ 的入口控制器的 IP 地址比使用 IP 信息构造 API 正文请求 3.

gke 中没有通用域选项,因此我必须购买域并根据创建的托管 dns 区域 NS 更新 NS,当我通过 external-dns[= 更新 gke 中的入口时,它们将自动同步21=]

我可以说我用这个步骤解决了这个问题,

1- 创建一个域名属于自己的托管区域,并确保它有权从您创建的 dns 区域访问域。意思是允许访问您的 dns 区域存在的 google 项目

注意:当您创建集群时,请确保为托管 dns 区域提供读写权限的范围

gcloud container clusters create “external-dns” \
    —num-nodes 1 \
    —scopes “https://www.googleapis.com/auth/ndev.clouddns.readwrite

创建一个包含托管 DNS 记录的 DNS 区域。

$ gcloud dns managed-zones create “xxx.test-dev” \
    —dns-name “xxx.test.dev.” \
    —description “Automatically managed zone by kubernetes.io/external-dns test.dev domain name”

2- 请将资源部署到名称为 external-dns

的 gke
https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/gke.md#deploy-externaldns

并使用

检查日志
kubectl logs $(kubectl get pods --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep dns)

kubectl logs $(kubectl get pods --no-headers -o custom-columns=":metadata.name" | grep dns)

如果你看到一切进展顺利

time="2021-01-20T11:37:46Z" level=info msg="Add records: xxx.test.dev. A [34.89.xx.xx] 300"
time="2021-01-20T11:37:46Z" level=info msg="Add records: xxx.test.dev. TXT [\"heritage=external-dns,external-dns/owner=my-identifier,external-dns/resource=ingress/default/ingress-test\"] 300"
time="2021-01-20T11:38:47Z" level=info msg="All records are already up to date"

注意在 A 记录旁边创建了 TXT 记录。 TXT记录表示对应的A记录由ExternalDNS管理。这使得 ExternalDNS 在通过其他方式管理其他记录的环境中对 运行 是安全的。 让我们检查一下我们是否可以解析这个 DNS 名称。我们会先询问分配给您的区域的名称服务器。

$ dig +short @ns-cloud-e1.googledomains.com. xxx.test.dev.
104.155.xx.xx

并且可以查看域名的ip是否正确或者有问题

host https://xxx.test.dev/        
Host https://xxx.test.dev/ not found: 3(NXDOMAIN)

可以先投诉bed domain一段时间,然后你会得到正确的回复

host xxx.test.dev
xxx.test.dev has address 35.197.xx.xx