【问题标题】:How to use a different dns name for OpenShift 3.11 routes than the default wildcard dns name?如何为 OpenShift 3.11 路由使用与默认通配符 dns 名称不同的 dns 名称?
【发布时间】:2019-10-22 12:33:38
【问题描述】:

我无法获得与 openshift 集群一起使用的自定义域记录。我已经阅读了大量文章、StackOverflow 帖子和这个 youtube 视频 https://www.youtube.com/watch?v=Y7syr9d5yrg。所有这些似乎都“几乎”对我有用,但总是缺少一些东西,我无法自己完成这项工作。

场景如下。我在 IBM Cloud 帐户上部署了一个 openshift 集群。我已经注册了 myinnovx.com。我想将它与 openshift 应用程序一起使用。集群详情:

oc v3.11.0+0cbc58b
kubernetes v1.11.0+d4cacc0
openshift v3.11.146
kubernetes v1.11.0+d4cacc0

我有一个使用蓝/绿策略部署的应用程序。在以下屏幕截图中,您可以看到我可用的路线。

mobile-blue:我手动创建了这个指向我的自定义域 mobileoffice.myinnovx.com

mobile-office:使用oc expose service mobile-office --name=mobile-blue 创建以使用外部访问。

mobile-green:Openshift 自动为绿色应用版本生成路由。 (Source2Image 部署)

mobile-blue:Openshift 自动为蓝色应用程序版本生成路由。 (Source2Image 部署)

我在我的 DNS 编辑页面上设置了两条 CNAME 记录,如下所示:

在几篇博客/文章中,我发现我应该将我的通配符记录指向路由器路由规​​范名称。但是我的集群中没有任何路由规范名称。我什至没有配置 Ingress 路由。

我不知道我错过了什么。任何帮助是极大的赞赏。 这是我在测试我的 DNS 时得到的响应:

这是我的 DNS 的当前导出:

$ORIGIN myinnovx.com.
$TTL 86400
@ IN SOA ns1.softlayer.com. msalimbe.ar.ibm.com. (
                       2019102317        ; Serial
                       7200              ; Refresh
                       600               ; Retry
                       1728000           ; Expire
                       3600)             ; Minimum

@                      86400    IN NS    ns1.softlayer.com.
@                      86400    IN NS    ns2.softlayer.com.


*.myinnovx.com         900      IN CNAME .mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud.
mobileoffice           900      IN CNAME mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud
mobile-test.myinnovx.com 900      IN A     169.63.244.76

