发送请求时,可以在请求Header中携带自定义字段,以区分请求并做不同的处理。本文介绍如何配置请求头匹配。
前提条件
已完成准备工作,并部署helloworld服务和sleep服务。具体操作,请参见准备工作。
操作步骤
验证服务配置。
在ACK集群对应的KubeConfig环境下,执行以下命令,进入sleep环境开启bash。
kubectl exec -it deploy/sleep -- sh
执行以下命令,向helloworld服务发送请求。
curl helloworld:5000/hello
预期输出为以下两者之一,helloworld-v1和helloworld-v2随机响应。
Hello version: v2, instance: helloworld-v2-7d48f6b995-6**** Hello version: v1, instance: helloworld-v1-7567d85fd7-d****
使用istioctl工具,执行以下命令,为helloworld服务开启L7 Waypoint。
istioctl x waypoint apply --service-account helloworld-v1 istioctl x waypoint apply --service-account helloworld-v2
使用以下内容,创建目标规则。具体操作,请参见管理目标规则。
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: helloworld namespace: default spec: host: helloworld subsets: - labels: version: v1 name: v1 - labels: version: v2 name: v2
使用以下内容,创建虚拟服务,添加Header Matching配置。具体操作,请参见管理虚拟服务。
以下配置表示精确匹配
test-header
请求头,值为v1
时流量发往helloworld-v1,值为v2
时请求发往helloworld-v2。apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: helloworld-vs namespace: default spec: hosts: - helloworld http: - match: - headers: test-header: exact: v1 route: - destination: host: helloworld subset: v1 - match: - headers: test-header: exact: v2 route: - destination: host: helloworld subset: v2
验证Header Matching配置是否生效。
在ACK集群对应的KubeConfig环境下,执行以下命令,进入sleep环境开启bash。
kubectl exec -it deploy/sleep -- sh
执行以下命令,向helloworld服务发送带有
test-header: v1
请求头的请求。curl -H "test-header:v1" helloworld:5000/hello
预期输出:
Hello version: v1, instance: helloworld-v1-7567d85fd7-d****
执行以下命令,向helloworld服务发送带有
test-header: v2
请求头的请求。curl -H "test-header:v2" helloworld:5000/hello
预期输出:
Hello version: v2, instance: helloworld-v2-7d48f6b995-6****
以上结果表明Header Matching配置生效。
文档内容是否对您有帮助?