面试中被问了这道题,其实是在考查你对 k8s service 的应用和底层原理的了解,答案显然没有那么简略。
ClusterIP/NodePort/Loadbalancer
这三种 svc 都会调配 ClusterIP,这个 IP 地址是 VIP(虚构 IP),是在所有 node 上增加一些 netfilter 规定,次要有 iptables 和 ipvs 两种计划,能不能 ping 通要看具体实现。
- iptables:clusterIP 只是 iptables 中的规定,只会解决 ip:port 四层数据包,reject 了 icmp。不能 ping 通。
- IPVS:clusterIP 会绑定到虚构网卡 kube-ipvs0,配置了 route 路由到回环网卡,icmp 包是 lo 网卡回复的。能够 ping 通。
Headless: ClusterIP=None
Headless svc 不会调配 clusterIP,而是返回对应 DNS 的 A 记录,如果 svc 后端有 3 个 pod 则返回 3 个 pod IP。拜访 svc 时会随机抉择一个 IP,所以 headless svc 是能够 ping 通的。
ExternalName
ExternalName 对应 DNS 的 CNAME,如果配置的域名能够 ping 通则 svc 能够 ping 通。
Reference:
- https://kubernetes.io/zh/docs…
- https://plantegg.github.io/20…