k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡( 四 )


同时 k8s 中也建议使用 DNS 来做服务发现 。
【k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡】Kubernetes DNS 服务器是唯一的一种能够访问 ExternalName 类型的 Service 的方式 。
总结k8s 中一般使用 Service 为 Pod 对象提供一个固定、统一的访问接口及负载均衡的能力;
k8s 中的负载均衡主要借助于 endpoint 和 kube-proxy 来实现;
endpoint 是 k8s 集群中的一个资源对象,存储在 etcd 中,用来记录一个 service 对应的所有 pod 的访问地址,当一个 service 关联的 pod 被删除,更新,新增,对应的 endpoint 资源都会更新;
kube-proxy 是 Kubernetes 的核心组件,部署在每个 Node 节点上,它是实现 Kubernetes Service 的通信与负载均衡机制的重要组件; kube-proxy 负责为 Pod 创建代理服务,从 apiserver 获取所有 server 信息,并根据 server 信息创建代理服务,实现server到Pod的请求路由和转发,从而实现K8s层级的虚拟转发网络;
kube-proxy 的路由转发规则是通过其后端的代理模块实现的,其中 kube-proxy 的代理模块目前有四种实现方案,userspace、iptables、ipvs、kernelspace ;
service 的 endpoints 和 kube-proxy 解决了容器的发现和负载均衡的问题,但是 service 服务如何被内部的服务找到呢,Kubernetes 支持两种基本的服务发现模式 —— 环境变量和 DNS;
其中 k8s 中推荐使用 DNS 来做 service 的服务发现,当前 kubernetes 集群默认使用 CoreDNS 作为默认的 DNS 服务,主要原因是 CoreDNS 是基于 Plugin 的方式进行扩展的,简单,灵活,并且不完全被Kubernetes所捆绑 。
参考【kubernetes service 原理解析】https://zhuanlan.zhihu.com/p/111244353【service selector】https://blog.csdn.net/luanpeng825485697/article/details/84296765【一文看懂 Kube-proxy】https://zhuanlan.zhihu.com/p/337806843【Kubernetes 【网络组件】kube-proxy使用详解】https://blog.csdn.net/xixihahalelehehe/article/details/115370095【Service】https://jimmysong.io/kubernetes-handbook/concepts/service.html【Service】https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/【k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡】https://boilingfrog.github.io/2022/10/16/k8s中的service如何找到绑定的Pod以及如何实现Pod负载均衡/

经验总结扩展阅读