API Gateway with HTTP#
In This Section#
No authentication#
Create API gateways#
You can create an API gateway with basic authentication by sending a POST request to the following endpoint:
<nuclio-host-name>/api/api_gateways
With the following request body:
{
"spec": {
"name": "<apigateway-name>",
"description": "some description",
"path": "/some/path",
"authenticationMode": "none",
"upstreams": [
{
"kind": "nucliofunction",
"nucliofunction": {
"name": "function-name-to-invoke"
},
"percentage": 0
}
],
"host": "<apigateway-name>-<project-name>.<nuclio-host-name>"
},
"metadata": {
"labels": {
"nuclio.io/project-name": "default"
},
"name": "<apigateway-name>"
}
}
Invoke API gateways#
To invoke it, send a request to the created API Gateway ingress (e.g.: <apigateway-name>-<project-name>.<nuclio-host-name>
,
specified on the request body spec.host
).
Basic authentication#
You can protect your function by applying basic authentication to the API gateway. With basic authentication the client needs to provide both a username and password to access a function.
Create API gateways#
You can create an API gateway with basic authentication by sending a POST request to the following endpoint:
<nuclio-host-name>/api/api_gateways
With the following request body:
{
"spec": {
"name": "<apigateway-name>",
"description": "some description",
"path": "/some/path",
"authenticationMode": "basicAuth",
"upstreams": [
{
"kind": "nucliofunction",
"nucliofunction": {
"name": "function-name-to-invoke"
},
"percentage": 0
}
],
"host": "<apigateway-name>-<project-name>.<nuclio-host-name>",
"authentication": {
"basicAuth": {
"username": "some-username",
"password": "some-password"
}
}
},
"metadata": {
"labels": {
"nuclio.io/project-name": "default"
},
"name": "<apigateway-name>"
}
}
Invoke API gateways with basic authentication#
To invoke it, simply send a request to the created API Gateway ingress (e.g.: <apigateway-name>-<project-name>.<nuclio-host-name>
,
specified on the request body spec.host
) with the following header:
key: Authorization
value: Basic base64encode("username:password")
Example:
For the following credentials:
"username": "some-username"
"password": "some-password"
base64 encoding of “some-username:some-password” is c29tZS11c2VybmFtZTpzb21lLXBhc3N3b3Jk
(echo "some-username:some-password" | base64 -d
),
so the resulting header is:
Authorization: Basic c29tZS11c2VybmFtZTpzb21lLXBhc3N3b3Jk
Invoking the function without the above header results in 401 Authorization Required
Delete an API Gateway#
To delete an API gateway, send a DELETE request to the following endpoint:
<nuclio-host-name>/api/api_gateways
With a request body specifying the name of the API gateway to delete:
{
"metadata":{
"name": "<apigateway-name>"
}
}
Response status code: 204 (No content).
Canary function#
You can control the percentage of traffic that goes to a canary function by changing the percentage of the upstream.
Add a canary function to an API gateway by adding another upstream to the API gateway, and set its "percentage"
to a value between 0 and 100.
Make sure to set the percentage of the first function accordingly.
For instance, if you have two functions, function-1
and function-2
, and you want to have 80% of the traffic go to function-1
and 20% of the traffic go to function-2
, specify the following:
{
"spec": {
"name": "<apigateway-name>",
"description": "some description",
"path": "/some/path",
"authenticationMode": "none",
"upstreams": [
{
"kind": "nucliofunction",
"nucliofunction": {
"name": "function-1"
},
"percentage": 80
},
{
"kind": "nucliofunction",
"nucliofunction": {
"name": "function-2"
},
"percentage": 20
}
],
"host": "<apigateway-name>-<project-name>.<nuclio-host-name>"
},
"metadata": {
"labels": {
"nuclio.io/project-name": "default"
},
"name": "<apigateway-name>"
}
}