Docker Kubernetes Service 网络服务代理模式详解前端
Servicenode
注:kubernetes deployment服务分配服务器负载均衡VIP只能NODE节点单独访问,这里须要外网用户能够放问到容器内,这里就须要用到service。nginx
网络代理模式后端
userspace模式
一、NODE节点的客户端要访问service的代理IP+端口。
二、IP与端口是由kube-proxy维护的,它建立了IPtables一个规则。
三、请求通过IPtables后,再转发给kube-proxy端口。
四、kube-proxy关联后端的backend pod,将请求根据标签代理到指定的Backenpod。服务器
注:Backend Pod:访问节点IP的指定端口,转发到后端的pod。kubectl get ep 可查看Backend Pod IP。
注:效率比较低,须要通过一次转发。
注:kube-proxy是使用的用户空间处理。网络
iptables模式
一、NODE节点客户端直接访问serviceIP,Linux根据Iptables协议栈规则策略匹配。
二、serviceIP根据标签直接访问Backendpod。负载均衡
注:直接使用iptables 使用内核空间处理 速度快。spa
服务代理类型代理
ClusterIPblog
分配一个内部集群IP地址,只能在集群内部访问(同Namespace内的Pod),默认ServiceType。
NodePort
分配一个内部集群IP地址,并在每一个节点上启用一个端口来暴露服务,能够在集群外部访问。
访问地址:<NodeIP>:<NodePort>
LoadBalancer
分配一个内部集群IP地址,并在每一个节点上启用一个端口来暴露服务。
除此以外,Kubernetes会请求底层云平台上的负载均衡器,将每一个Node([NodeIP]:[NodePort])做为后端添加进去。
ExternalName
经过CNAME将Service与externalName的值映射。要求kube-dns的版本为v1.7+。
拓扑图
nodeport:前端对用户代理使用nginx/LVS/HAProxy来作为负载均衡使用,代理每一个NODE节点IP端口去访问pod。
LoadBalancer:主要经过云平台提供封装好的接口来作为负载均衡器进行代理转发。