Menu Close

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 将映射到其中一个支持该服务的容器集。因此,您应该能够与该 IP 地址对话。但很遗憾,即使可以,也不表示所有 pod 都可以访问;如果无法访问,也不表示所有 pod 都无法访问。它只是告诉您 kubeproxy hook 到的状态。

仍要测试服务。从一个节点中:

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

然后,让我们来找出哪些 pod 支持我们的服务(使用破坏的服务的名称替换 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 地址无法正常工作的原因。