Host redirect
Redirect requests to a different host.
For more information, see the Kubernetes Gateway API documentation.
Before you begin
-
Follow the Get started guide to install kgateway.
-
Follow the Sample app guide to create an API gateway proxy with an HTTP listener and deploy the httpbin sample app.
-
Get the external address of the gateway and save it in an environment variable.
export INGRESS_GW_ADDRESS=$(kubectl get svc -n kgateway-system http -o jsonpath="{.status.loadBalancer.ingress[0]['hostname','ip']}") echo $INGRESS_GW_ADDRESS
kubectl port-forward deployment/http -n kgateway-system 8080:8080
Set up host redirects
-
Create an HTTPRoute for the httpbin app. In the following example, requests for the
host.redirect.example
domain are redirected to thewww.example.com
hostname, and a 302 HTTP response code is returned to the user.kubectl apply -f- <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: httpbin-redirect namespace: httpbin spec: parentRefs: - name: http namespace: kgateway-system hostnames: - host.redirect.example rules: - filters: - type: RequestRedirect requestRedirect: hostname: "www.example.com" statusCode: 302 EOF
-
Send a request to the httpbin app on the
host.redirect.example
domain and verify that you get back a 302 HTTP response code and the redirect locationwww.example.com/headers
.curl -vi http://$INGRESS_GW_ADDRESS:8080/headers -H "host: host.redirect.example:8080"
curl -vi localhost:8080/headers -H "host: host.redirect.example"
Example output:
* Mark bundle as not supporting multiuse < HTTP/1.1 302 Found HTTP/1.1 302 Found < location: http://www.example.com/headers location: http://www.example.com/headers < 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-redirect -n httpbin