From 98d20d2d45c40bc0411a197199ffc74d9d99fb8a Mon Sep 17 00:00:00 2001 From: Vegard Hagen Date: Sun, 23 Oct 2022 15:30:18 +0200 Subject: [PATCH] feat(apps): Added Home Assistant application --- QUICKSTART.md | 8 - README.md | 8 +- .../traefik-forward-auth/kustomization.yaml | 2 +- .../home-assistant/deployment.yaml | 24 +++ .../home-assistant}/kustomization.yaml | 3 +- .../home-assistant/namespace.yaml | 4 + .../home-assistant/service.yaml | 10 + apps/home-assistant/ingress.yaml | 24 +++ apps/home-assistant/kustomization.yaml | 9 + apps/home-assistant/namespace.yaml | 4 + .../configs/traefik-forward-auth.ini | 5 + .../traefik-forward-auth/deployment.yaml | 50 +++++ .../traefik-forward-auth/kustomization.yaml | 3 +- .../traefik-forward-auth/middleware.yaml | 10 + .../traefik-forward-auth/service.yaml | 11 ++ apps/kustomization.yaml | 8 + apps/traefik-forward-auth/whoami/ingress.yaml | 17 -- apps/whoami/00-whoami.yml | 66 ------- .../ingress.yaml | 9 +- .../kustomization.yaml | 1 + .../namespace.yaml | 0 .../configs/traefik-forward-auth.ini | 4 +- .../traefik-forward-auth/deployment.yaml | 0 .../traefik-forward-auth/kustomization.yaml | 19 ++ .../traefik-forward-auth/middleware.yaml | 0 .../traefik-forward-auth/service.yaml | 0 .../whoami/deployment.yaml | 0 apps/whoami/whoami/kustomization.yaml | 8 + .../whoami/service.yaml | 0 main.tf | 174 ++++++------------ 30 files changed, 259 insertions(+), 222 deletions(-) create mode 100644 apps/home-assistant/home-assistant/deployment.yaml rename apps/{traefik-forward-auth/whoami => home-assistant/home-assistant}/kustomization.yaml (80%) create mode 100644 apps/home-assistant/home-assistant/namespace.yaml create mode 100644 apps/home-assistant/home-assistant/service.yaml create mode 100644 apps/home-assistant/ingress.yaml create mode 100644 apps/home-assistant/kustomization.yaml create mode 100644 apps/home-assistant/namespace.yaml create mode 100644 apps/home-assistant/traefik-forward-auth/configs/traefik-forward-auth.ini create mode 100644 apps/home-assistant/traefik-forward-auth/deployment.yaml rename apps/{traefik-forward-auth => home-assistant}/traefik-forward-auth/kustomization.yaml (95%) create mode 100644 apps/home-assistant/traefik-forward-auth/middleware.yaml create mode 100644 apps/home-assistant/traefik-forward-auth/service.yaml create mode 100644 apps/kustomization.yaml delete mode 100644 apps/traefik-forward-auth/whoami/ingress.yaml delete mode 100644 apps/whoami/00-whoami.yml rename apps/{traefik-forward-auth/traefik-forward-auth => whoami}/ingress.yaml (62%) rename apps/{traefik-forward-auth => whoami}/kustomization.yaml (89%) rename apps/{traefik-forward-auth => whoami}/namespace.yaml (100%) rename apps/{traefik-forward-auth => whoami}/traefik-forward-auth/configs/traefik-forward-auth.ini (56%) rename apps/{traefik-forward-auth => whoami}/traefik-forward-auth/deployment.yaml (100%) create mode 100644 apps/whoami/traefik-forward-auth/kustomization.yaml rename apps/{traefik-forward-auth => whoami}/traefik-forward-auth/middleware.yaml (100%) rename apps/{traefik-forward-auth => whoami}/traefik-forward-auth/service.yaml (100%) rename apps/{traefik-forward-auth => whoami}/whoami/deployment.yaml (100%) create mode 100644 apps/whoami/whoami/kustomization.yaml rename apps/{traefik-forward-auth => whoami}/whoami/service.yaml (100%) diff --git a/QUICKSTART.md b/QUICKSTART.md index 280e486..86bb6ad 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -62,12 +62,4 @@ traefik-cert-pv `PersistentVolume` for persistent storage of certificates using terraform init terraform plan terraform apply -``` - -## Test application - -If not already created with Terraform run - -```shell -kubectl apply -f apps/whoami/00-whoami.yml ``` \ No newline at end of file diff --git a/README.md b/README.md index 19e0bf2..04b8155 100644 --- a/README.md +++ b/README.md @@ -143,13 +143,7 @@ IP can be found with `kubectl get svc`. # Test-application -Create a test-application (if not already created with Terraform) with - -```shell -kubectl apply -f apps/whoami/00-whoami.yml -``` - -`whoami` should now be available at `https://whoami.${DOMAIN}`. +A test-application `whoami` should be available at `https://whoami.${DOMAIN}`. # Cleanup diff --git a/apps/arr/traefik-forward-auth/kustomization.yaml b/apps/arr/traefik-forward-auth/kustomization.yaml index 80eb41a..b8c391f 100644 --- a/apps/arr/traefik-forward-auth/kustomization.yaml +++ b/apps/arr/traefik-forward-auth/kustomization.yaml @@ -4,8 +4,8 @@ commonLabels: app: traefik-forward-auth resources: - - deployment.yaml - service.yaml + - deployment.yaml - middleware.yaml configMapGenerator: diff --git a/apps/home-assistant/home-assistant/deployment.yaml b/apps/home-assistant/home-assistant/deployment.yaml new file mode 100644 index 0000000..790d865 --- /dev/null +++ b/apps/home-assistant/home-assistant/deployment.yaml @@ -0,0 +1,24 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: home-assistant +spec: + replicas: 1 + selector: + matchLabels: + app: home-assistant + template: + spec: + volumes: + - name: home-assistant-config + hostPath: + path: "/mnt/sdb1/config/home-assistant" + containers: + - image: homeassistant/home-assistant + name: home-assistant + volumeMounts: + - mountPath: "/config" + name: home-assistant-config + ports: + - name: web + containerPort: 8123 \ No newline at end of file diff --git a/apps/traefik-forward-auth/whoami/kustomization.yaml b/apps/home-assistant/home-assistant/kustomization.yaml similarity index 80% rename from apps/traefik-forward-auth/whoami/kustomization.yaml rename to apps/home-assistant/home-assistant/kustomization.yaml index bb8fd9f..c227f1f 100644 --- a/apps/traefik-forward-auth/whoami/kustomization.yaml +++ b/apps/home-assistant/home-assistant/kustomization.yaml @@ -1,9 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization commonLabels: - app: whoami + app: home-assistant resources: - service.yaml - deployment.yaml - - ingress.yaml \ No newline at end of file diff --git a/apps/home-assistant/home-assistant/namespace.yaml b/apps/home-assistant/home-assistant/namespace.yaml new file mode 100644 index 0000000..93acd9a --- /dev/null +++ b/apps/home-assistant/home-assistant/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: home-assistant \ No newline at end of file diff --git a/apps/home-assistant/home-assistant/service.yaml b/apps/home-assistant/home-assistant/service.yaml new file mode 100644 index 0000000..b44aa3c --- /dev/null +++ b/apps/home-assistant/home-assistant/service.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: home-assistant +spec: + ports: + - name: web + port: 8123 + selector: + app: home-assistant diff --git a/apps/home-assistant/ingress.yaml b/apps/home-assistant/ingress.yaml new file mode 100644 index 0000000..c07fb1a --- /dev/null +++ b/apps/home-assistant/ingress.yaml @@ -0,0 +1,24 @@ +apiVersion: traefik.containo.us/v1alpha1 +kind: IngressRoute +metadata: + name: ingressroute-arr +spec: + entryPoints: + - websecure + routes: + - match: Host(`auth-hass.stonegarden.dev`) + kind: Rule + services: + - name: traefik-forward-auth + port: 4181 + middlewares: + - name: traefik-forward-auth + - match: Host(`hass.stonegarden.dev`) + kind: Rule + services: + - name: home-assistant + port: 8123 + middlewares: + - name: traefik-forward-auth + tls: + certResolver: letsencrypt \ No newline at end of file diff --git a/apps/home-assistant/kustomization.yaml b/apps/home-assistant/kustomization.yaml new file mode 100644 index 0000000..bced2a3 --- /dev/null +++ b/apps/home-assistant/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: home-assistant + +resources: + - namespace.yaml + - ingress.yaml + - traefik-forward-auth + - home-assistant diff --git a/apps/home-assistant/namespace.yaml b/apps/home-assistant/namespace.yaml new file mode 100644 index 0000000..7c1d06d --- /dev/null +++ b/apps/home-assistant/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: home-assistant diff --git a/apps/home-assistant/traefik-forward-auth/configs/traefik-forward-auth.ini b/apps/home-assistant/traefik-forward-auth/configs/traefik-forward-auth.ini new file mode 100644 index 0000000..810d31f --- /dev/null +++ b/apps/home-assistant/traefik-forward-auth/configs/traefik-forward-auth.ini @@ -0,0 +1,5 @@ +cookie-name = "_hass_auth" +log-level = "error" +cookie-domain = "stonegarden.dev" +auth-host = "auth-hass.stonegarden.dev" +whitelist = "veghag@gmail.com, nina.m.smorsgard@gmail.com" \ No newline at end of file diff --git a/apps/home-assistant/traefik-forward-auth/deployment.yaml b/apps/home-assistant/traefik-forward-auth/deployment.yaml new file mode 100644 index 0000000..e7d4e20 --- /dev/null +++ b/apps/home-assistant/traefik-forward-auth/deployment.yaml @@ -0,0 +1,50 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: traefik-forward-auth +spec: + replicas: 1 + selector: + matchLabels: + app: traefik-forward-auth + strategy: + type: Recreate + template: + spec: + terminationGracePeriodSeconds: 60 + containers: + - image: thomseddon/traefik-forward-auth:2 + name: traefik-forward-auth + ports: + - containerPort: 4181 + protocol: TCP + env: + - name: CONFIG + value: "/config" + - name: PROVIDERS_GOOGLE_CLIENT_ID + valueFrom: + secretKeyRef: + name: traefik-forward-auth-secrets + key: google-client-id + - name: PROVIDERS_GOOGLE_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: traefik-forward-auth-secrets + key: google-client-secret + - name: SECRET + valueFrom: + secretKeyRef: + name: traefik-forward-auth-secrets + key: secret + volumeMounts: + - name: configs + mountPath: /config + subPath: traefik-forward-auth.ini + + volumes: + - name: configs + configMap: + name: configs + - name: traefik-forward-auth-secrets + secret: + secretName: traefik-forward-auth-secrets \ No newline at end of file diff --git a/apps/traefik-forward-auth/traefik-forward-auth/kustomization.yaml b/apps/home-assistant/traefik-forward-auth/kustomization.yaml similarity index 95% rename from apps/traefik-forward-auth/traefik-forward-auth/kustomization.yaml rename to apps/home-assistant/traefik-forward-auth/kustomization.yaml index 9a230a0..b8c391f 100644 --- a/apps/traefik-forward-auth/traefik-forward-auth/kustomization.yaml +++ b/apps/home-assistant/traefik-forward-auth/kustomization.yaml @@ -4,9 +4,8 @@ commonLabels: app: traefik-forward-auth resources: - - deployment.yaml - service.yaml - - ingress.yaml + - deployment.yaml - middleware.yaml configMapGenerator: diff --git a/apps/home-assistant/traefik-forward-auth/middleware.yaml b/apps/home-assistant/traefik-forward-auth/middleware.yaml new file mode 100644 index 0000000..1e5fc60 --- /dev/null +++ b/apps/home-assistant/traefik-forward-auth/middleware.yaml @@ -0,0 +1,10 @@ +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: traefik-forward-auth +spec: + forwardAuth: + address: http://traefik-forward-auth.home-assistant.svc.cluster.local:4181 + authResponseHeaders: + - X-Forwarded-User + trustForwardHeader: true \ No newline at end of file diff --git a/apps/home-assistant/traefik-forward-auth/service.yaml b/apps/home-assistant/traefik-forward-auth/service.yaml new file mode 100644 index 0000000..569ceff --- /dev/null +++ b/apps/home-assistant/traefik-forward-auth/service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: traefik-forward-auth +spec: + type: ClusterIP + selector: + app: traefik-forward-auth + ports: + - name: auth-http + port: 4181 diff --git a/apps/kustomization.yaml b/apps/kustomization.yaml new file mode 100644 index 0000000..4b400ce --- /dev/null +++ b/apps/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - arr + - plex + - home-assistant + - whoami \ No newline at end of file diff --git a/apps/traefik-forward-auth/whoami/ingress.yaml b/apps/traefik-forward-auth/whoami/ingress.yaml deleted file mode 100644 index d2de74e..0000000 --- a/apps/traefik-forward-auth/whoami/ingress.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: whoami -spec: - entryPoints: - - websecure - routes: - - match: Host(`whoami.stonegarden.dev`) - kind: Rule - services: - - name: whoami - port: 80 - middlewares: - - name: traefik-forward-auth - tls: - certResolver: letsencrypt \ No newline at end of file diff --git a/apps/whoami/00-whoami.yml b/apps/whoami/00-whoami.yml deleted file mode 100644 index 8d8bfc1..0000000 --- a/apps/whoami/00-whoami.yml +++ /dev/null @@ -1,66 +0,0 @@ -# Namespace for whoami -apiVersion: v1 -kind: Namespace -metadata: - name: whoami - ---- -# Service for exposing deployment of whoami -apiVersion: v1 -kind: Service -metadata: - namespace: whoami - name: whoami -spec: - type: ClusterIP - selector: - app: whoami - ports: - - protocol: TCP - name: web - port: 80 - ---- -# Deployment of whoami -kind: Deployment -apiVersion: apps/v1 -metadata: - namespace: whoami - name: whoami - labels: - app: whoami -spec: - replicas: 2 - selector: - matchLabels: - app: whoami - template: - metadata: - labels: - app: whoami - spec: - containers: - - name: whoami - image: traefik/whoami - ports: - - name: web - containerPort: 80 - ---- -# IngressRoute for secure whoami address -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: ingressroute-whoami - namespace: whoami -spec: - entryPoints: - - websecure - routes: - - match: Host(`whoami.stonegarden.dev`) - kind: Rule - services: - - name: whoami - port: 80 - tls: - certResolver: letsencrypt \ No newline at end of file diff --git a/apps/traefik-forward-auth/traefik-forward-auth/ingress.yaml b/apps/whoami/ingress.yaml similarity index 62% rename from apps/traefik-forward-auth/traefik-forward-auth/ingress.yaml rename to apps/whoami/ingress.yaml index 0632487..46b99d5 100644 --- a/apps/traefik-forward-auth/traefik-forward-auth/ingress.yaml +++ b/apps/whoami/ingress.yaml @@ -11,12 +11,19 @@ spec: entryPoints: - websecure routes: - - match: Host(`auth.stonegarden.dev`) + - match: Host(`auth-whoami.stonegarden.dev`) kind: Rule services: - name: traefik-forward-auth port: 4181 middlewares: - name: traefik-forward-auth + - match: Host(`whoami.stonegarden.dev`) + kind: Rule + services: + - name: whoami + port: 80 + middlewares: + - name: traefik-forward-auth tls: certResolver: letsencrypt diff --git a/apps/traefik-forward-auth/kustomization.yaml b/apps/whoami/kustomization.yaml similarity index 89% rename from apps/traefik-forward-auth/kustomization.yaml rename to apps/whoami/kustomization.yaml index c66430b..91e0e7c 100644 --- a/apps/traefik-forward-auth/kustomization.yaml +++ b/apps/whoami/kustomization.yaml @@ -4,5 +4,6 @@ namespace: whoami resources: - namespace.yaml + - ingress.yaml - traefik-forward-auth - whoami \ No newline at end of file diff --git a/apps/traefik-forward-auth/namespace.yaml b/apps/whoami/namespace.yaml similarity index 100% rename from apps/traefik-forward-auth/namespace.yaml rename to apps/whoami/namespace.yaml diff --git a/apps/traefik-forward-auth/traefik-forward-auth/configs/traefik-forward-auth.ini b/apps/whoami/traefik-forward-auth/configs/traefik-forward-auth.ini similarity index 56% rename from apps/traefik-forward-auth/traefik-forward-auth/configs/traefik-forward-auth.ini rename to apps/whoami/traefik-forward-auth/configs/traefik-forward-auth.ini index 0c48e1b..afcb153 100644 --- a/apps/traefik-forward-auth/traefik-forward-auth/configs/traefik-forward-auth.ini +++ b/apps/whoami/traefik-forward-auth/configs/traefik-forward-auth.ini @@ -1,5 +1,5 @@ cookie-name = "_whoami_auth" log-level = "error" cookie-domain = "stonegarden.dev" -auth-host = "auth.stonegarden.dev" -whitelist = "veghag@gmail.com" \ No newline at end of file +auth-host = "auth-whoami.stonegarden.dev" +domain = "gmail.com" \ No newline at end of file diff --git a/apps/traefik-forward-auth/traefik-forward-auth/deployment.yaml b/apps/whoami/traefik-forward-auth/deployment.yaml similarity index 100% rename from apps/traefik-forward-auth/traefik-forward-auth/deployment.yaml rename to apps/whoami/traefik-forward-auth/deployment.yaml diff --git a/apps/whoami/traefik-forward-auth/kustomization.yaml b/apps/whoami/traefik-forward-auth/kustomization.yaml new file mode 100644 index 0000000..b8c391f --- /dev/null +++ b/apps/whoami/traefik-forward-auth/kustomization.yaml @@ -0,0 +1,19 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +commonLabels: + app: traefik-forward-auth + +resources: + - service.yaml + - deployment.yaml + - middleware.yaml + +configMapGenerator: + - name: configs + files: + - configs/traefik-forward-auth.ini + +secretGenerator: + - name: traefik-forward-auth-secrets + envs: + - secrets/traefik-forward-auth.env \ No newline at end of file diff --git a/apps/traefik-forward-auth/traefik-forward-auth/middleware.yaml b/apps/whoami/traefik-forward-auth/middleware.yaml similarity index 100% rename from apps/traefik-forward-auth/traefik-forward-auth/middleware.yaml rename to apps/whoami/traefik-forward-auth/middleware.yaml diff --git a/apps/traefik-forward-auth/traefik-forward-auth/service.yaml b/apps/whoami/traefik-forward-auth/service.yaml similarity index 100% rename from apps/traefik-forward-auth/traefik-forward-auth/service.yaml rename to apps/whoami/traefik-forward-auth/service.yaml diff --git a/apps/traefik-forward-auth/whoami/deployment.yaml b/apps/whoami/whoami/deployment.yaml similarity index 100% rename from apps/traefik-forward-auth/whoami/deployment.yaml rename to apps/whoami/whoami/deployment.yaml diff --git a/apps/whoami/whoami/kustomization.yaml b/apps/whoami/whoami/kustomization.yaml new file mode 100644 index 0000000..9f38d2a --- /dev/null +++ b/apps/whoami/whoami/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +commonLabels: + app: whoami + +resources: + - service.yaml + - deployment.yaml \ No newline at end of file diff --git a/apps/traefik-forward-auth/whoami/service.yaml b/apps/whoami/whoami/service.yaml similarity index 100% rename from apps/traefik-forward-auth/whoami/service.yaml rename to apps/whoami/whoami/service.yaml diff --git a/main.tf b/main.tf index 641de74..5fcfdeb 100644 --- a/main.tf +++ b/main.tf @@ -90,64 +90,63 @@ resource "helm_release" "traefik" { values = [file("helm/traefik-values.yaml")] } -# --- whoami -#resource "kubernetes_namespace" "whoami" { -# metadata { -# name = "whoami" -# } -#} -# -#resource "kubernetes_service" "whoami" { -# metadata { -# name = "whoami" -# namespace = kubernetes_namespace.whoami.metadata.0.name -# } -# spec { -# selector = { -# app = kubernetes_deployment.whoami.spec.0.template.0.metadata.0.labels.app -# } -# -# type = "LoadBalancer" -# port { -# protocol = "TCP" -# name = "web" -# port = 80 -# } -# } -#} -# -#resource "kubernetes_deployment" "whoami" { -# metadata { -# name = "whoami" -# namespace = kubernetes_namespace.whoami.metadata.0.name -# } -# spec { -# replicas = "2" -# selector { -# match_labels = { -# app = "whoami" -# } -# } -# template { -# metadata { -# labels = { -# app = "whoami" -# } -# } -# spec { -# container { -# name = "whoami" -# image = "traefik/whoami" -# port { -# name = "web" -# container_port = 80 -# } -# } -# } -# } -# } -#} -# +resource "kubernetes_namespace" "whoami" { + metadata { + name = "whoami" + } +} + +resource "kubernetes_service" "whoami" { + metadata { + name = "whoami" + namespace = kubernetes_namespace.whoami.metadata.0.name + } + spec { + selector = { + app = kubernetes_deployment.whoami.spec.0.template.0.metadata.0.labels.app + } + + type = "LoadBalancer" + port { + protocol = "TCP" + name = "web" + port = 80 + } + } +} + +resource "kubernetes_deployment" "whoami" { + metadata { + name = "whoami" + namespace = kubernetes_namespace.whoami.metadata.0.name + } + spec { + replicas = "2" + selector { + match_labels = { + app = "whoami" + } + } + template { + metadata { + labels = { + app = "whoami" + } + } + spec { + container { + name = "whoami" + image = "traefik/whoami" + port { + name = "web" + container_port = 80 + } + } + } + } + } +} + #resource "helm_release" "whoami" { # name = "whoami" # repository = "https://charts.itscontained.io" @@ -155,61 +154,4 @@ resource "helm_release" "traefik" { # version = "0.2.5" # # values = [file("helm/whoami-values.yaml")] -#} - -//resource "kubernetes_namespace" "test" { -// metadata { -// name = "nginx" -// } -//} -// -//resource "kubernetes_service" "test" { -// metadata { -// name = "nginx" -// namespace = kubernetes_namespace.test.metadata.0.name -// } -// spec { -// selector = { -// app = kubernetes_deployment.test.spec.0.template.0.metadata.0.labels.app -// } -// -// type = "LoadBalancer" -// port { -// protocol = "TCP" -// port = 80 -// target_port = 80 -// } -// } -//} -// -//resource "kubernetes_deployment" "test" { -// metadata { -// name = "nginx" -// namespace = kubernetes_namespace.test.metadata.0.name -// } -// spec { -// replicas = 2 -// selector { -// match_labels = { -// app = "MyTestApp" -// } -// } -// template { -// metadata { -// labels = { -// app = "MyTestApp" -// } -// } -// spec { -// container { -// image = "nginx" -// name = "nginx-container" -// port { -// container_port = 80 -// } -// } -// } -// } -// } -//} - +#} \ No newline at end of file