Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
stylenone

Overview

The Gateway Proxy is a standalone application to be deployed separately. The proxy enables communication to an outbound server through it's REST API. If a request is send to it’s endpoint it will forward the request http endpoint at /proxy/stream. Requests to this endpoint will be forwarded to upstream servers.

The proxy is build on top of Spring Boot. It's connection routing aware and offers authentication via OAuth20, Oauth10A, a Bearer Token forward mechanism and fixed headers.

...

By default the proxy only works for outbound connections to URLs configured in the connection-routing-.yml file. All other requests are blocked. Setting the environment variable PROXY_ALLOW_UNKNOWN_TARGETs to true allows requests to be proxied to all target URLs.

Running the Java application

After building the Gateway Proxy it can be started using the jar file built in the previous step:

Code Block
#> java -jar target/smartfacts-gateway-proxy-<version>.jar

Running the Docker Container

...

Logging verbosity

Logging verbosity can be controlled by an environment variable called PROXY_GATEWAY_LOG_LEVEL. Set this to DEBUG for full verbosity and to INFO for more concise logging output.

Running the Application

The application is provided as a docker container at registry.mid.de/smartfacts/smartfacts-gateway-proxy:latest and . A docker-compose.yml file can be started using the docker-compose.yml file in the root directory of this project. The docker compose file is configured to run the application on port 8418 on the host machine. In order to supply a custom used to run the gateway proxy in a Docker environment and provide volumes to inject SSL certificates and a connection-routing.yml file. The following example docker-compose.yml file exposes the proxy on port 8418 of the docker host. It uses the certificates stored in /tmp/certificates. It uses the connection-routing.yml file at /tmp/connection-routing.yml configuration file they can be mounted s volumes in the root directory of the docker image.

Logging verbosity

Logging verbosity can be controlled by an environment variable called PROXY_GATEWAY_LOG_LEVEL. Set this to DEBUG for full verbosity and to INFO for more concise logging output.

HTTP API

The proxy application exposes endpoints

Docker Compose configuration file

Code Block
languageyaml
services:
    gateway-proxy:
        image: registry.mid.de/smartfacts/smartfacts-gateway-proxy:<VERSION>
        ports:
            - 8418:8080
        environment:
            - USE_SYSTEM_CA_CERTS=1
        volumes:
            - /tmp/cacerts:/certificates
            - /tmp/connection-routing.yml:/opt/smartfacts-gateway-proxy/connection-routing.yml

Starting the docker container

Change to the directory containing the docker-compose.yml configuration file. In order to access the MID Docker registry you need an access token from MID.

Code Block
languagebash
#> docker login registry.mid.de
#> docker compose up gateway-proxy

Proxy HTTP Endpoint

The proxy application exposes the endpoint /proxy/stream to relay HTTP GET, POST, PUT, DELETE, PATCH and HEAD requests. Only requests to outbound servers that are configured in the connection-routing.yml configuration file are allowed by default. This behavior can be controlled by the environment variable PROXY_ALLOW_UNKNOWN_TARGETS.

...

Request sent to the endpoint /proxy/stream with a Request Parameter named target are proxied. The target request parameter has to be set to an outbound
server URL. The outbound server URL has to be url encoded. Responses from the outbound server are streamed through the proxy back to the user-agent.

Examples

  1. Proxy a GET request to http://example.com/foo:

    Code Block
    #> curl -X GET http://proxy.host/proxy/stream?target=http%3a%2f%2fexample.com/foo
  2. Proxy a Post request with a JSON body to http://example.com/bar:

    Code Block
     #> curl -X POST -H "Content-Type: appliction/json" -d '{"my-data": "baz"}' http://proxy.host/proxy/stream?target=http%3a%2f%2fexample.com/bar

...