Service Cluster IP 是一个虚拟 IP, 是由 Kubernetes 节点上的 iptables 规则管理的
可以通过 iptables-save 命令打印出当前节点的 iptables 规则, 因为输出较多, 这里只截取与 httpd-svc Cluster IP 10.99.229.179 相关的信息:
这两条规则的含义是:
如果 Cluster 内的 Pod(源地址来自 10.244.0.0/16)要访问 httpd-svc, 则允许
其他源地址访问 httpd-svc, 跳转到规则
- KUBE-SVC-RL3JAE4GN7VOGDGP
- KUBE-SVC-RL3JAE4GN7VOGDGP
规则如下:
1/3 的概率跳转到规则
KUBE-SEP-C5KB52P4BBJQ35PH
1/3 的概率 (剩下 2/3 的一半) 跳转到规则
KUBE-SEP-HGVKQQZZCF7RV4IT
1/3 的概率跳转到规则
KUBE-SEP-XE25WGVXLHEIRVO5
上面三个跳转的规则如下:
即将请求分别转发到后端的三个 Pod 通过上面的分析, 我们得到如下结论:
iptables 将访问 Service 的流量转发到后端 Pod, 而且使用类似轮询的负载均衡策略
另外需要补充一点: Cluster 的每一个节点都配置了相同的 iptables 规则, 这样就确保了整个 Cluster 都能够通过 Service 的 Cluster IP 访问 Service
除了直接通过 Cluster IP 访问到 Service,DNS 是更加便捷的方式, 下一节我们讨论
书籍:
1. 每天 5 分钟玩转 Docker 容器技术
https://item.jd.com/16936307278.html
2. 每天 5 分钟玩转 OpenStack
https://item.jd.com/12086376.html
来源: https://www.cnblogs.com/CloudMan6/p/8503685.html