Я пытаюсь реализовать какую-то трафиковую c маршрутизацию с использованием Istio в кластере Kubernetes.
Ситуация следующая:
(обслуживание клиентов) => (служба предпочтений) => (служба рекомендаций), которая имеет две версии: v1 и v2.
Я хочу использовать пользовательский заголовок, например X-Svc-Env
из Istio VirtualService, и указать через этот заголовок версию службы рекомендаций, которую я хочу использовать.
Конфигурация для VirtualService следующая:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: recommendation
namespace: online
spec:
hosts:
- recommendation
http:
- match:
- headers:
x-svc-env:
regex: v2
route:
- destination:
host: recommendation
subset: version-v2
- route:
- destination:
host: recommendation
subset: version-v1
Кроме того, используется следующее DestinationRule:
kind: DestinationRule
metadata:
name: recommendation
namespace: online
spec:
host: recommendation
subsets:
- labels:
version: v1
name: version-v1
- labels:
version: v2
name: version-v2
Хорошо .. . это не работает, потому что каким-то образом мой пользовательский заголовок не распространяется через Envoy Proxy (я полагаю).
Я должен упомянуть, что если я использую известный заголовок HTTP, например: baggage-user-agent (который является заголовком User-Agent из спецификации OpenTracing, все идет хорошо).
Tx!