- k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡
- 环境变量
- DNS
- userspace 模式
- iptables
- ipvs
- kernelspace
- 前言
- endpoint
- kube-proxy
- 服务发现
- 总结
- 参考
service 是一组具有相同 label pod 集合的抽象,集群内外的各个服务可以通过 service 进行互相通信 。
当创建一个 service 对象时也会对应创建一个 endpoint 对象,endpoint 是用来做容器发现的,service 只是将多个 pod 进行关联,实际的路由转发都是由 kubernetes 中的 kube-proxy 组件来实现,因此,service 必须结合 kube-proxy 使用,kube-proxy 组件可以运行在 kubernetes 集群中的每一个节点上也可以只运行在单独的几个节点上,其会根据 service 和 endpoints 的变动来改变节点上 iptables 或者 ipvs 中保存的路由规则 。
endpointendpoint 是 k8s 集群中的一个资源对象,存储在 etcd 中,用来记录一个 service 对应的所有 pod 的访问地址 。
service 通过 selector 和 pod 建立关联 。k8s 会根据 service 关联到 pod 的 podIP 信息组合成一个 endpoint 。
如果 service 没有 selector 字段,当一个 service 被创建的时候,endpoint controller 不会自动创建 endpoint 。
$ kubectl get svc -n study-k8sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEgo-web-svc ClusterIP 10.233.55.112 <none> 8000/TCP 9d$ kubectl get endpoints -n study-k8sNAME ENDPOINTS AGEgo-web-svc 10.233.111.171:8000,10.233.111.172:8000,10.233.72.153:8000 + 2 more... 9d栗如
上面的 service go-web-svc,就有一个对应的 endpoint,ENDPOINTS 里面展示的就是 service 关联的 pod 的 ip 地址和端口 。
其中 endpoint controller 负载维护 endpoint 对象,主要的功能有下面几种
1、负责生成和维护所有endpoint对象的控制器;
2、负责监听 service 和对应 pod 的变化;
3、监听到 service 被删除,则删除和该 service 同名的 endpoint 对象;
4、监听到新的 service 被创建,则根据新建 service 信息获取相关 pod 列表,然后创建对应 endpoint 对象;
5、监听到 service 被更新,则根据更新后的 service 信息获取相关 pod 列表,然后更新对应 endpoint 对象;
6、监听到 pod 事件,则更新对应的 service 的 endpoint 对象,将 podIp 记录到 endpoint中;
kube-proxykube-proxy 是 Kubernetes 的核心组件,部署在每个 Node 节点上,它是实现 Kubernetes Service 的通信与负载均衡机制的重要组件; kube-proxy 负责为 Pod 创建代理服务,从 apiserver 获取所有 server 信息,并根据 server 信息创建代理服务,实现server到Pod的请求路由和转发,从而实现K8s层级的虚拟转发网络 。
经验总结扩展阅读
- 【算法训练营day4】LeetCode24. 两两交换链表中的结点
- 时空中的绘旅人司岚生日限定礼包有什么内容
- CentOS 8.2 对k8s基础环境配置
- 哪些星座很不会处理恋爱中的问题
- 香兰素在奶粉中的作用
- UML类中的6种关系
- 一斤糖蒜的糖和醋比例
- 空间站怎么提供氧气
- 古代鱼的雅称
- 使用 Kubeadm 部署 K8S安装