authentik.providers.proxy.controllers.docker
Proxy Provider Docker Controller
1"""Proxy Provider Docker Controller""" 2 3from urllib.parse import urlparse 4 5from authentik.outposts.controllers.base import DeploymentPort 6from authentik.outposts.controllers.docker import DockerController 7from authentik.outposts.models import DockerServiceConnection, Outpost 8from authentik.providers.proxy.models import ProxyProvider 9 10 11class ProxyDockerController(DockerController): 12 """Proxy Provider Docker Controller""" 13 14 def __init__(self, outpost: Outpost, connection: DockerServiceConnection): 15 super().__init__(outpost, connection) 16 self.deployment_ports = [ 17 DeploymentPort(9000, "http", "tcp"), 18 DeploymentPort(9443, "https", "tcp"), 19 ] 20 21 def _get_labels(self) -> dict[str, str]: 22 hosts = [] 23 for proxy_provider in ProxyProvider.objects.filter(outpost__in=[self.outpost]): 24 proxy_provider: ProxyProvider 25 external_host_name = urlparse(proxy_provider.external_host) 26 hosts.append(f"`{external_host_name.netloc}`") 27 traefik_name = self.name 28 labels = super()._get_labels() 29 labels["traefik.enable"] = "true" 30 labels[f"traefik.http.routers.{traefik_name}-router.rule"] = ( 31 f"({' || '.join([f'Host({host})' for host in hosts])})" 32 f" && PathPrefix(`/outpost.goauthentik.io`)" 33 ) 34 labels[f"traefik.http.routers.{traefik_name}-router.tls"] = "true" 35 labels[f"traefik.http.routers.{traefik_name}-router.service"] = f"{traefik_name}-service" 36 labels[f"traefik.http.services.{traefik_name}-service.loadbalancer.healthcheck.path"] = ( 37 "/outpost.goauthentik.io/ping" 38 ) 39 labels[f"traefik.http.services.{traefik_name}-service.loadbalancer.healthcheck.port"] = ( 40 "9300" 41 ) 42 labels[f"traefik.http.services.{traefik_name}-service.loadbalancer.server.port"] = "9000" 43 return labels
12class ProxyDockerController(DockerController): 13 """Proxy Provider Docker Controller""" 14 15 def __init__(self, outpost: Outpost, connection: DockerServiceConnection): 16 super().__init__(outpost, connection) 17 self.deployment_ports = [ 18 DeploymentPort(9000, "http", "tcp"), 19 DeploymentPort(9443, "https", "tcp"), 20 ] 21 22 def _get_labels(self) -> dict[str, str]: 23 hosts = [] 24 for proxy_provider in ProxyProvider.objects.filter(outpost__in=[self.outpost]): 25 proxy_provider: ProxyProvider 26 external_host_name = urlparse(proxy_provider.external_host) 27 hosts.append(f"`{external_host_name.netloc}`") 28 traefik_name = self.name 29 labels = super()._get_labels() 30 labels["traefik.enable"] = "true" 31 labels[f"traefik.http.routers.{traefik_name}-router.rule"] = ( 32 f"({' || '.join([f'Host({host})' for host in hosts])})" 33 f" && PathPrefix(`/outpost.goauthentik.io`)" 34 ) 35 labels[f"traefik.http.routers.{traefik_name}-router.tls"] = "true" 36 labels[f"traefik.http.routers.{traefik_name}-router.service"] = f"{traefik_name}-service" 37 labels[f"traefik.http.services.{traefik_name}-service.loadbalancer.healthcheck.path"] = ( 38 "/outpost.goauthentik.io/ping" 39 ) 40 labels[f"traefik.http.services.{traefik_name}-service.loadbalancer.healthcheck.port"] = ( 41 "9300" 42 ) 43 labels[f"traefik.http.services.{traefik_name}-service.loadbalancer.server.port"] = "9000" 44 return labels
Proxy Provider Docker Controller
ProxyDockerController( outpost: authentik.outposts.models.Outpost, connection: authentik.outposts.models.DockerServiceConnection)