API7 Docs

Proxy Requests to External Services

Learn how to configure APISIX or API7 Ingress Controller to proxy requests to external services hosted outside your Kubernetes cluster.

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"
}