ASM支持在HTTP请求发往具体的服务主机前,重写请求的Authority和Host标头。如果通过虚拟服务将请求重定向到其它服务,还需要配置重写Host与Authority标头使目标服务接受请求。本文介绍如何配置重写请求Host与Authority标头。
前提条件
已完成准备工作,并部署httpbin服务、sleep服务和nginx服务。具体操作,请参见准备工作。
操作步骤
为nginx服务配置虚拟服务,将发往nginx服务的请求转发至httpbin服务,同时配置重写Host和Authority标头为
httpbin:8000
。登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 ,然后单击创建。
在创建页面,进行如下配置,单击预览,确认YAML内容无误后,单击确认,然后单击创建。
预览的YAML如下。关于配置项的说明,请参见虚拟服务(Virtual Service)CRD说明。
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: nginx namespace: default spec: hosts: - nginx.default.svc.cluster.local http: - rewrite: authority: 'httpbin:8000' route: - destination: host: httpbin.default.svc.cluster.local
在ACK集群对应的KubeConfig环境下,执行以下命令,验证标头重写是否生效。
kubectl exec -it deploy/sleep -- curl nginx:8000/headers
预期输出:
{ "headers": { "Accept": "*/*", "Host": "httpbin:8000", "User-Agent": "curl/8.1.2" } }
可以看到在sleep容器内部访问nginx服务的
/headers
路径,请求被转发到httpbin服务的/headers
路径上(即请求发往http://httpbin:8000/headers
)。该路径会返回接受到的请求标头,您可以看到请求的Host标头被修改为httpbin:8000
。
文档内容是否对您有帮助?