Kubernetes 基于标头的Istio RouteRule用户代理不';行不通
我有两项服务在minikube上运行,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
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