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 地址无法正常工作的原因。