Kubernetes服务blue-service解析后连接超时原因排查
Kubernetes NodePort服务访问超时故障原因
已确认的服务状态
- 执行
k get svc查询命名空间服务列表返回结果:
k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE blue-service NodePort 10.107.127.118 <none> 80:32092/TCP 60m demo ClusterIP 10.111.134.22 <none> 80/TCP 3d
- 手动配置
/etc/hosts映射后执行wget -O- blue-service访问,返回连接超时:
wget -O- blue-service --2022-06-13 11:11:32-- http://blue-service/ Resolving blue-service (blue-service)... 10.107.127.118 Connecting to blue-service (blue-service)|10.107.127.118|:80... failed: Connection timed out. Retrying.
- 执行
k describe svc blue-service查询到的服务详情:
Name: blue-service Namespace: default Labels: app=blue Annotations: <none> Selector: app=blue Type: NodePort IP Family Policy: SingleStack IP Families: IPv4 IP: 10.107.127.118 IPs: 10.107.127.118 Port: <unset> 80/TCP TargetPort: 8080/TCP NodePort: <unset> 32092/TCP Endpoints: 172.17.0.39:8080,172.17.0.40:8080,172.17.0.41:8080 Session Affinity: None External Traffic Policy: Cluster Events: <none>
故障根因
服务本身配置无异常,问题出在访问逻辑错误:
- 你写入hosts的
10.107.127.118是Service的ClusterIP,属于Kubernetes集群内部的虚拟IP段,仅能在集群节点、集群内Pod的网络环境下被路由访问。如果你是在集群外的个人主机上配置hosts直接请求这个IP,网络层面没有可达该ClusterIP的路由,必然会出现连接超时。 - 从服务详情可以确认,后端Endpoints已经正常关联到3个运行中的Pod,标签选择器、Service端口到Pod端口的映射规则都配置正确,不存在服务本身的配置故障。
正确访问方案
- 集群内访问:在集群内的Pod中直接请求
blue-service:80即可,集群CoreDNS会自动完成服务名解析,无需手动配置hosts。 - 集群外访问:该服务为NodePort类型,直接请求任意集群节点的IP+32092端口即可正常访问,不需要将ClusterIP绑定到本地hosts。
内容的提问来源于stack exchange,提问作者MikiBelavista
相关产品推荐
相关产品推荐

