Current labels:
preevy.access
preevy.inject_script
preevy.expose
Goals:
- support multiple ports per container
- support multiple behavior properties per port: private/public, injection
- support multiple routes (aliases) per container port, each with its own behavior
- sane defaults
- consistent naming and scheme for labels
- given a set of labels, the proxy agent can print the normalized configuration labels which is complete (like e.g,
docker compose config)
Example 1 - defaults
services:
my-service:
ports:
- 3000
- 8080:8080
- 8081:8081
can be normalized into:
services:
my-service:
ports:
- 3000
- 8080:8080
- 8081:8081
labels:
preevy.routes.[3000].port: 3000
preevy.routes.[3000].access: public
preevy.routes.[8080].port: 8080
preevy.routes.[8080].access: public
preevy.routes.[8081].port: 8081
preevy.routes.[8081].access: public
and results the following routes:
my-service-3000: port 3000, public
my-service-8080: port 8080, public
my-service-8081: port 8081, public
Example 2
services:
my-service:
ports:
- 3000
- 8080:8080
- 8081:8081
labels:
# global default
preevy.access: private
preevy.routes.[8080].access: public
preevy.routes.web.port: 3000
preevy.routes.web-with-tool.port: 3000
preevy.routes.web-with-tool.inject_script.x.src: http://my-script.com
can be normalized into:
services:
my-service:
ports:
- 3000
- 8080:8080
- 8081:8081
labels:
preevy.routes.web.port: 3000
preevy.routes.web.access: private
preevy.routes.web-with-tool.port: 3000
preevy.routes.web-with-tool.access: private
preevy.routes.web-with-tool.inject_script.x.src: http://my-script.com
preevy.routes.[8080].port: 8080
preevy.routes.[8080].access: public
preevy.routes.[8081].port: 8081
preevy.routes.[8081].access: private
and results the following routes:
web: port 3000, public
web-with-tool: port 3000, private, injects script http://my-script.com
my-service-8080: port 8080, public
my-service-8081: port 8081, private
note that the default route for port 3000 my-service-3000 is not created because its port is specified in the web and web-with-tool routes.
Edge cases
Missing port
labels:
preevy.routes.web.access: private
This configuration is invalid: there is no preevy.routes.web.port label, can't determine the port for route web.
Redirecting default routes
labels:
preevy.routes.[8080].port: 3000
This configuration is valid albeit confusing. It creates the route my-service-8080 with port 3000 and disables the default route for port 3000 my-service-3000.
Current labels:
preevy.accesspreevy.inject_scriptpreevy.exposeGoals:
docker compose config)Example 1 - defaults
can be normalized into:
and results the following routes:
my-service-3000: port 3000, publicmy-service-8080: port 8080, publicmy-service-8081: port 8081, publicExample 2
can be normalized into:
and results the following routes:
web: port 3000, publicweb-with-tool: port 3000, private, injects scripthttp://my-script.commy-service-8080: port 8080, publicmy-service-8081: port 8081, privatenote that the default route for port 3000
my-service-3000is not created because its port is specified in thewebandweb-with-toolroutes.Edge cases
Missing port
This configuration is invalid: there is no
preevy.routes.web.portlabel, can't determine the port for routeweb.Redirecting default routes
This configuration is valid albeit confusing. It creates the route
my-service-8080with port 3000 and disables the default route for port 3000my-service-3000.