tandoor.yaml
· 12 KiB · YAML
Raw
---
apiVersion: v1
kind: Namespace
metadata:
name: tandoor
---
# kubectl -n tandoor create secret generic recipes --from-literal=postgresql-password=$(openssl rand -base64 33) --from-literal=postgresql-postgres-password=$(openssl rand -base64 33) --from-literal=secret-key=$(openssl rand -hex 32)
#kind: Secret
#apiVersion: v1
#metadata:
# name: recipes
# namespace: tandoor
#type: Opaque
#data:
# postgresql-password: ...
# postgresql-postgres-password: ...
# secret-key: ...
---
kind: ConfigMap
apiVersion: v1
metadata:
labels:
app: recipes
name: recipes-nginx-config
namespace: tandoor
data:
nginx-config: |-
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
server_name _;
client_max_body_size 16M;
# serve static files
location /static/ {
alias /static/;
}
# serve media files
location /media/ {
alias /media/;
}
}
}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: recipes
namespace: tandoor
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: recipes-media
namespace: tandoor
labels:
app: recipes
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
storageClassName: rook-cephfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: recipes-static
namespace: tandoor
labels:
app: recipes
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
storageClassName: rook-cephfs
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: recipes
tier: database
name: recipes-postgresql
namespace: tandoor
spec:
replicas: 1
selector:
matchLabels:
app: recipes
serviceName: recipes-postgresql
updateStrategy:
type: RollingUpdate
template:
metadata:
annotations:
backup.velero.io/backup-volumes: data
labels:
app: recipes
tier: database
name: recipes-postgresql
spec:
containers:
- name: recipes-db
env:
- name: BITNAMI_DEBUG
value: "false"
- name: POSTGRESQL_PORT_NUMBER
value: "5432"
- name: POSTGRESQL_VOLUME_DIR
value: /bitnami/postgresql
- name: PGDATA
value: /bitnami/postgresql/data
- name: POSTGRES_USER
value: recipes
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: recipes
key: postgresql-password
- name: POSTGRESQL_POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: recipes
key: postgresql-postgres-password
- name: POSTGRES_DB
value: recipes
image: docker.io/bitnami/postgresql:15.5.0-debian-11-r17
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- sh
- -c
- exec pg_isready -U "postgres" -d "wiki" -h 127.0.0.1 -p 5432
failureThreshold: 6
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
ports:
- containerPort: 5432
name: postgresql
protocol: TCP
readinessProbe:
exec:
command:
- sh
- -c
- -e
- |
pg_isready -U "postgres" -d "wiki" -h 127.0.0.1 -p 5432
[ -f /opt/bitnami/postgresql/tmp/.initialized ]
failureThreshold: 6
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
resources:
requests:
cpu: 250m
memory: 256Mi
securityContext:
runAsUser: 1001
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /bitnami/postgresql
name: data
dnsPolicy: ClusterFirst
initContainers:
- command:
- sh
- -c
- |
mkdir -p /bitnami/postgresql/data
chmod 700 /bitnami/postgresql/data
find /bitnami/postgresql -mindepth 0 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | \
xargs chown -R 1001:1001
image: docker.io/bitnami/minideb:stretch
imagePullPolicy: Always
name: init-chmod-data
resources:
requests:
cpu: 250m
memory: 256Mi
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /bitnami/postgresql
name: data
restartPolicy: Always
securityContext:
fsGroup: 1001
serviceAccount: recipes
serviceAccountName: recipes
terminationGracePeriodSeconds: 30
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
volumeMode: Filesystem
storageClassName: rook-ssd-block
---
apiVersion: v1
kind: Service
metadata:
labels:
app: recipes
tier: database
name: recipes-postgresql
namespace: tandoor
spec:
ports:
- name: postgresql
port: 5432
protocol: TCP
targetPort: postgresql
selector:
app: recipes
tier: database
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: recipes
namespace: tandoor
labels:
app: recipes
environment: production
tier: frontend
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: recipes
environment: production
template:
metadata:
annotations:
backup.velero.io/backup-volumes: media,static
labels:
app: recipes
tier: frontend
environment: production
spec:
restartPolicy: Always
serviceAccount: recipes
serviceAccountName: recipes
initContainers:
- name: init-chmod-data
env:
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: recipes
key: secret-key
- name: DB_ENGINE
value: django.db.backends.postgresql
- name: POSTGRES_HOST
value: recipes-postgresql
- name: POSTGRES_PORT
value: "5432"
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_DB
value: recipes
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: recipes
key: postgresql-postgres-password
image: vabene1111/recipes
imagePullPolicy: Always
resources:
requests:
cpu: 250m
memory: 64Mi
command:
- sh
- -c
- |
set -e
source venv/bin/activate
echo "Updating database"
python manage.py migrate
python manage.py collectstatic_js_reverse
python manage.py collectstatic --noinput
echo "Setting media file attributes"
chown -R 65534:65534 /opt/recipes/mediafiles
find /opt/recipes/mediafiles -type d | xargs -r chmod 755
find /opt/recipes/mediafiles -type f | xargs -r chmod 644
echo "Done"
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /opt/recipes/mediafiles
name: media
# mount as subPath due to lost+found on ext4 pvc
subPath: files
- mountPath: /opt/recipes/staticfiles
name: static
# mount as subPath due to lost+found on ext4 pvc
subPath: files
containers:
- name: recipes-nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
name: http
- containerPort: 8080
protocol: TCP
name: gunicorn
resources:
requests:
cpu: 250m
memory: 64Mi
volumeMounts:
- mountPath: /media
name: media
# mount as subPath due to lost+found on ext4 pvc
subPath: files
- mountPath: /static
name: static
# mount as subPath due to lost+found on ext4 pvc
subPath: files
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx-config
readOnly: true
- name: recipes
image: vabene1111/recipes
imagePullPolicy: IfNotPresent
command:
- /opt/recipes/venv/bin/gunicorn
- -b
- :8080
- --access-logfile
- "-"
- --error-logfile
- "-"
- --log-level
- INFO
- recipes.wsgi
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 8080
scheme: HTTP
periodSeconds: 30
readinessProbe:
httpGet:
path: /
port: 8080
scheme: HTTP
periodSeconds: 30
resources:
requests:
cpu: 250m
memory: 64Mi
volumeMounts:
- mountPath: /opt/recipes/mediafiles
name: media
# mount as subPath due to lost+found on ext4 pvc
subPath: files
- mountPath: /opt/recipes/staticfiles
name: static
# mount as subPath due to lost+found on ext4 pvc
subPath: files
env:
- name: DEBUG
value: "0"
- name: ALLOWED_HOSTS
value: '*'
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: recipes
key: secret-key
- name: GUNICORN_MEDIA
value: "0"
- name: DB_ENGINE
value: django.db.backends.postgresql
- name: POSTGRES_HOST
value: recipes-postgresql
- name: POSTGRES_PORT
value: "5432"
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_DB
value: recipes
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: recipes
key: postgresql-postgres-password
securityContext:
runAsUser: 65534
volumes:
- name: media
persistentVolumeClaim:
claimName: recipes-media
- name: static
persistentVolumeClaim:
claimName: recipes-static
- name: nginx-config
configMap:
name: recipes-nginx-config
---
apiVersion: v1
kind: Service
metadata:
name: recipes
namespace: tandoor
labels:
app: recipes
tier: frontend
spec:
selector:
app: recipes
tier: frontend
environment: production
ports:
- port: 80
targetPort: http
name: http
protocol: TCP
- port: 8080
targetPort: gunicorn
name: gunicorn
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/tls-acme: "true"
cert-manager.io/cluster-issuer: letsencrypt-prod
name: recipes
namespace: tandoor
spec:
ingressClassName: nginx
rules:
- host: recipes.tblflp.net
http:
paths:
- backend:
service:
name: recipes
port:
number: 8080
path: /
pathType: Prefix
- backend:
service:
name: recipes
port:
number: 80
path: /media
pathType: Prefix
- backend:
service:
name: recipes
port:
number: 80
path: /static
pathType: Prefix
tls:
- hosts:
- recipes.tblflp.net
secretName: recipes-local-tls
1 | --- |
2 | apiVersion: v1 |
3 | kind: Namespace |
4 | metadata: |
5 | name: tandoor |
6 | --- |
7 | # kubectl -n tandoor create secret generic recipes --from-literal=postgresql-password=$(openssl rand -base64 33) --from-literal=postgresql-postgres-password=$(openssl rand -base64 33) --from-literal=secret-key=$(openssl rand -hex 32) |
8 | #kind: Secret |
9 | #apiVersion: v1 |
10 | #metadata: |
11 | # name: recipes |
12 | # namespace: tandoor |
13 | #type: Opaque |
14 | #data: |
15 | # postgresql-password: ... |
16 | # postgresql-postgres-password: ... |
17 | # secret-key: ... |
18 | --- |
19 | kind: ConfigMap |
20 | apiVersion: v1 |
21 | metadata: |
22 | labels: |
23 | app: recipes |
24 | name: recipes-nginx-config |
25 | namespace: tandoor |
26 | data: |
27 | nginx-config: |- |
28 | events { |
29 | worker_connections 1024; |
30 | } |
31 | http { |
32 | include mime.types; |
33 | server { |
34 | listen 80; |
35 | server_name _; |
36 | |
37 | client_max_body_size 16M; |
38 | |
39 | # serve static files |
40 | location /static/ { |
41 | alias /static/; |
42 | } |
43 | # serve media files |
44 | location /media/ { |
45 | alias /media/; |
46 | } |
47 | } |
48 | } |
49 | --- |
50 | apiVersion: v1 |
51 | kind: ServiceAccount |
52 | metadata: |
53 | name: recipes |
54 | namespace: tandoor |
55 | --- |
56 | apiVersion: v1 |
57 | kind: PersistentVolumeClaim |
58 | metadata: |
59 | name: recipes-media |
60 | namespace: tandoor |
61 | labels: |
62 | app: recipes |
63 | spec: |
64 | accessModes: |
65 | - ReadWriteMany |
66 | resources: |
67 | requests: |
68 | storage: 100Gi |
69 | storageClassName: rook-cephfs |
70 | --- |
71 | apiVersion: v1 |
72 | kind: PersistentVolumeClaim |
73 | metadata: |
74 | name: recipes-static |
75 | namespace: tandoor |
76 | labels: |
77 | app: recipes |
78 | spec: |
79 | accessModes: |
80 | - ReadWriteMany |
81 | resources: |
82 | requests: |
83 | storage: 100Gi |
84 | storageClassName: rook-cephfs |
85 | --- |
86 | apiVersion: apps/v1 |
87 | kind: StatefulSet |
88 | metadata: |
89 | labels: |
90 | app: recipes |
91 | tier: database |
92 | name: recipes-postgresql |
93 | namespace: tandoor |
94 | spec: |
95 | replicas: 1 |
96 | selector: |
97 | matchLabels: |
98 | app: recipes |
99 | serviceName: recipes-postgresql |
100 | updateStrategy: |
101 | type: RollingUpdate |
102 | template: |
103 | metadata: |
104 | annotations: |
105 | backup.velero.io/backup-volumes: data |
106 | labels: |
107 | app: recipes |
108 | tier: database |
109 | name: recipes-postgresql |
110 | spec: |
111 | containers: |
112 | - name: recipes-db |
113 | env: |
114 | - name: BITNAMI_DEBUG |
115 | value: "false" |
116 | - name: POSTGRESQL_PORT_NUMBER |
117 | value: "5432" |
118 | - name: POSTGRESQL_VOLUME_DIR |
119 | value: /bitnami/postgresql |
120 | - name: PGDATA |
121 | value: /bitnami/postgresql/data |
122 | - name: POSTGRES_USER |
123 | value: recipes |
124 | - name: POSTGRES_PASSWORD |
125 | valueFrom: |
126 | secretKeyRef: |
127 | name: recipes |
128 | key: postgresql-password |
129 | - name: POSTGRESQL_POSTGRES_PASSWORD |
130 | valueFrom: |
131 | secretKeyRef: |
132 | name: recipes |
133 | key: postgresql-postgres-password |
134 | - name: POSTGRES_DB |
135 | value: recipes |
136 | image: docker.io/bitnami/postgresql:15.5.0-debian-11-r17 |
137 | imagePullPolicy: IfNotPresent |
138 | livenessProbe: |
139 | exec: |
140 | command: |
141 | - sh |
142 | - -c |
143 | - exec pg_isready -U "postgres" -d "wiki" -h 127.0.0.1 -p 5432 |
144 | failureThreshold: 6 |
145 | initialDelaySeconds: 30 |
146 | periodSeconds: 10 |
147 | successThreshold: 1 |
148 | timeoutSeconds: 5 |
149 | ports: |
150 | - containerPort: 5432 |
151 | name: postgresql |
152 | protocol: TCP |
153 | readinessProbe: |
154 | exec: |
155 | command: |
156 | - sh |
157 | - -c |
158 | - -e |
159 | - | |
160 | pg_isready -U "postgres" -d "wiki" -h 127.0.0.1 -p 5432 |
161 | [ -f /opt/bitnami/postgresql/tmp/.initialized ] |
162 | failureThreshold: 6 |
163 | initialDelaySeconds: 5 |
164 | periodSeconds: 10 |
165 | successThreshold: 1 |
166 | timeoutSeconds: 5 |
167 | resources: |
168 | requests: |
169 | cpu: 250m |
170 | memory: 256Mi |
171 | securityContext: |
172 | runAsUser: 1001 |
173 | terminationMessagePath: /dev/termination-log |
174 | terminationMessagePolicy: File |
175 | volumeMounts: |
176 | - mountPath: /bitnami/postgresql |
177 | name: data |
178 | dnsPolicy: ClusterFirst |
179 | initContainers: |
180 | - command: |
181 | - sh |
182 | - -c |
183 | - | |
184 | mkdir -p /bitnami/postgresql/data |
185 | chmod 700 /bitnami/postgresql/data |
186 | find /bitnami/postgresql -mindepth 0 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | \ |
187 | xargs chown -R 1001:1001 |
188 | image: docker.io/bitnami/minideb:stretch |
189 | imagePullPolicy: Always |
190 | name: init-chmod-data |
191 | resources: |
192 | requests: |
193 | cpu: 250m |
194 | memory: 256Mi |
195 | securityContext: |
196 | runAsUser: 0 |
197 | volumeMounts: |
198 | - mountPath: /bitnami/postgresql |
199 | name: data |
200 | restartPolicy: Always |
201 | securityContext: |
202 | fsGroup: 1001 |
203 | serviceAccount: recipes |
204 | serviceAccountName: recipes |
205 | terminationGracePeriodSeconds: 30 |
206 | volumeClaimTemplates: |
207 | - apiVersion: v1 |
208 | kind: PersistentVolumeClaim |
209 | metadata: |
210 | name: data |
211 | spec: |
212 | accessModes: |
213 | - ReadWriteOnce |
214 | resources: |
215 | requests: |
216 | storage: 50Gi |
217 | volumeMode: Filesystem |
218 | storageClassName: rook-ssd-block |
219 | --- |
220 | apiVersion: v1 |
221 | kind: Service |
222 | metadata: |
223 | labels: |
224 | app: recipes |
225 | tier: database |
226 | name: recipes-postgresql |
227 | namespace: tandoor |
228 | spec: |
229 | ports: |
230 | - name: postgresql |
231 | port: 5432 |
232 | protocol: TCP |
233 | targetPort: postgresql |
234 | selector: |
235 | app: recipes |
236 | tier: database |
237 | sessionAffinity: None |
238 | type: ClusterIP |
239 | --- |
240 | apiVersion: apps/v1 |
241 | kind: Deployment |
242 | metadata: |
243 | name: recipes |
244 | namespace: tandoor |
245 | labels: |
246 | app: recipes |
247 | environment: production |
248 | tier: frontend |
249 | spec: |
250 | replicas: 1 |
251 | strategy: |
252 | type: Recreate |
253 | selector: |
254 | matchLabels: |
255 | app: recipes |
256 | environment: production |
257 | template: |
258 | metadata: |
259 | annotations: |
260 | backup.velero.io/backup-volumes: media,static |
261 | labels: |
262 | app: recipes |
263 | tier: frontend |
264 | environment: production |
265 | spec: |
266 | restartPolicy: Always |
267 | serviceAccount: recipes |
268 | serviceAccountName: recipes |
269 | initContainers: |
270 | - name: init-chmod-data |
271 | env: |
272 | - name: SECRET_KEY |
273 | valueFrom: |
274 | secretKeyRef: |
275 | name: recipes |
276 | key: secret-key |
277 | - name: DB_ENGINE |
278 | value: django.db.backends.postgresql |
279 | - name: POSTGRES_HOST |
280 | value: recipes-postgresql |
281 | - name: POSTGRES_PORT |
282 | value: "5432" |
283 | - name: POSTGRES_USER |
284 | value: postgres |
285 | - name: POSTGRES_DB |
286 | value: recipes |
287 | - name: POSTGRES_PASSWORD |
288 | valueFrom: |
289 | secretKeyRef: |
290 | name: recipes |
291 | key: postgresql-postgres-password |
292 | image: vabene1111/recipes |
293 | imagePullPolicy: Always |
294 | resources: |
295 | requests: |
296 | cpu: 250m |
297 | memory: 64Mi |
298 | command: |
299 | - sh |
300 | - -c |
301 | - | |
302 | set -e |
303 | source venv/bin/activate |
304 | echo "Updating database" |
305 | python manage.py migrate |
306 | python manage.py collectstatic_js_reverse |
307 | python manage.py collectstatic --noinput |
308 | echo "Setting media file attributes" |
309 | chown -R 65534:65534 /opt/recipes/mediafiles |
310 | find /opt/recipes/mediafiles -type d | xargs -r chmod 755 |
311 | find /opt/recipes/mediafiles -type f | xargs -r chmod 644 |
312 | echo "Done" |
313 | securityContext: |
314 | runAsUser: 0 |
315 | volumeMounts: |
316 | - mountPath: /opt/recipes/mediafiles |
317 | name: media |
318 | # mount as subPath due to lost+found on ext4 pvc |
319 | subPath: files |
320 | - mountPath: /opt/recipes/staticfiles |
321 | name: static |
322 | # mount as subPath due to lost+found on ext4 pvc |
323 | subPath: files |
324 | containers: |
325 | - name: recipes-nginx |
326 | image: nginx:latest |
327 | imagePullPolicy: IfNotPresent |
328 | ports: |
329 | - containerPort: 80 |
330 | protocol: TCP |
331 | name: http |
332 | - containerPort: 8080 |
333 | protocol: TCP |
334 | name: gunicorn |
335 | resources: |
336 | requests: |
337 | cpu: 250m |
338 | memory: 64Mi |
339 | volumeMounts: |
340 | - mountPath: /media |
341 | name: media |
342 | # mount as subPath due to lost+found on ext4 pvc |
343 | subPath: files |
344 | - mountPath: /static |
345 | name: static |
346 | # mount as subPath due to lost+found on ext4 pvc |
347 | subPath: files |
348 | - name: nginx-config |
349 | mountPath: /etc/nginx/nginx.conf |
350 | subPath: nginx-config |
351 | readOnly: true |
352 | - name: recipes |
353 | image: vabene1111/recipes |
354 | imagePullPolicy: IfNotPresent |
355 | command: |
356 | - /opt/recipes/venv/bin/gunicorn |
357 | - -b |
358 | - :8080 |
359 | - --access-logfile |
360 | - "-" |
361 | - --error-logfile |
362 | - "-" |
363 | - --log-level |
364 | - INFO |
365 | - recipes.wsgi |
366 | livenessProbe: |
367 | failureThreshold: 3 |
368 | httpGet: |
369 | path: / |
370 | port: 8080 |
371 | scheme: HTTP |
372 | periodSeconds: 30 |
373 | readinessProbe: |
374 | httpGet: |
375 | path: / |
376 | port: 8080 |
377 | scheme: HTTP |
378 | periodSeconds: 30 |
379 | resources: |
380 | requests: |
381 | cpu: 250m |
382 | memory: 64Mi |
383 | volumeMounts: |
384 | - mountPath: /opt/recipes/mediafiles |
385 | name: media |
386 | # mount as subPath due to lost+found on ext4 pvc |
387 | subPath: files |
388 | - mountPath: /opt/recipes/staticfiles |
389 | name: static |
390 | # mount as subPath due to lost+found on ext4 pvc |
391 | subPath: files |
392 | env: |
393 | - name: DEBUG |
394 | value: "0" |
395 | - name: ALLOWED_HOSTS |
396 | value: '*' |
397 | - name: SECRET_KEY |
398 | valueFrom: |
399 | secretKeyRef: |
400 | name: recipes |
401 | key: secret-key |
402 | - name: GUNICORN_MEDIA |
403 | value: "0" |
404 | - name: DB_ENGINE |
405 | value: django.db.backends.postgresql |
406 | - name: POSTGRES_HOST |
407 | value: recipes-postgresql |
408 | - name: POSTGRES_PORT |
409 | value: "5432" |
410 | - name: POSTGRES_USER |
411 | value: postgres |
412 | - name: POSTGRES_DB |
413 | value: recipes |
414 | - name: POSTGRES_PASSWORD |
415 | valueFrom: |
416 | secretKeyRef: |
417 | name: recipes |
418 | key: postgresql-postgres-password |
419 | securityContext: |
420 | runAsUser: 65534 |
421 | volumes: |
422 | - name: media |
423 | persistentVolumeClaim: |
424 | claimName: recipes-media |
425 | - name: static |
426 | persistentVolumeClaim: |
427 | claimName: recipes-static |
428 | - name: nginx-config |
429 | configMap: |
430 | name: recipes-nginx-config |
431 | --- |
432 | apiVersion: v1 |
433 | kind: Service |
434 | metadata: |
435 | name: recipes |
436 | namespace: tandoor |
437 | labels: |
438 | app: recipes |
439 | tier: frontend |
440 | spec: |
441 | selector: |
442 | app: recipes |
443 | tier: frontend |
444 | environment: production |
445 | ports: |
446 | - port: 80 |
447 | targetPort: http |
448 | name: http |
449 | protocol: TCP |
450 | - port: 8080 |
451 | targetPort: gunicorn |
452 | name: gunicorn |
453 | protocol: TCP |
454 | --- |
455 | apiVersion: networking.k8s.io/v1 |
456 | kind: Ingress |
457 | metadata: |
458 | annotations: |
459 | kubernetes.io/tls-acme: "true" |
460 | cert-manager.io/cluster-issuer: letsencrypt-prod |
461 | name: recipes |
462 | namespace: tandoor |
463 | spec: |
464 | ingressClassName: nginx |
465 | rules: |
466 | - host: recipes.tblflp.net |
467 | http: |
468 | paths: |
469 | - backend: |
470 | service: |
471 | name: recipes |
472 | port: |
473 | number: 8080 |
474 | path: / |
475 | pathType: Prefix |
476 | - backend: |
477 | service: |
478 | name: recipes |
479 | port: |
480 | number: 80 |
481 | path: /media |
482 | pathType: Prefix |
483 | - backend: |
484 | service: |
485 | name: recipes |
486 | port: |
487 | number: 80 |
488 | path: /static |
489 | pathType: Prefix |
490 | tls: |
491 | - hosts: |
492 | - recipes.tblflp.net |
493 | secretName: recipes-local-tls |