The route server
The lafferty lounge route server is used to manage route inside of a kubernetes cluster. It also holds key/cert information for domains.
Options
# flag default description
--data-dir # /var/lib/lafferty-lounge/route-server where the server should store its data
--token # the Bearer token to verify requests against
--port # 8080 the port to listen on
ENV
Prefix options with LL_ROUTE_SERVER
.
LL_ROUTE_SERVER_DATA_DIR="/data/dir"
Joi Schemas
const routeSchema = joi.object({
match: joi.string().required(),
target: joi.string().required(),
priority: joi.number().required(),
protocols: joi.array().items(joi.string().required()).required(),
description: joi.string().required()
});
const hostSchema = {
description: joi.string().required(),
match: joi.string().required(),
priority: joi.number().required(),
routes: joi.object().pattern(/.+/, routeSchema).required()
};
const tlsHostSchema = {
description: joi.string().required(),
key: joi.string(),
cert: joi.string()
};
const tlsAuthSchema = {
key: joi.string(),
cert: joi.string()
};
API
GET
/api/v1/hosts
{
"hosts": {
"lafferty-lounge.com": {
"match": "^lafferty-lounge.com",
"description": "the lafferty lounge site",
"priority": 1,
"routes": {
"apis": {
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}
}
}
}
}
PUT
/api/v1/hosts
joi.object().pattern(/.+/, hostSchema).required()
GET
/api/v1/hosts/:host
{
"match": "^lafferty-lounge.com",
"description": "the lafferty lounge site",
"priority": 1,
"routes": {
"apis": {
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}
}
}
PUT
/api/v1/hosts/:host
const hostSchema = {
description: joi.string().required(),
match: joi.string().required(),
priority: joi.number().required(),
routes: joi.object().pattern(/.+/, routeSchema).required()
}
GET
/api/v1/hosts/:host/routes
{
"apis": {
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}
}
PUT
/api/v1/hosts/:host/routes
joi.object().pattern(/.+/, routeSchema).required()
GET
/api/v1/hosts/:host/routes/:route
{
"match": "^/api/v1/.*",
"target": {
"url": "http://lafferty-lounge-api-server-v1",
"ca": "---BEGIN CERTIFICATE---",
"protocols": ["https"]
},
"priority": 1,
"description": "the lafferty lounge api server"
}
PUT
/api/v1/hosts/:host/routes/:route
const routeSchema = joi.object({
match: joi.string().required(),
target: joi.string().required(),
priority: joi.number().required(),
protocols: joi.array().items(joi.string().required()).required(),
description: joi.string().required()
});
GET
/api/v1/tls
{
"hosts": {
"lafferty-lounge.com": {
"description": "lafferty lounge main site",
"cert": "[optional] ---BEGIN CERT---",
"key": "[optional] ---BEGIN KEY---"
}
}
}
GET
/api/v1/tls/hosts
{
"lafferty-lounge.com": {
"description": "lafferty lounge main site",
"cert": "[optional] ---BEGIN CERT---",
"key": "[optional] ---BEGIN KEY---"
}
}
PUT
/api/v1/tls/hosts
joi.object().pattern(/.+/, tlsHostSchema).required()
GET
/api/v1/tls/hosts/:host
{
"description": "lafferty lounge main site",
"cert": "[optional] ---BEGIN CERT---",
"key": "[optional] ---BEGIN KEY---"
}
PUT
/api/v1/tls/hosts/:host
const tlsHostSchema = {
description: joi.string().required(),
key: joi.string(),
cert: joi.string()
};
PUT
/api/v1/tls/hosts/:host/auth
const tlsAuthSchema = {
key: joi.string(),
cert: joi.string()
};