Commit graph

6 commits

Author SHA1 Message Date
CTO Agent
672387e678 fix(pangolin): Reconnect controller to fresh Postgres Pangolin, route via internal API port 3001
DEV-452. After the SQLite -> Postgres migration in DEV-451 the pangolin
initial setup was redone, so the controller's stale bearer token was
invalid. That was only half the problem: /api/v1/traefik-config is
served exclusively by Pangolin's internal API (port 3001), not the
external dashboard API (port 3000). Pointing a Bearer request at port
3000 always returned 401 because that path lives on the session-auth
router. This has been the underlying cause of the controller's
CrashLoopBackOff, not just the stale key.

Changes:
- pangolin-controller-api-key-sealed.yaml: reseal new bearer token
  (kubeseal against sealed-secrets-controller in kube-system, includes
  the Bearer prefix expected by the controller).
- pangolin-controller-config.yaml: CONFIG_ENDPOINT now targets
  http://pangolin.pangolin.svc.cluster.local:3001/api/v1/traefik-config.
- pangolin-deployment.yaml: Service now exposes port 3001 as the
  "internal" port so in-cluster clients (kube-controller) can reach it.
  Ingress still only routes / and /api to ports 3002/3000; port 3001
  is not published to the internet.
- pangolin-controller-deployment.yaml: replicas back to 1, dropped the
  temporary "scaled to 0" comment block.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 11:35:02 +00:00
CTO Agent
05f0101684 chore(pangolin): Scale pangolin-controller to 0 pending API key re-issuance
The DB switch (DEV-451, SQLite -> PostgreSQL) starts Pangolin from a
fresh schema with no admin user or API key. The controller's bearer
token in pangolin-controller-api-key SealedSecret was issued against
the old SQLite state and is now invalid (the controller was already
in CrashLoopBackOff for the same reason).

Scale to 0 replicas so the ArgoCD Application reports Healthy after
the DB migration. Follow-up work will run Pangolin initial setup,
issue a new controller API key, and re-seal the secret before scaling
back to 1.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-08 11:20:22 +00:00
CTO Agent
fbdd757052 Fix pangolin-controller rollout by using Recreate strategy
The controller uses leader election with replicas=1. During RollingUpdate,
the new pod cannot acquire the leader lease (old pod holds it) and fails
health checks, causing indefinite restart loops.

Recreate strategy ensures the old pod terminates before the new one starts,
allowing clean leader election transitions.

Fixes: DEV-442

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-02 13:41:25 +00:00
CTO Agent
6a1e37bf07 feat(pangolin): Add API authentication to controller deployment
Configure pangolin-kube-controller to authenticate with Pangolin API
using the provided API key.

Changes:
- Add CONFIG_AUTH_HEADER environment variable to controller deployment
- Reference pangolin-controller-api-key secret (not yet created)
- Secret will contain Bearer token for API authentication

BLOCKED: Requires manual secret sealing step before deployment.

To complete this deployment, run on a machine with cluster access:

kubectl create secret generic pangolin-controller-api-key \
  --namespace=pangolin \
  --from-literal=auth-header="Bearer 5qid06u9j325kpk.ywd3bpsx34dtxyczgatyxuoxkzwhie7d72k6v4hw" \
  --dry-run=client -o yaml | \
  kubeseal --controller-name=sealed-secrets --controller-namespace=sealed-secrets \
  --format=yaml > apps/pangolin/pangolin-controller-api-key-sealed.yaml

Then commit the sealed secret and push both files.

Related: Issue for pangolin-kube-controller deployment
API Key provided by CEO in DEV-400 comments

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-02 11:32:30 +00:00
CTO Agent
055bb63438 Fix pangolin-controller probe ports to match metrics server
Update liveness and readiness probe ports from 8080 to 9090 to match the
controller's METRICS_ADDR configuration. The controller is configured to
serve metrics on port 9090, but the probes were checking port 8080,
causing pods to remain in NotReady state despite the controller
functioning correctly.

Also update containerPort to 9090 for consistency.

Related: DEV-437

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-02 10:17:46 +00:00
CTO Agent
954853cf37 refactor(pangolin): Move controller manifests to app root for Argo CD
Move Kubernetes controller manifests from kube-controller/ subdirectory
to the apps/pangolin/ root directory so Argo CD will sync them.

Files renamed with pangolin-controller- prefix:
- configmap.yaml -> pangolin-controller-config.yaml
- deployment.yaml -> pangolin-controller-deployment.yaml
- rbac.yaml -> pangolin-controller-rbac.yaml
- service.yaml -> pangolin-controller-service.yaml

Argo CD was not recursing into the subdirectory, so controller resources
were not being synced. Moving to root directory resolves this.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-01 15:52:49 +00:00
Renamed from apps/pangolin/kube-controller/deployment.yaml (Browse further)