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。管理
