Skip to main content

Proxy Requests to External Services

In this guide, you will learn how to configure routing to external services hosted outside the Kubernetes cluster using the Ingress Controller.

Prerequisite

  1. Complete Set Up Ingress Controller and Gateway.

Create a Route

Create a Kubernetes manifest file for a route that proxies requests to httpbin.org:

httpbin-route.yaml
apiVersion: v1
kind: Service
metadata:
namespace: aic
name: httpbin-external-domain
spec:
type: ExternalName
externalName: httpbin.org
ports:
- name: http
port: 80
appProtocol: http
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: aic
name: httpbin-ip
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /ip
backendRefs:
- name: httpbin-external-domain
port: 80

For Gateway API HTTPRoute resources, the controller reads appProtocol from an ExternalName Service port just as it does for a selector-based Service. Use http, https, kubernetes.io/ws, or kubernetes.io/wss to select the upstream protocol. See Detect Upstream Protocol.

Apply the configurations to your cluster:

kubectl apply -f httpbin-route.yaml

Verify

Expose the gateway’s service port to your local machine:

# replace with your gateway’s service name
kubectl port-forward svc/<gateway-service-name> 9080:80 &

Send a request to the route:

curl "http://127.0.0.1:9080/ip"

You should see a response similar to the following:

{
"origin": "183.94.122.205"
}