你可以使用Traefik Proxy来进行 Traffic Management with Argo Rollouts。

TraefikService是支持Traefik 作为 ingress 时加权轮询负载均衡Traefik 作为 ingress 时流量镜像能力的对象。

如何将 TraefikService 与 Argo Rollouts 集成,作为加权轮询负载均衡器

首先,我们需要使用 TraefikService 对象的加权轮询负载平衡能力创建 TraefikService 对象。

apiVersion: traefik.containo.us/v1alpha1
kind: TraefikService
metadata:
  name: traefik-service
spec:
  weighted:
    services:
      - name: stable-rollout # 为稳定应用程序版本创建的 k8s 服务名称
        port: 80
      - name: canary-rollout # 为新应用程序版本创建的 k8s 服务名称
        port: 80

请注意,我们不指定“weight”字段。它需要与 ArgoCD 同步。如果我们指定此字段,而 Argo Rollouts 控制器更改它,则 ArgoCD 控制器将注意到并将显示此资源不同步(如果你正在使用 Argo CD 管理 Rollout)。

其次,我们需要创建 Argo Rollouts 对象。

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollouts-demo
spec:
  replicas: 5
  strategy:
    canary:
      canaryService: canary-rollout
      stableService: stable-rollout
      trafficRouting:
        traefik:
          weightedTraefikServiceName: traefik-service # 指定我们之前创建的 traefikService 资源的名称
      steps:
      - setWeight: 30
      - pause: {}
      - setWeight: 40
      - pause: {duration: 10}
      - setWeight: 60
      - pause: {duration: 10}
      - setWeight: 80
      - pause: {duration: 10}
  ...

如何将 TraefikService 与 Argo Rollouts 集成,作为流量镜像

首先,我们还需要创建 TraefikService 对象,但使用其流量镜像功能。

apiVersion: traefik.containo.us/v1alpha1
kind: TraefikService
metadata:
  name: traefik-service
spec:
  mirroring:
    name: some-service
    port: 80
    mirrors:
      - name: stable-rollout # 为稳定应用程序版本创建的 k8s 服务名称
        port: 80
      - name: canary-rollout # 为新应用程序版本创建的 k8s 服务名称
        port: 80

请注意,我们不指定“percent”字段。它需要与 ArgoCD 同步。如果我们指定此字段,而 Argo Rollouts 控制器更改它,则 ArgoCD 控制器将注意到并将显示此资源不同步(如果你正在使用 Argo CD 管理 Rollout)。

其次,我们需要创建 Argo Rollouts 对象。

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollouts-demo
spec:
  replicas: 5
  strategy:
    canary:
      canaryService: canary-rollout
      stableService: stable-rollout
      trafficRouting:
        traefik:
          mirrorTraefikServiceName: traefik-service # 指定我们之前创建的 traefikService 资源的名称
      steps:
      - setWeight: 30
      - pause: {}
      - setWeight: 40
      - pause: {duration: 10}
      - setWeight: 60
      - pause: {duration: 10}
      - setWeight: 80
      - pause: {duration: 10}
  ...