blob: 1ecc7a9ce0178cf49f09f91e57f96ea45d4cff62 [file] [log] [blame]
giolekva7fe15192021-11-19 13:58:16 +04001apiVersion: v1
2kind: Service
3metadata:
4 name: maddy
5 namespace: {{ .Release.Namespace }}
6spec:
7 type: ClusterIP
8 selector:
9 app: maddy
10 ports:
11 - name: imap
12 port: 143
13 protocol: TCP
14 - name: imaps
15 port: 993
16 protocol: TCP
17 - name: smtp
18 port: 25
19 protocol: TCP
20 - name: smtps
21 port: 465
22 protocol: TCP
23 - name: submission
24 port: 587
25 protocol: TCP
26---
27apiVersion: v1
28kind: Service
29metadata:
30 name: manage
31 namespace: {{ .Release.Namespace }}
32spec:
33 type: ClusterIP
34 selector:
35 app: maddy
36 ports:
37 - name: http
38 port: 80
39 targetPort: http
40 protocol: TCP
41---
42apiVersion: networking.k8s.io/v1
43kind: Ingress
44metadata:
45 name: manage
46 namespace: {{ .Release.Namespace }}
47spec:
48 ingressClassName: {{ .Values.ingress.private.className }}
49 tls:
50 - hosts:
51 - mail.{{ .Values.ingress.private.domain }}
52 secretName: cert-mail.{{ .Values.ingress.private.domain }}
53 rules:
54 - host: mail.{{ .Values.ingress.private.domain }}
55 http:
56 paths:
57 - path: /
58 pathType: Prefix
59 backend:
60 service:
61 name: manage
62 port:
63 name: http
64---
65apiVersion: cert-manager.io/v1
66kind: Certificate
67metadata:
68 name: mail.{{ .Values.ingress.public.domain }}
69 namespace: {{ .Release.Namespace }}
70 annotations:
71 "helm.sh/resource-policy": keep
72spec:
73 dnsNames:
74 - 'mail.{{ .Values.ingress.public.domain }}'
75 issuerRef:
76 name: {{ .Values.ingress.public.certificateIssuer }}
77 kind: ClusterIssuer
78 secretName: cert-mail.{{ .Values.ingress.public.domain }}
79---
80apiVersion: v1
81kind: PersistentVolumeClaim
82metadata:
83 name: data
84 namespace: {{ .Release.Namespace }}
85spec:
86 accessModes:
87 - ReadWriteOnce
88 resources:
89 requests:
90 storage: {{ .Values.storage.size }}
91---
92apiVersion: apps/v1
93kind: Deployment
94metadata:
95 name: maddy
96 namespace: {{ .Release.Namespace }}
97spec:
98 selector:
99 matchLabels:
100 app: maddy
101 replicas: 1
102 template:
103 metadata:
104 labels:
105 app: maddy
106 spec:
107 volumes:
108 - name: config
109 configMap:
110 name: config
111 - name: certs
112 secret:
113 secretName: cert-mail.{{ .Values.ingress.public.domain}}
114 - name: data
115 persistentVolumeClaim:
116 claimName: data
117 containers:
118 - name: maddy
119 image: giolekva/maddy:v0.4.4
120 imagePullPolicy: Always
121 ports:
122 - name: imap
123 containerPort: 143
124 protocol: TCP
125 - name: imaps
126 containerPort: 993
127 protocol: TCP
128 - name: smtp
129 containerPort: 25
130 protocol: TCP
131 - name: smtps
132 containerPort: 465
133 protocol: TCP
134 - name: submission
135 containerPort: 587
136 protocol: TCP
137 command:
138 - maddy
139 - -config
140 - /etc/maddy/config/maddy.conf
141 volumeMounts:
142 - name: config
143 mountPath: /etc/maddy/config
144 - name: certs
145 mountPath: /etc/maddy/certs
146 - name: data
147 mountPath: /var/lib/maddy
148 - name: web
149 image: giolekva/maddy-web:latest
150 imagePullPolicy: Always
151 ports:
152 - name: http
153 containerPort: 80
154 protocol: TCP
155 command:
156 - maddy-web
157 - --port=80
158 - --maddy-config=/etc/maddy/config/maddy.conf
159 - --export-dkim=/var/lib/maddy/dkim_keys/{{ .Values.ingress.public.domain }}_default.dns
160 volumeMounts:
161 - name: config
162 mountPath: /etc/maddy/config
163 - name: certs
164 mountPath: /etc/maddy/certs
165 - name: data
166 mountPath: /var/lib/maddy
167---
168apiVersion: v1
169kind: ConfigMap
170metadata:
171 name: mta-sts
172 namespace: {{ .Release.Namespace }}
173data:
174 mta-sts.txt: |
175 version: STSv1
176 mode: enforce
177 max_age: 604800
178 mx: mail.{{ .Values.ingress.public.domain }}
179---
180apiVersion: apps/v1
181kind: Deployment
182metadata:
183 name: mta-sts
184 namespace: {{ .Release.Namespace }}
185spec:
186 selector:
187 matchLabels:
188 app: mta-sts
189 replicas: 1
190 template:
191 metadata:
192 labels:
193 app: mta-sts
194 spec:
195 volumes:
196 - name: mta-sts
197 configMap:
198 name: mta-sts
199 containers:
200 - name: maddy
201 image: giolekva/static-file-server:latest
202 imagePullPolicy: Always
203 ports:
204 - name: http
205 containerPort: 80
206 protocol: TCP
207 command:
208 - static-file-server
209 - --port=80
210 - --dir=/etc/static-file-server/data
211 volumeMounts:
212 - name: mta-sts
213 mountPath: /etc/static-file-server/data/.well-known
214 readOnly: true
215---
216apiVersion: v1
217kind: Service
218metadata:
219 name: mta-sts
220 namespace: {{ .Release.Namespace }}
221spec:
222 type: ClusterIP
223 selector:
224 app: mta-sts
225 ports:
226 - name: http
227 port: 80
228 targetPort: http
229 protocol: TCP
230---
231apiVersion: cert-manager.io/v1
232kind: Certificate
233metadata:
234 name: mta-sts.{{ .Values.ingress.public.domain }}
235 namespace: {{ .Release.Namespace }}
236 annotations:
237 "helm.sh/resource-policy": keep
238spec:
239 dnsNames:
240 - 'mta-sts.{{ .Values.ingress.public.domain }}'
241 issuerRef:
242 name: {{ .Values.ingress.public.certificateIssuer }}
243 kind: ClusterIssuer
244 secretName: cert-mta-sts.{{ .Values.ingress.public.domain }}
245---
246apiVersion: networking.k8s.io/v1
247kind: Ingress
248metadata:
249 name: mta-sts
250 namespace: {{ .Release.Namespace }}
251spec:
252 ingressClassName: {{ .Values.ingress.public.className }}
253 tls:
254 - hosts:
255 - mta-sts.{{ .Values.ingress.public.domain }}
256 secretName: cert-mta-sts.{{ .Values.ingress.public.domain }}
257 rules:
258 - host: mta-sts.{{ .Values.ingress.public.domain }}
259 http:
260 paths:
261 - pathType: Prefix
262 path: "/"
263 backend:
264 service:
265 name: mta-sts
266 port:
267 name: http