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
class ProxyDockerController(authentik.outposts.controllers.docker.DockerController):
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)
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        ]
deployment_ports