feat: Add IPWhitelist, redirectRegex and (internal) nextcloud middlewares (#929)

* feat: Add IPWhitelist and redirectRegex middlewares to traefik

* fix: add nextcloud middlewares

* fix nextcloud cronjob
This commit is contained in:
Kjeld Schouten-Lebbing
2021-09-08 15:38:31 +02:00
committed by GitHub
parent b2efb51059
commit f39c7e968f
8 changed files with 233 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
{{/* Define the cronjob */}}
{{- define "nextcloud.cronjob" -}}
{{- $jobName := include "common.names.fullname" . -}}
{{- $jobName := include "common.names.fullname" . }}
---
apiVersion: batch/v1beta1

View File

@@ -1,14 +1,17 @@
{{/* Make sure all variables are set properly */}}
{{- include "common.values.setup" . }}
{{/* Render the templates */}}
{{ include "common.all" . }}
{{/* Render configmap for nextcloud */}}
{{- include "nextcloud.configmap" . }}
{{/* Render secrets for nextcloud */}}
{{- include "nextcloud.secrets" . }}
{{- $newMiddlewares := append .Values.ingress.main.fixedMiddlewares "tc-nextcloud-chain" }}
{{- $_ := set .Values.ingress.main "fixedMiddlewares" $newMiddlewares -}}
{{/* Render cronjob for nextcloud */}}
{{- include "nextcloud.cronjob" . }}
{{/* Render the templates */}}
{{ include "common.all" . }}

View File

@@ -22,4 +22,4 @@ sources:
- https://github.com/traefik/traefik-helm-chart
- https://traefik.io/
type: application
version: 7.0.11
version: 7.1.0

View File

@@ -563,6 +563,93 @@ questions:
type: int
required: true
default: 200
- variable: redirectRegex
label: "redirectRegex"
schema:
type: list
default: []
items:
- variable: redirectRegexEntry
label: ""
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
required: true
- variable: regex
label: "Regex"
schema:
type: string
required: true
default: ""
- variable: replacement
label: "Replacement"
schema:
type: string
required: true
default: ""
- variable: permanent
label: "Permanent"
schema:
type: boolean
required: true
default: false
- variable: ipWhiteList
label: "ipWhiteList"
schema:
type: list
default: []
items:
- variable: ipWhiteListEntry
label: ""
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
required: true
default: ""
- variable: sourceRange
label: "Source Range"
schema:
type: list
default: []
items:
- variable: sourceRangeEntry
label: ""
schema:
type: string
required: true
default: ""
- variable: ipStrategy
label: "IP Strategy"
schema:
type: dict
attrs:
- variable: depth
label: "Depth"
schema:
type: int
required: true
- variable: excludedIPs
label: "Excluded IPs"
schema:
type: list
default: []
items:
- variable: excludedIPsEntry
label: ""
schema:
type: string
required: true
default: ""
- variable: hostNetwork
group: "Networking and Services"

View File

@@ -0,0 +1,33 @@
{{- $values := .Values }}
{{- $namespace := ( printf "ix-%s" .Release.Name ) }}
{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }}
{{- $namespace = "default" }}
{{- end }}
{{ range $index, $middlewareData := .Values.middlewares.ipWhiteList }}
---
# Declaring the user list
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: {{ $middlewareData.name }}
namespace: {{ $namespace }}
spec:
ipWhiteList:
sourceRange:
{{- range $middlewareData.sourceRange }}
- {{ . }}
{{- end }}
{{- if $middlewareData.ipStrategy }}
ipStrategy:
{{- if $middlewareData.ipStrategy.depth }}
depth: {{ $middlewareData.ipStrategy.depth }}
{{- end }}
{{- if $middlewareData.ipStrategy.excludedIPs }}
excludedIPs:
{{- range $middlewareData.ipStrategy.excludedIPs }}
- {{ . }}
{{- end }}
{{- end }}
{{- end }}
{{ end }}

View File

@@ -0,0 +1,20 @@
{{- $values := .Values }}
{{- $namespace := ( printf "ix-%s" .Release.Name ) }}
{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }}
{{- $namespace = "default" }}
{{- end }}
{{ range $index, $middlewareData := .Values.middlewares.redirectRegex }}
---
# Declaring the user list
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: {{ $middlewareData.name }}
namespace: {{ $namespace }}
spec:
redirectRegex:
regex: {{ $middlewareData.regex | quote }}
replacement: {{ $middlewareData.replacement | quote }}
permanent: {{ $middlewareData.replacement }}
{{ end }}

View File

@@ -0,0 +1,65 @@
{{- $values := .Values }}
{{- $namespace := ( printf "ix-%s" .Release.Name ) }}
{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }}
{{- $namespace = "default" }}
{{- end }}
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: tc-nextcloud-headers
namespace: {{ $namespace }}
spec:
headers:
stsSeconds: 63072000
forceSTSHeader: true
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: tc-nextcloud-redirectregex-dav
spec:
redirectRegex:
regex: "https://(.*)/.well-known/(card|cal)dav"
replacement: "https://${1}/remote.php/dav/"
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: tc-nextcloud-redirectregex-finger
spec:
redirectRegex:
regex: "https://(.*)/.well-known/webfinger"
replacement: "https://${1}/public.php?service=webfinger"
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: tc-nextcloud-redirectregex-hostmeta
spec:
redirectRegex:
regex: "https://(.*)/.well-known/host-meta"
replacement: "https://${1}/public.php?service=host-meta"
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: tc-nextcloud-redirectregex-hostmetajson
spec:
redirectRegex:
regex: "https://(.*)/.well-known/host-meta.json"
replacement: "https://${1}/public.php?service=host-meta-json"
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: tc-nextcloud-chain
namespace: {{ $namespace }}
spec:
chain:
middlewares:
- name: tc-nextcloud-headers
- name: tc-nextcloud-redirectregex-dav
- name: tc-nextcloud-redirectregex-finger
- name: tc-nextcloud-redirectregex-hostmetajson
- name: tc-nextcloud-redirectregex-hostmeta

View File

@@ -306,15 +306,28 @@ middlewares:
# authResponseHeadersRegex: "^X-"
# trustForwardHeader: true
chain: []
# name: chainname
# middlewares:
# - name: compress
# - name: chainname
# middlewares:
# - name: compress
redirectScheme: []
# scheme: https
# permanent: true
# - name: redirectSchemeName
# scheme: https
# permanent: true
rateLimit: []
# average: 300
# burst: 200
# - name: rateLimitName
# average: 300
# burst: 200
redirectRegex: []
# - name: redirectRegexName
# regex: putregexhere
# replacement: replacementurlhere
# permanent: false
ipWhiteList: []
# - name: ipWhiteListName
# sourceRange: []
# ipStrategy:
# depth: 2
# excludedIPs: []
portalhook:
enabled: true