【Path Rewrite】重写请求路径

配置重写请求路径可以使HTTP请求的路径在转发到目标应用程序之前被重写为指定值。本文介绍如何配置重写请求路径。

前提条件

已完成准备工作,并部署httpbin服务和sleep服务。具体操作,请参见准备工作

操作步骤

  1. 使用istioctl工具,执行以下命令,为httpbin服务部署Waypoint代理。

    istioctl x waypoint apply --service-account httpbin

    预期输出:

    waypoint default/httpbin applied
  2. 为httpbin服务配置虚拟服务,当匹配到发往httpbin服务的请求路径为/get时,将请求路径重写为/status/400

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择流量管理中心 > 虚拟服务,然后单击创建

    3. 创建页面,进行如下配置,单击预览,确认YAML内容无误后,单击确认,然后单击创建

      image.png

      展开查看预览YAML

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: httpbin
        namespace: default
      spec:
        hosts:
          - httpbin.default.svc.cluster.local
        http:
          - rewrite:
              uri: /status/400
            route:
              - destination:
                  host: httpbin.default.svc.cluster.local
  3. 执行以下命令,验证路径重写配置是否生效。

    kubectl exec -it deploy/sleep -- curl httpbin:8000/get -I

    预期输出:

    HTTP/1.1 400 Bad Request
    server: istio-envoy
    date: xxx, xx xxx 202x xx:xx:xx GMT
    content-type: text/html; charset=utf-8
    access-control-allow-origin: *
    access-control-allow-credentials: true
    content-length: 0
    x-envoy-upstream-service-time: 4

    可以看到在sleep容器内部访问httpbin服务的/get路径,发往此路径的请求应该获得200响应状态码,但此时获得400响应状态码。证明路径重写生效,请求的路径被重写为/status/400