add openvpn sidecar option for nzbget

This commit is contained in:
Johnny Walker 2020-07-18 09:55:39 -04:00
parent c0da502c9e
commit 51e750d07c
5 changed files with 126 additions and 0 deletions

View File

@ -79,6 +79,28 @@ spec:
{{- end }} {{- end }}
resources: resources:
{{ toYaml .Values.resources | indent 12 }} {{ toYaml .Values.resources | indent 12 }}
{{- if .Values.openvpn.enabled }}
- name: openvpn
image: "{{ .Values.openvpn.image.repository }}:{{ .Values.openvpn.image.tag }}"
imagePullPolicy: {{ .Values.openvpn.image.pullPolicy }}
securityContext:
capabilities:
add: ["NET_ADMIN"]
{{- if .Values.openvpn.env }}
envFrom:
- secretRef:
name: {{ template "nzbget.fullname" . }}-openvpnenv
{{- end }}
{{- if .Values.openvpn.vpnConf }}
volumeMounts:
- name: openvpnconf
mountPath: /vpn/vpn.conf
subPath: vpnConf
{{- end }}
env:
- name: NETWORK_POLICY_ENABLED
value: {{ .Values.openvpn.networkPolicy.enabled | quote }}
{{- end }}
volumes: volumes:
- name: config - name: config
{{- if .Values.persistence.config.enabled }} {{- if .Values.persistence.config.enabled }}
@ -94,6 +116,11 @@ spec:
{{- else }} {{- else }}
emptyDir: {} emptyDir: {}
{{ end }} {{ end }}
{{- if .Values.openvpn.vpnConf }}
- name: openvpnconf
configMap:
name: {{ template "nzbget.fullname" . }}-openvpnconf
{{ end }}
{{- range .Values.persistence.extraMounts }} {{- range .Values.persistence.extraMounts }}
- name: {{ .name }} - name: {{ .name }}
persistentVolumeClaim: persistentVolumeClaim:

View File

@ -0,0 +1,16 @@
{{- if and .Values.openvpn.enabled .Values.openvpn.vpnConf}}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "nzbget.fullname" . }}-openvpnconf
labels:
app.kubernetes.io/name: {{ include "nzbget.name" . }}
helm.sh/chart: {{ include "nzbget.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
data:
{{- if .Values.openvpn.vpnConf }}
vpnConf: |-
{{- .Values.openvpn.vpnConf | nindent 4}}
{{- end }}
{{- end -}}

View File

@ -0,0 +1,20 @@
{{- if and .Values.openvpn.enabled ( or .Values.openvpn.env .Values.openvpn.auth )}}
apiVersion: v1
kind: Secret
metadata:
name: {{ template "nzbget.fullname" . }}-openvpnenv
labels:
app.kubernetes.io/name: {{ include "nzbget.name" . }}
helm.sh/chart: {{ include "nzbget.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
data:
{{- if .Values.openvpn.auth }}
VPN_AUTH: {{ .Values.openvpn.auth | b64enc }}
{{- end }}
{{- if .Values.openvpn.env }}
{{- range $k, $v := .Values.openvpn.env }}
{{ $k }}: {{ $v | b64enc }}
{{- end }}
{{- end -}}
{{- end -}}

View File

@ -0,0 +1,17 @@
{{- if .Values.openvpn.networkPolicy.enabled }}
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: {{ template "nzbget.fullname" . }}-deny-all-netpol
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: {{ include "nzbget.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
policyTypes:
- Egress
egress:
{{- if .Values.openvpn.networkPolicy.egress }}
{{- .Values.openvpn.networkPolicy.egress | toYaml | nindent 4 }}
{{- end -}}
{{- end -}}

View File

@ -62,6 +62,52 @@ ingress:
# hosts: # hosts:
# - chart-example.local # - chart-example.local
openvpn:
# Enables an openvpn sidecar that when configured properly will provide a
# Secure outbound VPN for use by NZBGet.
enabled: false
image:
repository: dperson/openvpn-client
tag: latest
pullPolicy: IfNotPresent
# All variables specified here will be added to the openvpn sidecar container
# Ref https://hub.docker.com/r/dperson/openvpn-client for all config values
env: []
# DNS: "true"
# TZ: EST5EDT
# Provide a customized vpn.conf file to be used by openvpn.
vpnConf: # |-
# Some Example Config
# remote greatvpnhost.com 8888
# auth-user-pass
# Cipher AES
# Credentials to connect to the VPN Service (used with -a)
auth: # "user;password"
# If set to true, will deploy a network policy that blocks all outbound
# traffic except traffic specified as allowed
networkPolicy:
enabled: false
# The egress configuration for your network policy, All outbound traffic
# From the pod will be blocked unless specified here. Your cluster must
# have a CNI that supports network policies (Canal, Calico, etc...)
# https://kubernetes.io/docs/concepts/services-networking/network-policies/
# https://github.com/ahmetb/kubernetes-network-policy-recipes
egress:
# - to:
# - ipBlock:
# cidr: 0.0.0.0/0
# ports:
# - port: 53
# protocol: UDP
# - port: 53
# protocol: TCP
persistence: persistence:
config: config:
enabled: true enabled: true