如何为 OpenShift 3.11 路由使用与默认通配符 dns 名称不同的 dns 名称?

How to use a different dns name for OpenShift 3.11 routes than the default wildcard dns name?

我无法获得使用 openshift 集群的自定义域记录。我阅读了大量文章、Whosebug 帖子和这个 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

我已经使用 blue/green 策略部署了一个应用程序。在下面的屏幕截图中,您可以看到我提供的路线。

mobile-blue: I created this one manually pointing to my custom domain mobileoffice.myinnovx.com

mobile-office: Created with oc expose service mobile-office --name=mobile-blue to use external access.

mobile-green: Openshift automatically generated a route for the green app version. (Source2Image deployment)

mobile-blue: Openshift automatically generated a route for the blue app version. (Source2Image deployment)

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

在几个 blogs/articles 中,我发现我应该将我的通配符记录指向路由器路由规​​范名称。但是我的集群中没有任何路由规范名称。我什至没有配置 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

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

默认情况下,OpenShift 3.11 通过 Red Hat 的自定义 HAProxy Ingress Controller(俗称 "Router")公开应用程序。 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 上 HAProxy 路由器 运行 的集群主机/443。然后,您可以将应用程序的 Route object 配置为使用主机名 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 那么我可以创建一个指向 myapp-myproject.apps.openshift-dev.example.com.[=22= 的 CNAME DNS 记录 myapp.example.com ]

使上述任何一个工作的关键是 HAProxy 路由器不关心请求的主机名是什么。它要做的就是将传入请求的主机 header(在 TLS 请求的情况下必须设置 SNI,并且 HAProxy 路由器配置为直通)与所有路由 object 中的匹配聚类并查看它们是否匹配。因此,如果您的 DNS/Load 平衡器配置设置为将请求发送到 HAProxy 路由器并且主机 header 匹配路由,则该请求将被转发到适当的 OpenShift 服务。

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

我想你差不多明白了,Matias。

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

你的 DNS 记录问题中的快照没有显示完整的条目,但可能缺少的是 "Host/Service" 和 [=20] 末尾的点 . =].像这样:

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

此外,请注意在 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