feat: deploy to Frostmoln production
unbound-site / build (pull_request) Successful in 1m53s
unbound-site / deploy-prod-frostmoln (pull_request) Skipped

The AWS deploy-prod job has failed since CI left AWS (no k8s.unbound.se
context on the runners). Deploys now go to the Frostmoln production
cluster (namespace sites), the way Shiny deploys to Frostmoln staging.

Frostmoln enforces restricted Pod Security, so the served image is
nginx-unprivileged (uid 101, port 8080) with a matching securityContext.
The ALB ingress becomes a Traefik one with a Let's Encrypt certificate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ma8eHhW59hLAJuLzBnLvUu
This commit is contained in:
argoyleandClaude Opus 5.5 committed 2026-10-14 19:43:57 +02:00
1 parent b8b30a4fbe
commit a41e44367a
5 files changed
+37 -17

No files matched your search

+12 -4
View File
@@ -22,6 +22,11 @@ spec:
labels:
app.kubernetes.io/name: unbound-site
spec:
securityContext:
runAsNonRoot: true
runAsUser: 101
seccompProfile:
type: RuntimeDefault
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -39,14 +44,18 @@ spec:
readinessProbe:
httpGet:
path: /health
port: 80
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
imagePullPolicy: Always
image: ${IMAGE}
ports:
- containerPort: 80
- containerPort: 8080
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
resources:
requests:
cpu: 5m
@@ -63,9 +72,8 @@ metadata:
labels:
app.kubernetes.io/name: unbound-site
spec:
type: NodePort
selector:
app.kubernetes.io/name: unbound-site
ports:
- port: 80
targetPort: 80
targetPort: 8080
@@ -1,15 +1,12 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: unbound-site-ingress
name: unbound-site
annotations:
kubernetes.io/ingress.class: "alb"
alb.ingress.kubernetes.io/group.name: default
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
alb.ingress.kubernetes.io/ssl-redirect: "443"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls.certresolver: letsencrypt
spec:
ingressClassName: traefik
rules:
- host: "unbound.se"
http: