Configure a host rewriting rule

更新时间:
复制 MD 格式

Service Mesh (ASM) allows a service mesh proxy to rewrite the Authority and Host headers of an HTTP request before the request is sent to a specific host. If a request needs to be redirected to another service by using a virtual service, you must configure a rule to rewrite the Host and Authority headers so that the destination service accepts the request. This topic describes how to configure a rule to rewrite the Host and Authority headers of a request.

Prerequisites

The preparations are completed, and the HTTPBin, sleep, and NGINX services are deployed. For more information, see Preparations.

Procedure

  1. Configure a virtual service for the NGINX service to forward requests destined for the NGINX service to the HTTPBin service. In addition, configure a rule to rewrite the Host and Authority headers as httpbin:8000.

    1. Log on to the ASM console. In the left-side navigation pane, choose Service Mesh > Mesh Management.

    2. On the Mesh Management page, click the name of the ASM instance. In the left-side navigation pane, choose Traffic Management Center > VirtualService. On the page that appears, click Create.

    3. On the Create page, enter the following YAML. Click Preview to verify the configuration. If correct, click Submit and then Create.

      The following YAML is an example. For more information about the parameters, see Virtual Service CRD reference.

      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
  2. Use kubectl to connect to the Container Service for Kubernetes (ACK) cluster based on the information in the kubeconfig file, and then run the following command to check whether the header rewriting configuration takes effect:

    kubectl exec -it deploy/sleep -- curl nginx:8000/headers

    Expected output:

    {
      "headers": {
        "Accept": "*/*", 
        "Host": "httpbin:8000", 
        "User-Agent": "curl/8.1.2"
      }
    }

    You can see that the requests that are destined for the /headers path of the NGINX service in the sleep container are forwarded to the /headers path of the HTTPBin service (which indicates that requests are sent to http://httpbin:8000/headers). The path returns the received request headers. You can view that the Host headers of the requests are changed to httpbin:8000.