This project is in the process of being donated to the CNCF and is not affiliated with the Kubernetes project.

Path

Match the targeted path of an incoming request against specific path criteria.

For more information, see the Kubernetes Gateway API documentation.

Before you begin

  1. Follow the Get started guide to install K8sGateway, set up a gateway resource, and deploy the httpbin sample app.

  2. Get the external address of the gateway and save it in an environment variable.

    export INGRESS_GW_ADDRESS=$(kubectl get svc -n gloo-system gloo-proxy-http -o jsonpath="{.status.loadBalancer.ingress[0]['hostname','ip']}")
    echo $INGRESS_GW_ADDRESS  
    kubectl port-forward deployment/gloo-proxy-http -n gloo-system 8080:8080

Set up URI path matching

  1. Create an HTTPRoute resource for the match.example domain that matches incoming requests on the /status/200 path.

    kubectl apply -f- <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: httpbin-match
      namespace: httpbin
    spec:
      parentRefs:
        - name: http
          namespace: gloo-system
      hostnames:
        - match.example
      rules:
        - matches:
          - path:
              type: Exact
              value: /status/200
          backendRefs:
            - name: httpbin
              port: 8000
    EOF 
  2. Send a request to the /status/200 path of the httpbin app on the match.example domain. Verify that you get back a 200 HTTP response code.

    curl -vik http://$INGRESS_GW_ADDRESS:8080/status/200 -H "host: match.example:8080"
    curl -vik localhost:8080/status/200 -H "host: match.example"

    Example output:

    * Mark bundle as not supporting multiuse
    < HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    < access-control-allow-credentials: true
    access-control-allow-credentials: true
    < access-control-allow-origin: *
    access-control-allow-origin: *
    < date: Sat, 04 Nov 2023 03:19:26 GMT
    date: Sat, 04 Nov 2023 03:19:26 GMT
    < content-length: 0
    content-length: 0
    < x-envoy-upstream-service-time: 1
    x-envoy-upstream-service-time: 1
    < server: envoy
    server: envoy
  3. Send another request to the httpbin app. This time, use the /headers path. Because this path is not specified in the HTTPRoute, the request fails and a 404 HTTP response code is returned.

    curl -vik http://$INGRESS_GW_ADDRESS:8080/headers -H "host: match.example:8080"
    curl -vik localhost:8080/headers -H "host: match.example"

    Example output:

    * Mark bundle as not supporting multiuse
    < HTTP/1.1 404 Not Found
    HTTP/1.1 404 Not Found
    < date: Tue, 23 Apr 2024 18:52:01 GMT
    date: Tue, 23 Apr 2024 18:52:01 GMT
    < server: envoy
    server: envoy
    < content-length: 0
    content-length: 0

Cleanup

You can remove the resources that you created in this guide.
kubectl delete httproute httpbin-match -n httpbin