Как перенаправить 70% трафика на службу ExternalName и добавить URL? - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу направить 70% моего трафика, поступающего в службу A, во внешнюю конечную точку и добавить URL.

Для этого я создал службу типа externalName, которая указывает на внешнюю конечную точку, а затем используюВходной контроллер Treafik для деления веса в процентах.

Мое определение сервиса выглядит примерно так:

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: wensleydale
    spec:
      ports:
      - name: http
        targetPort: 80
        port: 80
      selector:
        app: cheese
        task: wensleydale

    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: test-service
    spec:
      type: ExternalName
      externalName: www.google.com
      ports:
      - name: http
        targetPort: 80
        port: 80
      selector:
        app: cheese
        task: test-service

Ingress.yaml:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        traefik.ingress.kubernetes.io/service-weights: |
          test-service: 70%
          wensleydale: 30%
      name: cheese
    spec:
      rules:
      - http:
          paths:
          - backend:
              serviceName: test-service
              servicePort: 80
            path: /
          - backend:
              serviceName: wensleydale
              servicePort: 80
            path: /

Что я хочу вКроме того, когда трафик переходит на test-service, я хочу добавить путь.
В моем test-service я хочу, чтобы URL был примерно таким: www.google.com/something

Я открыт для использования других инструментов длядостичь этого.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы можете сделать следующее:

  1. Использовать входной шлюз Istio вместо шлюза traefik.Входной шлюз Istio является рекомендуемым способом контроля доступа в Istio.См. https://istio.io/docs/tasks/traffic-management/ingress/

  2. В соответствующей виртуальной службе используйте директиву HTTPRewrite https://istio.io/docs/reference/config/istio.networking.v1alpha3/#HTTPRewrite:

rewrite: uri: /something

0 голосов
/ 27 декабря 2018

К сожалению, вы попали в ограничение.Входные документы traefik устанавливают это условие при взвешивании: «Связанные служебные серверы должны использовать один и тот же путь и хост».(https://docs.traefik.io/user-guide/kubernetes/#traffic-splitting) Таким образом, вы не можете переписать путь только для одной из взвешенных целей. Ограничение исходит от https://github.com/kubernetes/kubernetes/issues/25485, поэтому вы можете увидеть там предложения, многие из которых упоминают istio. (См. Такжеhttps://github.com/zalando/skipper/issues/324)

Простое решение может состоять в том, чтобы развернуть другой прокси в кластере и использовать его для перезаписи цели во внутреннюю службу, которую вы не можете изменить. Тогда ваш Ingress сможет использовать тот же путьдля обоих.

Другим способом было бы посмотреть на настройку прокси-сервера с использованием файла conf, а не входных аннотаций. Для этого может быть достаточно фрагментов конфигурации, но я не уверен. Я подозреваю, что вам лучшеразверните дополнительный прокси-сервер, откройте его для внешних целей и настройте его напрямую (избегая абстракции Ingress).

...