From b90eeb5f6c0fcb7438593e47a6cb818352e153fd Mon Sep 17 00:00:00 2001 From: Rob Kooper <kooper@illinois.edu> Date: Thu, 1 Dec 2022 18:32:07 -0600 Subject: [PATCH] add nginx to ingress clean up ingress controller - add nginx - remove traefik v1 - rename traefik2 to traefik --- .../templates/ingresscontroller/nginx.yaml | 45 ++++++++++++ .../{traefik2.yaml => traefik.yaml} | 16 ++--- .../templates/ingresscontroller/traefik1.yaml | 69 ------------------- charts/apps/values.yaml | 14 ++-- terraform/modules/argocd/argocd.tf | 5 +- .../modules/argocd/templates/argocd.yaml.tmpl | 25 ++++--- terraform/modules/argocd/variables.tf | 40 +++-------- 7 files changed, 82 insertions(+), 132 deletions(-) create mode 100644 charts/apps/templates/ingresscontroller/nginx.yaml rename charts/apps/templates/ingresscontroller/{traefik2.yaml => traefik.yaml} (83%) delete mode 100644 charts/apps/templates/ingresscontroller/traefik1.yaml diff --git a/charts/apps/templates/ingresscontroller/nginx.yaml b/charts/apps/templates/ingresscontroller/nginx.yaml new file mode 100644 index 0000000..b259f08 --- /dev/null +++ b/charts/apps/templates/ingresscontroller/nginx.yaml @@ -0,0 +1,45 @@ +{{- if and .Values.ingresscontroller.enabled (eq .Values.ingresscontroller.class "nginx") }} +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: {{ .Values.cluster.name }}-nginx + labels: + cluster: {{ .Values.cluster.name | quote }} + app: nginx + namespace: argocd + annotations: + {{- toYaml .Values.notifications | nindent 4 }} +spec: + project: {{ .Values.cluster.name }} + destination: + server: {{ .Values.cluster.url }} + namespace: nginx + syncPolicy: + {{- if .Values.sync }} + automated: + prune: true + selfHeal: true + allowEmpty: false + {{- end }} + syncOptions: + - CreateNamespace=true + source: + repoURL: https://kubernetes.github.io/ingress-nginx + chart: ingress-nginx + targetRevision: {{ .Values.ingresscontroller.nginx.version | quote }} + helm: + version: v3 + releaseName: nginx + values: | + controller: + extraArgs: + publish-status-address: {{ .Values.ingresscontroller.publicIP }} + publishService: + enabled: false + service: + externalTrafficPolicy: Local + loadBalancerIP: {{ .Values.ingresscontroller.privateIP | default .Values.ingresscontroller.publicIP }} + watchIngressWithoutClass: true + ingressClassResource: + default: true +{{- end }} diff --git a/charts/apps/templates/ingresscontroller/traefik2.yaml b/charts/apps/templates/ingresscontroller/traefik.yaml similarity index 83% rename from charts/apps/templates/ingresscontroller/traefik2.yaml rename to charts/apps/templates/ingresscontroller/traefik.yaml index fe0f162..169d3de 100644 --- a/charts/apps/templates/ingresscontroller/traefik2.yaml +++ b/charts/apps/templates/ingresscontroller/traefik.yaml @@ -1,4 +1,4 @@ -{{- if and .Values.ingresscontroller.enabled (eq .Values.ingresscontroller.class "traefik2") }} +{{- if and .Values.ingresscontroller.enabled (eq .Values.ingresscontroller.class "traefik") }} apiVersion: argoproj.io/v1alpha1 kind: Application metadata: @@ -26,7 +26,7 @@ spec: source: repoURL: https://helm.traefik.io/traefik chart: traefik - targetRevision: {{ .Values.ingresscontroller.traefik2.version | quote }} + targetRevision: {{ .Values.ingresscontroller.traefik.version | quote }} helm: version: v3 releaseName: traefik @@ -44,20 +44,20 @@ spec: tls: enabled: true certResolver: letsencrypt - {{- if .Values.ingresscontroller.traefik2.ports }} - {{- .Values.ingresscontroller.traefik2.ports | toYaml | nindent 10 }} + {{- if .Values.ingresscontroller.traefik.ports }} + {{- .Values.ingresscontroller.traefik.ports | toYaml | nindent 10 }} {{- end }} additionalArguments: - --providers.kubernetesingress.ingressendpoint.ip={{ .Values.ingresscontroller.publicIP }} - {{- if .Values.ingresscontroller.acme }} - - --certificatesresolvers.letsencrypt.acme.caserver={{ .Values.ingresscontroller.acme.server | default "https://acme-v02.api.letsencrypt.org/directory" }} - - --certificatesresolvers.letsencrypt.acme.email={{ .Values.ingresscontroller.acme.email }} + {{- if .Values.ingresscontroller.traefik.acme }} + - --certificatesresolvers.letsencrypt.acme.caserver={{ .Values.ingresscontroller.traefik.acme.server | default "https://acme-v02.api.letsencrypt.org/directory" }} + - --certificatesresolvers.letsencrypt.acme.email={{ .Values.ingresscontroller.traefik.acme.email }} - --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json - --certificatesresolvers.letsencrypt.acme.tlschallenge=true {{- end }} persistence: enabled: true - storageClass: {{ .Values.ingresscontroller.storageClass | quote}} + storageClass: {{ .Values.ingresscontroller.traefik.storageClass | quote}} deployment: initContainers: # The "volume-permissions" init container is required if you run into permission issues. diff --git a/charts/apps/templates/ingresscontroller/traefik1.yaml b/charts/apps/templates/ingresscontroller/traefik1.yaml deleted file mode 100644 index 4e2041c..0000000 --- a/charts/apps/templates/ingresscontroller/traefik1.yaml +++ /dev/null @@ -1,69 +0,0 @@ -{{- if and .Values.ingresscontroller.enabled (eq .Values.ingresscontroller.class "traefik1") }} -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: {{ .Values.cluster.name }}-traefik - labels: - cluster: {{ .Values.cluster.name | quote }} - app: traefik - namespace: argocd - annotations: - {{- toYaml .Values.notifications | nindent 4 }} -spec: - project: {{ .Values.cluster.name }} - destination: - server: {{ .Values.cluster.url }} - namespace: traefik - syncPolicy: - {{- if .Values.sync }} - automated: - prune: true - selfHeal: true - allowEmpty: false - {{- end }} - syncOptions: - - CreateNamespace=true - source: - repoURL: https://charts.helm.sh/stable - chart: traefik - targetRevision: {{ .Values.ingresscontroller.traefik1.version | quote }} - helm: - version: v3 - releaseName: traefik - values: | - loadBalancerIP: {{ .Values.ingresscontroller.privateIP | default .Values.ingresscontroller.publicIP }} - externalIP: {{ .Values.ingresscontroller.publicIP }} - externalTrafficPolicy: Local - kubernetes: - ingressEndpoint: - ip: {{ .Values.ingresscontroller.publicIP }} - rbac: - enabled: true - dashboard: - enabled: {{ .Values.ingresscontroller.dashboard }} - domain: traefik.{{ .Values.ingresscontroller.publicIP }}.xip.io - ingress: - annotations: - acme: - enabled: {{ .Values.ingresscontroller.acme }} - {{- if .Values.ingresscontroller.acme }} - challengeType: http-01 - email: {{ .Values.ingresscontroller.acme.email }} - staging: {{ .Values.ingresscontroller.acme.staging }} - logging: true - persistence: - enabled: true - {{- end }} - ssl: - enabled: true - enforced: true - insecureSkipVerify: true - tlsMinVersion: VersionTLS12 - cipherSuites: - - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 - - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 -{{- end }} diff --git a/charts/apps/values.yaml b/charts/apps/values.yaml index add4865..134b44b 100644 --- a/charts/apps/values.yaml +++ b/charts/apps/values.yaml @@ -26,16 +26,16 @@ healthmonitor: ingresscontroller: enabled: false - class: traefik2 + class: traefik publicIP: 1.1.1.1 #privateIP: 1.1.1.2 - #acme: - # email: devops.isda@lists.illinois.edu - storageClass: "" - traefik1: - version: "1.*" - traefik2: + nginx: + version: "4.*" + traefik: version: "*" + storageClass: "" + #acme: + # email: devops.isda@lists.illinois.edu ports: {} # postgres: # port: 5432 diff --git a/terraform/modules/argocd/argocd.tf b/terraform/modules/argocd/argocd.tf index b00e008..3faaa5f 100644 --- a/terraform/modules/argocd/argocd.tf +++ b/terraform/modules/argocd/argocd.tf @@ -37,9 +37,8 @@ locals { floating_ip = var.floating_ip ingress_controller_enabled = var.ingress_controller_enabled ingress_controller = var.ingress_controller - ingress_storageclass = var.ingress_storageclass - traefik_dashboard = var.traefik_dashboard - traefik2_ports = indent(14, yamlencode(var.traefik2_ports)) + traefik_storageclass = var.traefik_storageclass + traefik_ports = indent(14, yamlencode(var.traefik_ports)) acme_staging = var.acme_staging acme_email = var.acme_email sealedsecrets_enabled = var.sealedsecrets_enabled diff --git a/terraform/modules/argocd/templates/argocd.yaml.tmpl b/terraform/modules/argocd/templates/argocd.yaml.tmpl index 24e89ff..bc3929d 100644 --- a/terraform/modules/argocd/templates/argocd.yaml.tmpl +++ b/terraform/modules/argocd/templates/argocd.yaml.tmpl @@ -65,26 +65,25 @@ spec: ingresscontroller: enabled: ${ingress_controller_enabled} %{~ if ingress_controller_enabled ~} - dashboard: true class: ${ingress_controller} %{~ if length(floating_ip) > 0 ~} publicIP: ${floating_ip[0].public_ip} privateIP: ${floating_ip[0].private_ip} %{~ endif ~} - storageClass: "${ingress_storageclass}" - %{~ if ingress_controller == "traefik2" ~} - traefik2: + %{~ if ingress_controller == "traefik" || ingress_controller == "traefik2" ~} + traefik: + storageClass: "${traefik_storageclass}" + acme: + staging: ${acme_staging} + %{~ if (acme_staging) ~} + server: https://acme-staging-v02.api.letsencrypt.org/directory + %{~ else ~} + server: https://acme-v02.api.letsencrypt.org/directory + %{~ endif ~} + email: ${acme_email} ports: - ${traefik2_ports} + ${traefik_ports} %{~ endif ~} - acme: - staging: ${acme_staging} - %{~ if (acme_staging) ~} - server: https://acme-staging-v02.api.letsencrypt.org/directory - %{~ else ~} - server: https://acme-v02.api.letsencrypt.org/directory - %{~ endif ~} - email: ${acme_email} %{~ endif ~} healthmonitor: diff --git a/terraform/modules/argocd/variables.tf b/terraform/modules/argocd/variables.tf index 27ad7f1..fa068b1 100644 --- a/terraform/modules/argocd/variables.tf +++ b/terraform/modules/argocd/variables.tf @@ -190,12 +190,6 @@ variable "member_groups" { # ---------------------------------------------------------------------- # INGRESS -# working: -# - traefik1 -# - traefik2 -# work in progress -# - nginx -# - nginxinc # ---------------------------------------------------------------------- variable "ingress_controller_enabled" { @@ -206,49 +200,31 @@ variable "ingress_controller_enabled" { variable "ingress_controller" { type = string - description = "Desired ingress controller (traefik1, traefik2, nginxinc, nginx, none)" - default = "traefik2" + description = "Desired ingress controller (traefik, traefik2 (same as traefik), nginx, none)" + default = "traefik" validation { - condition = var.ingress_controller == "traefik1" || var.ingress_controller == "traefik2" + condition = var.ingress_controller == "nginx" || var.ingress_controller == "traefik" || var.ingress_controller == "traefik2" || var.ingress_controller == "none" error_message = "Invalid ingress controller." } } -variable "ingress_storageclass" { - type = string - description = "storageclass used by ingress controller" - default = "" -} - # ---------------------------------------------------------------------- # TRAEFIK # ---------------------------------------------------------------------- -variable "traefik_dashboard" { - type = bool - description = "Should dashboard ingress rule be added as /traefik" - default = true -} - -variable "traefik_server" { - type = string - description = "Desired hostname to be used for cluster, nip.io will use ip address" - default = "" -} - variable "traefik_access_log" { type = bool description = "Should traefik enable access logs" default = false } -variable "traefik_use_certmanager" { - type = bool - description = "Should traefik v2 use cert manager" - default = false +variable "traefik_storageclass" { + type = string + description = "storageclass used by ingress controller" + default = "" } -variable "traefik2_ports" { +variable "traefik_ports" { type = map description = "Additional ports to add to traefik" default = {} -- GitLab