Docker Kubernetes Service 网络服务代理模式详解

时间:2021-04-09 03:44:56

Docker Kubernetes  Service 网络服务代理模式详解

Service

  • service是实现kubernetes网络通信的一个服务
  • 主要功能:负载均衡、网络规则分布到具体pod

注:kubernetes deployment服务分配服务器负载均衡VIP只能NODE节点单独访问,这里需要外网用户可以放问到容器内,这里就需要用到service。


网络代理模式

  • kube-proxy v1.0中只支持userspace模式,在v1.1中,添加了iptables代理,在v1.2开始iptables是默认的。
  • service为pod提供了一个统一的访问入口已userspace模式iptables模式,进行代理转发。
  • userspace与iptables主要是实现对IP的转发。

userspace模式
1、NODE节点的客户端要访问service的代理IP+端口。
2、IP与端口是由kube-proxy维护的,它创建了IPtables一个规则。
3、请求经过IPtables后,再转发给kube-proxy端口。
4、kube-proxy关联后端的backend pod,将请求根据标签代理到指定的Backenpod。

注:Backend Pod:访问节点IP的指定端口,转发到后端的pod。kubectl get ep 可查看Backend Pod IP。
注:效率比较低,需要经过一次转发。
注:kube-proxy是使用的用户空间处理。

Docker Kubernetes  Service 网络服务代理模式详解

iptables模式
1、NODE节点客户端直接访问serviceIP,Linux根据Iptables协议栈规则策略匹配。
2、serviceIP根据标签直接访问Backendpod。

注:直接使用iptables 使用内核空间处理 速度快。

Docker Kubernetes  Service 网络服务代理模式详解


服务代理类型

ClusterIP

  分配一个内部集群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。

Docker Kubernetes  Service 网络服务代理模式详解

LoadBalancer:主要通过云平台提供封装好的接口来做为负载均衡器进行代理转发。

Docker Kubernetes  Service 网络服务代理模式详解