我需要为GKE集群使用一个域来访问集群和应用程序的入口,类似于azure AKS http插件,它提供了一个通用的创建域(而不是自定义域(https://learn.microsoft.com/en-us/azure/aks/http-application-routing谷歌云上也有解决方案吗?
我们的GKE创建/删除过程是IaC工具的一部分,我们正在自动化集群和我们的应用程序部署,以进行开发/测试/暂存。通用的域创建和将托管dns区域绑定到集群资源给了我们很大的灵活性。否则,我们必须创建自定义域和托管dns区域,这将是静态的,并给配置工具带来不必要的复杂性。
GCP尚未实现类似的资源,但可以使用可用的云DNS API 1(例如ResourceRecordSets 2(之一自动执行此操作,以将A记录配置到要分配给主机的ManagedZone,并在Ingress控制器创建后编写此配置的脚本。
例如,检索分配给发出类似kubectl describe ing <ingress-name> |grep “Address:” |awk ‘{print $2}’
的命令的入口控制器的IP地址,而不是使用IP信息来构造API主体请求3。
gke中没有通用的域选项,所以我必须购买一个域并根据创建的托管dns区域NS更新NS,当我通过external-dns
更新gke中的入口时,它们将自动同步
我可以说我用这些步骤解决了这个问题,
1-创建一个域名属于自己的托管区域,并确保它有权从您创建的dns区域访问域。Mean是允许访问你的dns区域存在的谷歌项目
注意:当您创建集群时,请确保为托管dns区域提供读写perm的作用域
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"
Note在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)
它可以被投诉床域一段时间,但然后你会得到正确的响应
host xxx.test.dev
xxx.test.dev has address 35.197.xx.xx