1. Service存在的意义
- 防止Pod失联(服务发现)
- 定义一组Pod的访问策略(负载均衡)
示意图:
2. Pod与Service的关系
- 通过label-selector相关联
- 通过Service实现Pod的负载均衡(TCP/UDP4层)
service只支持四层负载均衡:
四层:0SI中的传输层,TCP/UDP,四元组,只负责IP数据包转发了
七层:0SI中的应用层,HTTP、FTP、SNMP协议,可以拿到这些协议头部信息,那就可以实现基于协议层面的处理
示意图:
3. Service三种类型
3.1 ClusterIP:集群内部使用
ClusterlP: 默认,分配一个稳定的IP地址,即VIP,只能在集群内部访问(Namespace内的Pod)。
3.2 NodePort:对外暴露应用
NodePort: 在每个节点上启用一个端口来暴露服务,可以在集群外部访问。也会分配一个稳定内部集群IP地址。
访问地址:NodelP:NodePort
示意图:
NodePort访问流程:
user -> 域名(公网IP)-> node ip:port -> iptables/ipvs -> pod
一般生产环境node都是部署在内网,那30008这个端口怎么让互联网用户访问呢?
1、找一台有公网IP的服务器,装一个nginx,反向代理 -> node ip:port
2、只用你们外部负载均衡器(Nginx、LVS、HAProxy)-> node ip:port
3.3 LoadBalancer:对外暴露应用,适用公有云
LoadBalancer: 与NodePort类似,在每个节点上启用一个端口来暴露服务。除此之外,Kubernetes会请求底层云平台上的负载均衡器,将每个Node([NodelP]:[NodePort])作为后端添加进去。
示意图:
LoadBalancer访问流程:
user -> 域名(公网IP)-> 公有云上的负载均衡器(自动配置,控制器去完成)->node ip:port
userspace:自己在用户态实现的转发
iptables:阻断ip通信、端口映射NAT、跟踪包状态、数据包的修改
kube-proxy工作:
1、实现pod数据包转发
2、将service相关规则落地实现I