Service 拓扑
Service 拓扑可以让一个服务基于集群的 Node 拓扑进行流量路由。例如,一个服务可以指定流量是被优先路由到一个和客户端在同一个 Node 或者在同一可用区域的端点。
介绍
默认情况下,发往 ClusterIP 或者 NodePort 服务的流量可能会被路由到任意一个服务后端的地址上。从 Kubernetes 1.7 开始,可以将“外部”流量路由到节点上运行的 pod 上,但不支持 ClusterIP 服务,更复杂的拓扑 — 比如分区路由 — 也还不支持。通过允许 Service 创建者根据源 Node 和目的 Node 的标签来定义流量路由策略,Service 拓扑特性实现了服务流量的路由。
通过对源 Node 和目的 Node 标签的匹配,运营者可以使用任何符合运营者要求的度量值来指定彼此“较近”和“较远”的节点组。例如,对于在公有云上的运营者来说,更偏向于把流量控制在同一区域内,因为区域间的流量是有费用成本的,而区域内的流量没有。其它常用需求还包括把流量路由到由 DaemonSet 管理的本地 Pod 上,或者把保持流量在连接同一机架交换机的 Node 上,以获得低延时。
前提条件
为了启用拓扑感知服务路由功能,必须要满足以下一些前提条件:
Kubernetes 的版本不低于 1.17
Kube-proxy 运行在 iptables 模式或者 IPVS 模式
启用 端点切片功能
启用 Service 拓扑
要启用 Service 拓扑,就要给 kube-apiserver 和 kube-proxy 启用 ServiceTopology 功能:
--feature-gates="ServiceTopolo