【问题讨论】:

    标签: kubernetes dns ibm-cloud openshift


    【解决方案1】:

    我想你差不多明白了,马蒂亚斯。

    FQDN - mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud - 为我解析为 SOFTLAYER-RIPE-4-30-31 的一部分并可从 Internet 访问的 IP。所以,应该可以配置你想要的。

    您的 DNS 记录问题中的快照未完整显示条目,但可能缺少的是“主机/服务”和“值/目标”末尾的点 .。像这样的:

    mobileoffice.myinnovx.com. CNAME 900 (15min)  mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud. 
    

    【讨论】:

    • 目前我有两条 CNAME 记录:Host: *.myinnovx.com to value .mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us -south.containers.appdomain.cloud。 主机: mobileoffice.myinnovx.com 价值 mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud。如果我尝试向 mobileoffice.myinnovx.com 添加一个点,我会收到以下消息:主机值“mobileoffice.myinnovx.com”。必须是相对值或 @ 字符来表示您的域名。
    • 我在几分钟前看到dig 是OpenShift 路由本身是一个CNAME 映射到mycluster-342148-2656....appdomain.cloud,而这又是一个指向169.63.244.74 的A 记录。将mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud. 设为指向169.63.244.74 的A 记录,其余部分与我的答案相同。
    • 我无法为主机值创建带有点的记录。例如,我收到消息 主机值“mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud”。必须是相对值或 @ 字符来表示您的域名。
    • 根据错误消息判断...您能否编辑mobileoffice.myinnovx.com 的CNAME 记录以仅将mobileoffice 作为主机?这将成为相对于myinnovx.com 的主机名。由于不同的提供商要求在其 DNS 控制台中输入不同的信息,包括他们是否需要在末尾添加一个点/句点...先尝试在末尾添加一个点,然后再尝试不添加,请记住 DNS 可能需要一段时间更改以传播。输入mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud 作为目标。
    • 对不起 - 不要在末尾添加点。我无法编辑评论,因为它发布后超过 5 分钟。
    【解决方案2】:

    我要说的大部分内容仅适用于 OpenShift 3.x。在 OpenShift 4.x 中,情况有很大不同,以下大部分内容并不完全适用。

    默认情况下,OpenShift 3.11 通过 Red Hat 的自定义 HAProxy 入口控制器(俗称“路由器”)公开应用程序。 OpenShft 3.x 集群中的典型设计是指定特定的集群主机来运行集群基础架构工作负载,例如 HAProxy 路由器和内部 OpenShift 注册表(通常使用node-role.kubernetes.io/infra=true 节点标签)。

    为方便起见,管理员不必为每个公开的 OpenShift 应用程序手动创建 DNS 记录,有一个通配符 DNS 条目指向与 HAProxy 路由器关联的负载均衡器。它的 DNS 名称在用于进行集群安装的 ansible 清单文件的 openshift_master_default_subdomain 中配置。

    这条记录的结构通常类似于*.apps.<cluster name>.<dns subdomain>,但它可以是任何你喜欢的。

    如果您想为您的应用程序使用更漂亮的 DNS 名称,您可以做几件事。

    首先是创建一个指向您的负载均衡器的 DNS 条目 myapp.example.com,并将您的负载均衡器配置为将这些请求转发到在端口 80/443 上运行 HAProxy 路由器的集群主机。然后,您可以将应用程序的 Route 对象配置为使用主机名 myapp.example.com 而不是默认的 <app name>-<project name>.apps.<cluster name>.<dns subdomain>

    另一种方法是按照您的建议让应用程序使用默认通配符路由名称,但创建一个指向原始通配符路由名称的 DNS CNAME。例如,如果我的openshift_master_default_subdomainapps.openshift-dev.example.com 并且我的应用程序路由是myapp-myproject.apps.openshift-dev.example.com,那么我可以创建一个CNAME DNS 记录myapp.example.com 指向myapp-myproject.apps.openshift-dev.example.com

    使上述任何一项工作的关键是 HAProxy 路由器不关心请求的主机名是什么。它要做的就是将传入请求的 Host 标头(在 TLS 请求的情况下必须设置 SNI 并且配置为通过的 HAProxy 路由器)与集群中的所有 Route 对象匹配,并查看它们是否匹配。因此,如果您的 DNS/负载均衡器配置设置为将请求发送到 HAProxy 路由器并且主机标头与路由匹配,则该请求将被转发到相应的 OpenShift 服务。

    在您的情况下,我认为您没有将 CNAME 指向正确的位置。您需要将您的 CNAME 指向您的应用程序 Route 使用的通配符主机名。

    【讨论】:

    • 感谢您的回复。如果我的 openshift 生成的 url 是mobile-office-mobile-office.mycluster-342148-26562a7d6831df3dfa…。假设我的通配符主机名应用路由是 *.mycluster-342148-26562a7d6831df3dfa02975385757d2d-0001.us-south.containers.appdomain.cloud 是否安全?
    • 我一直在尝试不同的方法来创建 CNAME。我认为我无法访问我的负载均衡器。由于集群是在云端创建的,我没有自己安装,也无权访问此类配置文件。
    • 我对 IBM Cloud 不是很熟悉,但上面的 URL 看起来不错。您必须确保配置了一个路由来匹配该 CNAME 的主机名,而不是 just 用于通配符。
    【解决方案3】:

    另外,请注意在 OpenShift v4 上为路由设置自定义 DNS 的说明有些不同,并且未正确显示在 Web 控制台中:

    apps.<clustername>.<clusterid>.<shard>.openshiftapps.com 不会解决任何问题。 *.apps.<clustername>.<clusterid>.<shard>.openshiftapps.com 是通配符条目,因此您需要在其前面添加一些内容。

    为了与 v3 上的方式保持一致,我们通常选择任意字符串 elb,例如- elb.apps.<clustername>.<clusterid>.<shard>.openshiftapps.com. 这会影响路由器。

    这里是相关的BZ - https://bugzilla.redhat.com/show_bug.cgi?id=1925132

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2011-07-14
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 2011-06-18
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多