深入理解Istio:云原生服务网格进阶实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.3 kube-proxy组件

在Kubernetes集群中,每个Node运行一个kube-proxy进程。kube-proxy负责为service实现一种VIP(虚拟IP地址)的形式。在Kubernetes v1.0版本中,代理完全在userspace代理模式中实现。在Kubernetes v1.1版本中,新增了iptables代理模式,但不是默认的运行模式。从Kubernetes v1.2版本起,默认使用iptables代理模式。在Kubernetes v1.8.0-beta.0版本中,添加了IPVS代理模式。

kube-proxy的缺陷

首先,如果转发的Pod不能正常提供服务,那么它不会自动尝试另一个Pod,不过这个问题可以通过liveness probes解决。每个Pod都有一个健康检查机制,当Pod健康状况有问题时,kube-proxy会删除对应的转发规则。另外,nodePort类型的服务也无法添加TLS,或者更复杂的报文路由机制。

kube-proxy实现了流量在Kubernetes 服务中多个Pod实例间的负载均衡,但是如何对这些服务间的流量做细粒度的控制,比如,将流量按照百分比划分到不同的应用版本(这些应用版本都属于同一个服务的一部分,但位于不同的部署上),做金丝雀发布(灰度发布)和蓝绿发布?Kubernetes社区给出了使用Deployment做金丝雀发布的方法,该方法本质上就是通过修改Pod的label将不同的Pod 划归到Deployment的service上。