作者:_LiNanaP | 来源:互联网 | 2023-06-14 18:25
k8sservice服务发现KubernetesService定义了这样一种抽象:一个Pod的逻辑分组,一种可以访问它们的策略——通常称为微服务。这一组Pod能够被Service访
k8s service服务发现
Kubernetes Service 定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问它们的策略 —— 通常称为微服务。 这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector
1.1 核心迭代
- 在 Kubernetes 集群中,每个 Node 运行一个 kube-proxy 进程。
- kube-proxy 负责为 Service 实现了一种 VIP(虚拟 IP)的形式,而不是 ExternalName 的形式。 在 Kubernetes v1.0 版本,代理完全在 userspace。在 Kubernetes v1.1 版本,新增了 iptables 代理,但并不是默认的运行模式。 从 Kubernetes v1.2 起,默认就是 iptables 代理。 在 Kubernetes v1.8.0-beta.0 中,添加了 ipvs 代理
- 在 Kubernetes 1.14 版本开始默认使用 ipvs 代理
在 Kubernetes v1.0 版本,Service 是 “4层”(TCP/UDP over IP)概念。 在 Kubernetes v1.1 版本,新增了 Ingress API(beta 版),用来表示 “7层”(HTTP)服务
下面演示三个版本的迭代演变过程
Ⅰ、userspace 代理模式
用户构建的代理方式
- kube-proxy通过监听kube-apiserver获取到pod和svc的变化,
- client访问防火墙service Ip(iptables)规则,防火墙规则是由kube-proxy通过netlink修改的,然后会被代理到当前的所在机器的kube-proxy,kube-peoxy再把流量发给pod1或者远端的pod2/3,所以可以看到kube-proxy的压力比较大
Ⅱ、iptables 代理模式