apiVersion: apps/v1 kind: Deployment metadata: name: chal5-elfs-blog namespace: ctf labels: { app: chal5-elfs-blog } spec: replicas: 1 # keep at 1: writes comments.json to local fs selector: matchLabels: { app: chal5-elfs-blog } template: metadata: labels: { app: chal5-elfs-blog } spec: containers: - name: app image: ctf-elfs-blog:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80 env: - name: FLAG valueFrom: secretKeyRef: { name: ctf-flags, key: chal5-flag } - name: ADMIN_BOT_ENABLED value: "1" - name: ADMIN_BOT_INTERVAL value: "15" - name: BASE_URL value: "http://127.0.0.1:80" resources: requests: { cpu: "100m", memory: "256Mi" } limits: { cpu: "1", memory: "1Gi" } # headless Chromium is memory-hungry # Chromium is launched with --disable-dev-shm-usage, so a large /dev/shm # is not strictly required, but this avoids the default 64Mi shm limit. volumeMounts: - name: dshm mountPath: /dev/shm volumes: - name: dshm emptyDir: medium: Memory sizeLimit: 256Mi --- apiVersion: v1 kind: Service metadata: name: chal5-elfs-blog namespace: ctf spec: selector: { app: chal5-elfs-blog } ports: - port: 80 targetPort: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: chal5-elfs-blog namespace: ctf annotations: traefik.ingress.kubernetes.io/router.entrypoints: web spec: ingressClassName: traefik rules: - host: chal5.entysec.com http: paths: - path: / pathType: Prefix backend: service: name: chal5-elfs-blog port: { number: 80 }