Installer: core auth services
diff --git a/charts/auth/templates/lighthouse-config.yaml b/charts/auth/templates/lighthouse-config.yaml
new file mode 100644
index 0000000..1b33be2
--- /dev/null
+++ b/charts/auth/templates/lighthouse-config.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ .Values.ui.nebula.lighthouse.name }}
+  namespace: {{ .Release.Namespace }}
+data:
+{{ (.Files.Glob "lighthouse.yaml").AsConfig | replace "<INTERNAL_IP>" .Values.ui.nebula.lighthouse.internalIP | replace "<EXTERNAL_IP>" .Values.ui.nebula.lighthouse.externalIP | replace "<PORT>" .Values.ui.nebula.lighthouse.port | indent 2 }}
diff --git a/charts/auth/templates/ui.yaml b/charts/auth/templates/ui.yaml
new file mode 100644
index 0000000..50296f7
--- /dev/null
+++ b/charts/auth/templates/ui.yaml
@@ -0,0 +1,124 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: ui
+  namespace: {{ .Release.Namespace }}
+spec:
+  type: ClusterIP
+  selector:
+    app: ui
+  ports:
+  - name: http
+    port: 80
+    targetPort: http
+    protocol: TCP
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: ui
+  namespace: {{ .Release.Namespace }}
+  annotations:
+    cert-manager.io/cluster-issuer: {{ .Values.ui.certificateIssuer }}
+    acme.cert-manager.io/http01-edit-in-place: "true"
+spec:
+  ingressClassName: {{ .Values.ui.ingressClassName }}
+  tls:
+  - hosts:
+    - accounts-ui.{{ .Values.ui.domain }}
+    secretName: cert-accounts-ui.{{ .Values.ui.domain }}
+  rules:
+  - host: accounts-ui.{{ .Values.ui.domain }}
+    http:
+      paths:
+      - path: /
+        pathType: Prefix
+        backend:
+          service:
+            name: ui
+            port:
+              name: http
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: ui
+  namespace: {{ .Release.Namespace }}
+spec:
+  selector:
+    matchLabels:
+      app: ui
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: ui
+    spec:
+      volumes:
+      - name: cert
+        secret:
+          secretName: {{ .Values.ui.nebula.node.secretName }}
+      - name: config
+        configMap:
+          name: {{ .Values.ui.nebula.lighthouse.name }}
+      hostAliases:
+      - ip: "111.0.0.1"
+        hostnames:
+          - "hydra.{{ .Values.ui.internalDomain }}"
+      containers:
+      - name: server
+        image: giolekva/auth-ui:latest
+        imagePullPolicy: Always
+        env:
+        - name: KRATOS_PUBLIC_URL
+          value: "https://accounts.{{ .Values.ui.domain }}"
+        ports:
+        - name: http
+          containerPort: 8080
+          protocol: TCP
+        command:
+        - server
+        - --port=8080
+        - --kratos=https://accounts.{{ .Values.ui.domain }}
+        - --hydra=hydra{{ .Values.ui.internalDomain }}
+        - --email-domain={{ .Values.ui.domain }}
+        # resources:
+        #   requests:
+        #     memory: "10Mi"
+        #     cpu: "10m"
+        #   limits:
+        #     memory: "20Mi"
+        #     cpu: "100m"
+      - name: lighthouse
+        image: giolekva/nebula:latest
+        imagePullPolicy: Always
+        securityContext:
+          capabilities:
+            add:
+            - NET_ADMIN
+          privileged: true
+        ports:
+        - name: lighthouse
+          containerPort: 4247
+          protocol: UDP
+        command:
+        - nebula
+        - --config=/etc/nebula/config/lighthouse.yaml
+        volumeMounts:
+        - name: cert
+          mountPath: /etc/nebula/lighthouse
+          readOnly: true
+        - name: config
+          mountPath: /etc/nebula/config
+          readOnly: true
+---
+apiVersion: lekva.me/v1
+kind: NebulaNode
+metadata:
+  name: {{ .Values.ui.nebula.node.name }}
+  namespace: {{ .Release.Namespace }}
+spec:
+  caName: {{ .Values.ui.nebula.certificateAuthority.name }}
+  caNamespace: {{ .Values.ui.nebula.certificateAuthority.namespace }}
+  ipCidr: {{ .Values.ui.nebula.node.ipCidr }}
+  secretName: {{ .Values.ui.nebula.node.secretName }}