Определение маршрута разделения трафика в 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 для другого примера. Прокрутите вниз до раздела «Маршрутизация трафика»; этот пример делает именно то, что я описал выше.