mirror of
https://github.com/openfaas/faas.git
synced 2025-06-21 22:33:23 +00:00
Adding Kong integration guide
Signed-off-by: Jono Finger <jono@foodnotblogs.com>
This commit is contained in:
97
guide/kong_integration.md
Normal file
97
guide/kong_integration.md
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
# Using Kong as an API gateway for OpenFaaS
|
||||||
|
|
||||||
|
[Kong](https://getkong.org) is an API gateway that provides features such as security, logging, and rate limiting. By putting this in front of OpenFaaS you can quickly get access to these things and a lot more via [the many other plugins written](https://getkong.org/plugins/) for it.
|
||||||
|
|
||||||
|
Below is a demo of how you could use Kong as an authentication layer for OpenFaaS. You should be able to paste this all (from its Markdown source) into [Play With Docker](http://labs.play-with-docker.com/) to see it in action.
|
||||||
|
|
||||||
|
## Setup OpenFaaS
|
||||||
|
|
||||||
|
docker swarm init --advertise-addr $(hostname -i)
|
||||||
|
git clone https://github.com/alexellis/faas
|
||||||
|
cd faas
|
||||||
|
./deploy_stack.sh
|
||||||
|
|
||||||
|
## Check that one of the sample functions works
|
||||||
|
|
||||||
|
curl localhost:8080/function/func_echoit -d 'hello world'
|
||||||
|
|
||||||
|
|
||||||
|
## Setup Kong
|
||||||
|
|
||||||
|
docker run -d --name kong-database \
|
||||||
|
-p 5432:5432 \
|
||||||
|
-e "POSTGRES_USER=kong" \
|
||||||
|
-e "POSTGRES_DB=kong" \
|
||||||
|
postgres:9.4
|
||||||
|
|
||||||
|
docker run --rm \
|
||||||
|
--link kong-database:kong-database \
|
||||||
|
-e "KONG_DATABASE=postgres" \
|
||||||
|
-e "KONG_PG_HOST=kong-database" \
|
||||||
|
kong:latest kong migrations up
|
||||||
|
|
||||||
|
docker run -d --name kong \
|
||||||
|
--link kong-database:kong-database \
|
||||||
|
-e "KONG_DATABASE=postgres" \
|
||||||
|
-e "KONG_PG_HOST=kong-database" \
|
||||||
|
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
|
||||||
|
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
|
||||||
|
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
|
||||||
|
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
|
||||||
|
-p 8000:8000 \
|
||||||
|
-p 8443:8443 \
|
||||||
|
-p 8001:8001 \
|
||||||
|
-p 8444:8444 \
|
||||||
|
kong:latest
|
||||||
|
|
||||||
|
|
||||||
|
## Get a route to the OpenFaaS server
|
||||||
|
|
||||||
|
FAASTHOST=`hostname -i`
|
||||||
|
|
||||||
|
|
||||||
|
## Put Kong in front of a single function
|
||||||
|
|
||||||
|
sleep 5 # wait for Kong to be ready
|
||||||
|
|
||||||
|
curl -i -X POST \
|
||||||
|
--url http://localhost:8001/apis/ \
|
||||||
|
--data 'name=echoit' \
|
||||||
|
--data 'uris=/echo' \
|
||||||
|
--data 'upstream_url=http://'$FAASTHOST':8080/function/func_echoit'
|
||||||
|
|
||||||
|
curl localhost:8000/echo -d 'hello there'
|
||||||
|
|
||||||
|
## or put Kong in front of all the functions
|
||||||
|
|
||||||
|
curl -i -X POST \
|
||||||
|
--url http://localhost:8001/apis/ \
|
||||||
|
--data 'name=functions' \
|
||||||
|
--data 'uris=/functs' \
|
||||||
|
--data 'upstream_url=http://'$FAASTHOST':8080/function'
|
||||||
|
|
||||||
|
curl localhost:8000/functs/func_echoit -d 'hello there'
|
||||||
|
|
||||||
|
|
||||||
|
## Add a some auth with a Kong plugin
|
||||||
|
|
||||||
|
curl -i -X POST \
|
||||||
|
--url http://localhost:8001/apis/echoit/plugins/ \
|
||||||
|
--data 'name=key-auth'
|
||||||
|
|
||||||
|
curl -i -X POST \
|
||||||
|
--url http://localhost:8001/consumers/ \
|
||||||
|
--data "username=jdoe"
|
||||||
|
|
||||||
|
curl -i -X POST \
|
||||||
|
--url http://localhost:8001/consumers/jdoe/key-auth/ \
|
||||||
|
--data 'key=longsecretkey'
|
||||||
|
|
||||||
|
|
||||||
|
## Verify the plugin worked
|
||||||
|
|
||||||
|
curl localhost:8000/echo -d 'hello there' # no key specified
|
||||||
|
|
||||||
|
curl localhost:8000/echo -d 'hello there' --header "apikey: badkey"
|
||||||
|
|
||||||
|
curl localhost:8000/echo -d 'hello there' --header "apikey: longsecretkey"
|
Reference in New Issue
Block a user