k8s使用ServiceTopology实现流量拓扑

使用前提:

在kube-proxy,apiserver,kube-controller-manager,scheduler四个组件中开启:
–feature-gates="ServiceTopology=true`

场景:

1、希望pod访问service的时候,优先转发给service后端中跟源pod在同一node上的目的pod

2、希望pod访问service的时候,优先转发给service后端中跟源pod在同一zone上的目的pod

3、希望pod访问service的时候,优先转发给service后端中跟源pod在同一region上的目的pod

实现:

仅路由到节点本地端点的一种服务。如果节点上不存在端点,流量则被丢弃:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  topologyKeys:
    - "kubernetes.io/hostname"

首选节点本地端点,如果节点本地端点不存在,则回退到集群范围端点的一种服务:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  topologyKeys:
    - "kubernetes.io/hostname"
    - "*"

首选地域端点而不是区域端点的一种服务。 如果以上两种范围内均不存在端点, 流量则被丢弃。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  topologyKeys:
    - "topology.kubernetes.io/zone"
    - "topology.kubernetes.io/region"

优先选择节点本地端点,地域端点,然后是区域端点,最后才是集群范围端点的 一种服务。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  topologyKeys:
    - "kubernetes.io/hostname"
    - "topology.kubernetes.io/zone"
    - "topology.kubernetes.io/region"
    - "*"
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