A service mesh proxy processes a request based on the requested URI and the HTTP rule configured in a virtual service. Virtual services support exact match, prefix match, and regular expression match of URI paths. This topic describes how to configure a URI path matching rule.
Prerequisites
The preparations are completed, and the helloworld and sleep services are deployed. For more information, see Preparations.
Procedure
Check whether the service configurations take effect.
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
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-7d48f6b995-6**** Hello version: v1, instance: helloworld-v1-6986f64596-s****
Use the istioctl tool to run the following commands to deploy a Layer 7 waypoint proxy for the helloworld service:
istioctl x waypoint apply --service-account helloworld
Use the following content to create 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
Use the following content to create a virtual service and add a URI path matching configuration. For more information, see Manage virtual services.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: helloworld-vs namespace: default spec: hosts: - helloworld http: - match: - uri: exact: /hello route: - destination: host: helloworld subset: v1
Check whether the configurations take effect.
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
Run the following command to send a request to the
/hello
path of the helloworld service:curl helloworld:5000/hello
The expected output is always that helloworld-v1 responds to the request.
Hello version: v1, instance: helloworld-v1-6986f64596-s****