【问题标题】:gke and auto created domain for enabling http routinggke 和自动创建的域以启用 http 路由
【发布时间】:2021-03-11 08:02:38
【问题描述】:

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

我们的 GKE 创建/删除流程是 IaC 工具的一部分,我们正在自动化集群和我们的应用部署以进行开发/测试/暂存。通用域创建和将托管 dns 区域绑定到集群资源为我们提供了极大的灵活性。否则,我们必须创建自定义域和托管 dns 区域,这将是静态的,并给配置工具带来不必要的复杂性。

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubernetes-ingress external-dns googledns


    【解决方案1】:

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

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

    【讨论】:

    • 但是如果你创建了一个ManagedZone,是否意味着可以作为一个自定义域来到达入口(在添加一个带有入口ip的A记录之后)
    • 这只是一种尝试减轻您正在寻找的东西的方法,它与您期望的“自定义域”并不完全相同
    【解决方案2】:

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

    我可以说我通过这些步骤解决了这个问题,

    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)
    

    它可以被投诉一段时间,但你会得到正确的回应

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

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 2015-10-28
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多