Определение маршрута разделения трафика в Kuma/Envoy

Я пытаюсь создать демо-версию сервисной сетки с помощью Kuma и не понимаю, как настроить разделение трафика при просмотре примера в документации. У меня есть две версии микросервиса, которые возвращают разные результаты в зависимости от переменной среды, определенной в конфигурации Kubernetes. И служба, связанная с модулями, настраивается своей конфигурацией, какой модуль использовать (не уверен, что это правильный способ сделать это):

      apiVersion: v1
kind: Pod
metadata:
  name: dntapi-mil
  namespace: meshdemo
  labels:
    uservice: dntapi
    format: military
spec:
  containers:
  - name: dntapi
    image: meshdemo:dntapi
    ports:
    - name: http
      containerPort: 4000
    env:
      - name: MILITARY
        value: "true"

---

apiVersion: v1
kind: Pod
metadata:
  name: dntapi-std
  namespace: meshdemo
  labels:
    uservice: dntapi
    format: standard
spec:
  containers:
  - name: dntapi
    image: meshdemo:dntapi
    ports:
    - name: http
      containerPort: 4000
    env:
      - name: MILITARY
        value: "false"

---

apiVersion: v1
kind: Service
metadata:
  name: dntapi
  namespace: meshdemo
spec:
  selector:
    uservice: dntapi
    format: military
  ports:
  - protocol: TCP
    port: 4000
    targetPort: 4000

Это работает исключительно с точки зрения K8, если я изменю селектор на сервисе, но если посмотреть на пример Kuma с разделенным трафиком:

        conf:
    split:
      - weight: 90
        destination:
          kuma.io/service: redis_default_svc_6379
          version: '1.0'
      - weight: 10
        destination:
          kuma.io/service: redis_default_svc_6379
          version: '2.0'

К чему относится «версия», когда она связана со службой (и я должен признать, что не понимаю, как могут быть две службы с одним и тем же идентификатором). Это селекторы K8s?

Я должен добавить, что когда я проверяю сервисы с kumactl, я вижу два для этого микросервиса, один без имени порта:

      dntapi-std_meshdemo_svc          Online   1/1
dntapi_meshdemo_svc_4000         Online   1/1

Заранее спасибо.

1 ответ

Измените определение службы, чтобы использовать только метку, общую для обоих вариантов рабочей нагрузки (похоже, это будет uservice: dntapi). Затем используйте formatпометить как «теги» в пункте назначения Kuma TrafficRoute, так же, как в примере используется versionтег (который является/может быть получен непосредственно из меток Kubernetes). Это позволит вам контролировать, какой процент трафика отправляется в поды, помеченные format: standardи какой процент отправляется в поды с пометкой format: military.

См. https://github.com/kumahq/kuma-demo/tree/master/kubernetes для другого примера. Прокрутите вниз до раздела «Маршрутизация трафика»; этот пример делает именно то, что я описал выше.

Другие вопросы по тегам