39.3. 调试到 HTTP 服务的外部访问
如果您位于集群外的机器上,并且正在尝试访问集群提供的资源,则需要是一个在 pod 中运行的一种进程,侦听集群中的公共 IP 地址和"路由"该流量。OpenShift Container Platform 路由器 为 HTTP、HTTPS(使用 SNI)、WebSockets 或 TLS(使用 SNI)提供目的。
假设您无法从集群外访问 HTTP 服务,我们首先在有故障的机器的命令行中重现问题。Try:
curl -kv http://foo.example.com:8000/bar # But replace the argument with your URL
如果有效,您是否从正确的位置重现错误?服务也可能会有一些正常工作的 pod,而有些 pod 则不行。因此,请跳至 第 39.4 节 “调试路由器” 部分。
如果失败,则让我们将 DNS 名称解析为 IP 地址(假设它还没有一个地址):
dig +short foo.example.com # But replace the hostname with yours
如果这没有提供 IP 地址,则此时应该对 DNS 进行故障排除,但这超出了本指南的范围。
请确定您返回的 IP 地址是您期望运行该路由器的 IP 地址。如果没有,请修复您的 DNS。
接下来,使用 ping -c address
和 tracepath address
来检查是否可以到达路由器主机。可能无法响应 ICMP 数据包,在这种情况下,这些测试将失败,但路由器计算机可以访问。在这种情况下,尝试使用 telnet 命令直接访问路由器的端口:
telnet 1.2.3.4 8000
您可能会得到:
Trying 1.2.3.4... Connected to 1.2.3.4. Escape character is '^]'.
如果是这样,则会在 IP 地址上侦听端口。这很好。按 ctrl-]
,然后按 Enter 键,然后键入 close
以退出 telnet。移到 第 39.4 节 “调试路由器” 部分,以检查路由器上的其他内容。
或者可以得到:
Trying 1.2.3.4... telnet: connect to address 1.2.3.4: Connection refused
告知我们路由器没有侦听该端口。有关如何配置路由器的更多指针,请参阅 第 39.4 节 “调试路由器” 部分。
或者看到:
Trying 1.2.3.4... telnet: connect to address 1.2.3.4: Connection timed out
告诉我们您无法与这个 IP 地址的任何通信。检查您的路由、防火墙以及您是否有路由器侦听该 IP 地址。要调试路由器,请查看 第 39.4 节 “调试路由器” 部分。对于 IP 路由和防火墙问题,这已超出本指南的理解情况。