All Products
Search
Document Center

Alibaba Cloud Service Mesh:Configure an HTTP method matching rule

Last Updated:Oct 11, 2023

A service mesh proxy processes a request based on the HTTP method (such as GET and POST) matching rule configured in a virtual service. This topic describes how to configure an HTTP method matching rule.

Prerequisites

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

Procedure

  1. Check whether the service configurations take effect.

    1. 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 enable bash for the sleep service:

      kubectl exec -it deploy/sleep -- sh
    2. Run the following command to send a request to the helloworld service:

      curl helloworld:5000/hello

      The expected output is that helloworld-v1 or helloworld-v2 randomly responds to the request.

      Hello version: v2, instance: helloworld-v2-6b96c5684-4****
      Hello version: v1, instance: helloworld-v1-6d77f4c4cf-p****
  2. Use the following content to configure a destination rule. For more information, see Manage destination rules.

    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
    
  3. Use the following content to create a virtual service and add an HTTP method matching configuration (GET requests are handled by helloworld-v1). For more information, see Manage virtual services.

  4. apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: helloworld-vs
      namespace: default
    spec:
      hosts:
        - helloworld
      http:
        - match:
            - method:
                exact: GET
          route:
            - destination:
                host: helloworld
                subset: v1
  5. Check whether the configurations take effect.

    1. Use kubectl to connect to the ACK cluster based on the information in the kubeconfig file, and then run the following command to enable bash for the sleep service:

      kubectl exec -it deploy/sleep -- sh
    2. Run the following command to send a GET request to the helloworld service:

      curl -X GET helloworld:5000/hello

      The expected output is always that helloworld-v1 responds to the request.

      Hello version: v1, instance: helloworld-v1-6986f64596-s****