# k8s/frontend.yaml # ============================================ # Switchboard Core - Frontend Deployment # ============================================ # nginx serving the SPA + proxying page routes # to the backend for Go template rendering. # # v0.22.6+: BACKEND_URL enables proxy_pass for # /, /login, /admin, /editor, /notes, /settings. # ============================================ apiVersion: apps/v1 kind: Deployment metadata: name: switchboard-fe${DEPLOY_SUFFIX} namespace: ${NAMESPACE} labels: app: switchboard component: frontend env: ${ENVIRONMENT} spec: replicas: ${FE_REPLICAS} selector: matchLabels: app: switchboard component: frontend env: ${ENVIRONMENT} template: metadata: labels: app: switchboard component: frontend env: ${ENVIRONMENT} spec: containers: - name: frontend image: ${FE_IMAGE}:${IMAGE_TAG} imagePullPolicy: Always ports: - containerPort: 80 name: http env: - name: BASE_PATH value: "${BASE_PATH}" - name: ENVIRONMENT value: "${ENVIRONMENT}" - name: BACKEND_URL value: "http://switchboard-be${DEPLOY_SUFFIX}:8080" volumeMounts: - name: branding mountPath: /branding readOnly: true resources: requests: memory: "${FE_MEMORY_REQUEST}" cpu: "${FE_CPU_REQUEST}" limits: memory: "${FE_MEMORY_LIMIT}" cpu: "${FE_CPU_LIMIT}" readinessProbe: httpGet: path: /healthz port: 80 initialDelaySeconds: 3 periodSeconds: 10 timeoutSeconds: 3 failureThreshold: 3 livenessProbe: httpGet: path: /healthz port: 80 initialDelaySeconds: 5 periodSeconds: 30 timeoutSeconds: 5 failureThreshold: 3 volumes: - name: branding configMap: name: switchboard-branding optional: true --- apiVersion: v1 kind: Service metadata: name: switchboard-fe${DEPLOY_SUFFIX} namespace: ${NAMESPACE} labels: app: switchboard component: frontend env: ${ENVIRONMENT} spec: selector: app: switchboard component: frontend env: ${ENVIRONMENT} ports: - protocol: TCP port: 80 targetPort: 80 name: http