Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

39.5. 调试服务

如果您无法从集群内部与服务通信(因为您的服务无法直接通信,或者因为您使用路由器,一切工作,直到进入集群)后,您需要执行与服务关联的端点并调试它们。

首先,让我们获得这些服务:

# oc get services --all-namespaces
NAMESPACE   NAME              LABELS                                    SELECTOR                  IP(S)            PORT(S)
default     docker-registry   docker-registry=default                   docker-registry=default   172.30.243.225   5000/TCP
default     kubernetes        component=apiserver,provider=kubernetes   <none>                    172.30.0.1       443/TCP
default     router            router=router                             router=router             172.30.213.8     80/TCP

您应该会在列表中看到您的服务。如果没有,您需要 定义服务

服务输出中列出的 IP 地址是 Kubernetes 服务 IP 地址,Kubernetes 将映射到支持该服务的其中一个 pod。因此,您应该能够与这个 IP 地址进行通信。但遗憾的是,即使您可以想象的是所有 pod 都可被访问,也意味着可以访问所有 pod;如果无法访问,则并不意味着所有 pod 都无法访问。它只是告诉您 kubeproxy hooked 的一个状态。

让我们一起测试服务。从其中一个节点:

curl -kv http://172.30.243.225:5000/bar                  # Replace the argument with your service IP address and port

然后,让我们来看看哪些 pod 正在支持我们的服务(将 docker-registry 替换为已损坏的服务的名称替换 docker-registry):

# oc get endpoints --selector=docker-registry
NAME              ENDPOINTS
docker-registry   10.128.2.2:5000

我们可以看到,只有一个端点。因此,如果您的服务测试成功,并且路由器测试成功,那么实际上会发生奇怪。但是,如果有多个端点,或者服务测试失败,请尝试 每个端点的 以下内容:确定端点无法正常工作后,继续执行下一节。

首先,测试每个端点(更改 URL 以获取正确的端点 IP、端口和路径):

curl -kv http://10.128.2.2:5000/bar

如果这不起作用,请尝试下一个操作。如果失败,请记下这部分,我们将在下一节中找出原因。

如果所有这些都失败,则可能本地节点无法正常工作,跳到 第 39.7 节 “调试本地网络” 部分。

如果它们都正常工作,则跳至 第 39.11 节 “调试 Kubernetes” 部分来找出为什么服务 IP 地址无法正常工作。