一、Service存在的意义
二、Service的定义和创建
Pod与Service的关系
Service的定义和创建
三、Service使用NodePort对外暴露应用
四种类型,常用的三种:
指定Service的NodePort端口
在实际生产中,k8s的集群不会直接暴露在公网中,一般会在k8s集群前加一个负载均衡器,这个负载均衡器暴漏在公网。
四、Service负载均衡实现之iptables
Service代理模式
k8s默认使用iptables模式,如果要使用IPVS模式,需要单独启用IPVS模式,见下一小节。
查看iptables关于指定Service的负载均衡规则:
五、Service负载均衡实现之iptables
修改后,需要重新加载ConfigMap,有一个简单粗暴的方式,删除任一一个Pod,会自动重新加载ConfigMap。
查看ipvs规则,需要安装一个辅助工具
下面就是当前这个Pod设置Service暴露后,在IPVS的实际规则
rr - 轮询
实际上在宿主机上创建了一个虚拟网卡,用来接收内部流量请求
六、Service的DNS名称解析
创建一个临时的Pod,验证通过ServiceName访问Pod
正常解析到了,在程序代理里,可以使用ServiceName替换以前写的IP。
可以看到你请求的ServiceName,本质请求的是CoreDNS,CoreDNS保存有从K8s获得的A记录,然后返回真实服务IP。
七、iptables与ipvs对比
Iptables有性能衰减,k8s已将IPVS加入,IPVS性能非常稳定,建议使用IPVS。