我正在使用 OpenShift 路由器,默认情况下,路由器基于 haproxy。当我创建 aa.bb.cc 之类的域时,我可以通过此路由访问我的服务。
我看到路由器(haproxy)pod 正在运行我的集群,我的问题是,当我 curl http://aa.bb.cc时,域 aa.bb.cc 如何到达 haproxy pod?什么组件正在解析域 aa.bb.cc?
我正在使用 OpenShift 路由器,默认情况下,路由器基于 haproxy。当我创建 aa.bb.cc 之类的域时,我可以通过此路由访问我的服务。
我看到路由器(haproxy)pod 正在运行我的集群,我的问题是,当我 curl http://aa.bb.cc时,域 aa.bb.cc 如何到达 haproxy pod?什么组件正在解析域 aa.bb.cc?
那将是包含通配符域的 DNS 服务器。我们的流程通常如下:
*.apps.example.com
+
+-----------------+ |
| DNS Server | |
+-----+-----------+ | OpenShift Cluster
^ | |
| | |
| | LB IP |
| | |
| v |
+-+----+--+ +--------------+ | +---------------+ +----------+
| | | | | | | | |
| Clients +------> Loadbalancer +-----> HAProxy +--------------->+ App Pods |
| | | | | | | | |
+---------+ +--------------+ | +---------------+ +----------+
|
+
您的客户端将使用其常规 DNS 服务器来解析应用程序域。通常,在 OpenShift 集群上运行的所有应用程序路由都有一个通配符 DNS 条目(例如*.apps.example.com
)。因此,当您的客户端请求时myapp.apps.example.com
,将返回 OpenShift 集群的负载均衡器的 IP。
负载均衡器反过来知道OpenShift 路由器正在运行的所有节点。因此负载均衡器会将请求转发到这些节点中的任何一个。
如您所述,运行 HAProxy 的OpenShift 路由器随后会查看HTTP 主机标头或 TLS 连接的SNI 扩展,以检查连接需要转发到的位置。
HAProxy 具有从集群中的路由/服务派生的动态配置,然后将您的请求转发到您的应用程序 Pod。