首页 >>  正文

【K8s 精选】Kubernetes Service 介绍

来源:www.zuowenzhai.com    作者:编辑   日期:2024-05-28

问题1: 为什么需要服务发现
① 容器 Pod 生命周期短暂,容器 IP 地址随时变化
② Deployment 中的 Pod 组需要统一的访问入口和负载均衡
③ 应用在不同部署环境需要统一部拓扑和访问方式

问题2: 如何提供外部访问和负载均衡的能力
Kubernetes Service 具备服务发现和负载均衡的功能,即 一方面提供了统一的访问入口,另一方面负载均衡到后端 Pod 。下图是 Service 的简约架构图,左侧表示 Service 提供了外部访问和 Pod 网络访问 ,右侧表示对接了一组 Pod,同时把请求负载均衡到这组 Pod。

APIServer :Kubernetes 所有对象都会注册到 APIServer上,监听这些对象的变化,例如 Pod、StatefulSet、Service 等。
Controller Manager :负责配置 LoadBalance 的一个负责均衡器给外部访问。
Coredns :负责把 Service 名字(类似域名)解析为 Service 虚拟 IP 即 ClusterIP,同时观测 Service 的变化。
Kube-proxy :负责把 Service 虚拟 IP 即 ClusterIP 转换为后端 Pod IP,同时观测后端 Pod 的变化。

如上架构图示例,Client Pod3 访问 Service 的步骤:
Coredns 解析出 CluserIP :Client Pod3 拿着 Service name (域名)请求 Coredns,Coredns 解析域名后返回 ClusterIP。
Kube-proxy 拦截后负载均衡到后端 Pod :Client Pod3 拿着 ClusterIP 请求宿主机网络后,被 Kube-proxy 所配置的 iptables 拦截了,随后负债均衡转发到后端 Pod。

LoaderBalancer 转发请求到某节点的 NodePort :外部请求通过 LoaderBalancer 转发到某节点的 NodePort,同时 LoaderBalander 通过 Controller Manager 监听 Service 的变化。
Kube-proxy 把 NodePort 转换为 ClusterIP 并转发到后端 Pod :NodePort 的请求被 Kube-proxy 所配置的 iptables 拦截并转发到 CluserIP,最终转发到后端 Pod。

直接使用 ClusterIP

直接使用 Service Name,Codedns 解析
{servicename}.{namespace}.svc.cluster.local

使用环境变量访问

通过 Service Name 可以直接解析到所有后端 Pod IP
客户端可以自主选择需要访问的 Pod IP





(编辑:伍霄宋)
联系方式:
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 作文摘要网