Kubernetes 基于标头的Istio RouteRule用户代理不';行不通

Kubernetes 基于标头的Istio RouteRule用户代理不';行不通,kubernetes,kubectl,minikube,istio,Kubernetes,Kubectl,Minikube,Istio,我有两项服务在minikube上运行,Foo和Bar。当我访问Foo服务时,它向Bar服务发出请求以检索一些数据条形图服务有两个版本“1.0”和“2.0”。 我已使用istio设置默认的RouteRule配置,将所有请求路由到“1.0”: 它工作正常,我可以看到所有请求都被转发到“1.0”。 现在我想根据标题添加另一个RouteRule,这样所有来自Chrome浏览器的请求都将转发到“2.0”: 但它不起作用。所有请求仍被路由到“1.0”。 我可以看到创建了RouteRule: > ist

我有两项服务在minikube上运行,
Foo
Bar
。当我访问
Foo
服务时,它向
Bar
服务发出请求以检索一些数据<代码>条形图服务有两个版本
“1.0”
“2.0”
。 我已使用
istio
设置默认的
RouteRule
配置,将所有请求路由到
“1.0”

它工作正常,我可以看到所有请求都被转发到
“1.0”
。 现在我想根据标题添加另一个
RouteRule
,这样所有来自
Chrome
浏览器的请求都将转发到
“2.0”

但它不起作用。所有请求仍被路由到
“1.0”
。 我可以看到创建了
RouteRule

> istioctl get routerules
NAME            KIND                    NAMESPACE
bar-default RouteRule.v1alpha2.config.istio.io  default
bar-v2      RouteRule.v1alpha2.config.istio.io  default
我可以在浏览器中的开发者工具中看到,
UserAgent
标题存在。
我如何调试请求以查看为什么不将其转发到
“2.0”

可能是您的Foo服务没有传递从浏览器获取的用户代理标头

附加检查是通过
kubectl exec
从Foo执行
curl
调用Bar,并检查在传递用户代理头时是否调用了2.0版:

curl-H“用户代理:---Chrome---”酒吧服务器


您可以在Foo容器中安装
curl
,也可以使用带有
curl
的单独容器,例如来自的容器。可能是Foo服务没有传递它从浏览器获得的用户代理头

附加检查是通过
kubectl exec
从Foo执行
curl
调用Bar,并检查在传递用户代理头时是否调用了2.0版:

curl-H“用户代理:---Chrome---”酒吧服务器

您可以在Foo容器中安装
curl
,也可以使用带有
curl
的单独容器,就像来自

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: bar-v2
spec:
  destination:
    name: bar-server
  precedence: 2
  match:
    request:
      headers:
        user-agent:
          regex: ".*Chrome.*"
  route:
  - labels:
      version: "2.0"
> istioctl get routerules
NAME            KIND                    NAMESPACE
bar-default RouteRule.v1alpha2.config.istio.io  default
bar-v2      RouteRule.v1alpha2.config.istio.io  default