Ubuntu部署OpenShift v3后Pod无法通过服务名解析服务求助
OpenShift v3 自建集群Pod无法解析服务名常见配置遗漏排查
- 检查集群DNS组件运行状态
OpenShift v3的内置DNS服务默认是dnsmasq或者skydns(不同小版本存在差异),先检查kube-system命名空间下的DNS Pod是否正常运行:
如果Pod处于CrashLoopBackOff、Pending等异常状态,优先排查Pod的事件日志和启动日志,修复DNS组件本身的运行问题。oc get pods -n kube-system | grep dns - 检查kubelet的DNS配置参数
自建OpenShift时最容易遗漏kubelet启动参数的DNS配置,需要确认每个节点的kubelet启动参数中,是否正确配置了集群DNS的ClusterIP以及集群域名(默认值为cluster.local):
查看kubelet启动配置文件(通常路径为/etc/origin/node/node-config.yaml或者/etc/kubernetes/kubelet.conf)中是否存在如下配置:
配置修改后需要重启kubelet服务生效,执行命令:kubeletArguments: cluster-dns: - 集群DNS服务实际ClusterIP # 默认部署的DNS服务ClusterIP通常为172.30.0.10 cluster-domain: - cluster.localsystemctl restart origin-node(对应不同部署版本也可能是kubelet服务)。 - 检查异常Pod的
resolv.conf配置是否正确
进入无法解析服务名的Pod中查看DNS配置:
正常配置的oc exec -it <异常Pod名称> -- cat /etc/resolv.confnameserver应该指向集群DNS的ClusterIP,search域包含<当前命名空间>.svc.cluster.local、svc.cluster.local等后缀,如果配置为空或者指向错误地址,说明kubelet的DNS参数没有正常生效。 - 检查集群网络策略是否拦截DNS请求
如果你启用了集群网络策略,需要确认对应命名空间下的网络策略没有拦截53端口的UDP/TCP DNS请求,默认集群规则应该允许所有Pod访问DNS服务的53端口。 - 检查DNS服务的Endpoint是否正常
查看DNS服务的Endpoint是否绑定了正常运行的DNS Pod IP:
如果Endpoint为空,说明DNS Pod没有被正确关联到服务上,需要检查DNS服务的标签选择器是否和DNS Pod的标签匹配。oc get endpoints -n kube-system dns
内容的提问来源于stack exchange,提问作者Arman Momeni
相关产品推荐
相关产品推荐

