40. 拓扑感知路由
拓扑感知路由
拓扑感知路由指的是客户端对一个服务的访问流量,可以根据这个服务的端点拓扑,优先路由到与该客户端在同一个节点或者可用区的端点上的路由行为。
先决条件
为了开启服务感知路由,你需要:
- 开启
TopologyAwareHints
智能感知提示门控 - 开启
EndpointSlice 控制器 - 安装
kube-proxy
端点切片
我们知道
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: example-hints
labels:
kubernetes.io/service-name: example-svc
addressType: IPv4
ports:
- name: http
protocol: TCP
port: 80
endpoints:
- addresses:
- "10.127.2.3"
conditions:
ready: true
hostname: pod-1
nodename: node-a
zone: zone-a
nodeName
- 端点所在的Node 名称zone
- 端点所处的可用区hostname
- 端点的pod 名称
启用拓扑感知
请启用TopologyAwareHints
。通过把service.kubernetes.io/topology-aware-hints
的值设置为 auto
, 来激活服务的拓扑感知提示功能。这告诉
由
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: example-hints
labels:
kubernetes.io/service-name: example-svc
addressType: IPv4
ports:
- name: http
protocol: TCP
port: 80
endpoints:
- addresses:
- "10.1.2.3"
conditions:
ready: true
hostname: pod-1
zone: zone-a
hints:
forZones:
- name: "zone-a"
我们看到其中已注入了 hints
信息,对于上面这个示例,zone-a
的客户端访问会优先路由到该端点上。
管理
在大多数场合下,kubernetes.io/service-name
标签来标明的, 目的是方便查找隶属于某服务的所有
控制面(尤其是端点切片的控制器) 会创建和管理
为了确保多个实体可以管理endpointslice.kubernetes.io/managed-by
,用来标明哪个实体在管理某个endpointslice-controller.k8s.io
。管理