Route Policy

Route Policy #

RoutePolicy 是用于定义通用的复合型的路由规则, 最终会转换成 Route CR

明确路由 #

单对单导入 #

apiVersion: traffic.ferryproxy.io/v1alpha2
kind: RoutePolicy
metadata:
  name: policy-name
  namespace: ferry-system
spec:
  exports:
    - hubName: cluster-1
      service:
        namespace: default
        name: app-1
  imports:
    - hubName: cluster-0
      service:
        namespace: default
        name: app-1

这是一个和 Route CR 的示例等价的 CR

从多个 Hub 导入 #

apiVersion: traffic.ferryproxy.io/v1alpha2
kind: RoutePolicy
metadata:
  name: policy-name
  namespace: ferry-system
spec:
  exports:
    - hubName: cluster-1
      service:
        namespace: default
        name: app-1
    - hubName: cluster-2
      service:
        namespace: default
        name: app-1
  imports:
    - hubName: cluster-0
      service:
        namespace: default
        name: app-1

这个路由规则会生成两条 Route CR, 分别是把 Hub cluster-2 和 cluster-2 的 app-1.default 导入 Hub cluster-0 这是会在 cluster-0 的 app-1.default 的 endpoint 配置多个 backend 分别指向导入的两条路由

就算是写在不同的 RoutePolicy CR 或者 Route CR 中, 只要其导入的目的地是一样的都会为 endpoint 配置多个 backend

导出到多个 Hub #

apiVersion: traffic.ferryproxy.io/v1alpha2
kind: RoutePolicy
metadata:
  name: policy-name
  namespace: ferry-system
spec:
  exports:
    - hubName: cluster-0
      service:
        namespace: default
        name: app-1
  imports:
    - hubName: cluster-1
      service:
        namespace: default
        name: app-1
    - hubName: cluster-2
      service:
        namespace: default
        name: app-1

这条规则其实等价于两条单对单的规则

匹配的路由 #

除了明确的路由之外, Ferry 提供了 label 筛选需要导入导出 Service 的能力 不过要注意的是匹配路由不能修改导入的 name

使用 Label 筛选的批量导出 #

apiVersion: traffic.ferryproxy.io/v1alpha2
kind: RoutePolicy
metadata:
  name: policy-name
  namespace: ferry-system
spec:
  exports:
    - hubName: cluster-1
      service:
        labels:
          export: enabled
        namespace: default
  imports:
    - hubName: cluster-0

这条路由规则将会在 Hub cluster-1 的 namespace default 中匹配所有带有 export=enabled label 的 Service 导出到 Hub cluster-0

使用 Label 筛选的批量导入 #

apiVersion: traffic.ferryproxy.io/v1alpha2
kind: RoutePolicy
metadata:
  name: policy-name
  namespace: ferry-system
spec:
  exports:
    - hubName: cluster-1
      service:
        labels:
          export: enabled
        namespace: default
  imports:
    - hubName: cluster-0
      service:
        labels:
          export-2: enabled

这条规则在上一条的基础上增加了导出的 Service 必须还带有 export-2=enabled label