openova/products/catalyst/chart/templates
e3mrah 115c58885b
fix(cilium-gateway): allow world ingress to reserved:ingress (unblocks Sovereign public surfaces) (#1482)
* fix(tls): cilium-gateway-cert STAGING/PROD issuer selectable via tofu

clusters/_template/sovereign-tls/cilium-gateway-cert.yaml hardcoded
letsencrypt-dns01-prod-powerdns regardless of qa_test_session_enabled.
On high-cadence QA reprov cycles this hits the LE PROD 5/168h rate
limit (caught on prov #76 at 13:45 UTC, retry-after 16:49 UTC) and
the wildcard Certificate sticks Ready=False — Cilium Gateway has no
valid TLS secret → envoy listener never binds → public TLS handshake
to console.<fqdn> dies with SSL_ERROR_SYSCALL.

Add tofu local.wildcard_cert_issuer = qa_test_session_enabled ?
staging : prod. Thread WILDCARD_CERT_ISSUER through the sovereign-
tls Kustomization postBuild.substitute. cilium-gateway-cert.yaml
references it as ${WILDCARD_CERT_ISSUER}.

Default behaviour unchanged for non-QA (production) Sovereigns —
they still resolve to letsencrypt-dns01-prod-powerdns.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(cilium-gateway): allow world ingress to Cilium Gateway reserved:ingress endpoint

When Cilium Gateway API runs with gatewayAPI.hostNetwork.enabled=true and
a default-deny CCNP is present, every public request to a Sovereign host
(console, auth, gitea, registry, api, ...) hits the gateway listener and
gets DENIED at envoy's cilium.l7policy filter with:

    cilium.l7policy: Ingress from 1 policy lookup for endpoint X for port 30443: DENY

Public response: HTTP/1.1 403 Forbidden, body "Access denied", server: envoy.

Root cause: Cilium creates a special endpoint with identity reserved:ingress (8)
representing the gateway listener. By default this endpoint has
policy-enabled=both with allowed-ingress-identities=[1 (host)] and empty
L4 rules — so no port is permitted. The default-deny CCNP's NotIn-namespace
endpointSelector does NOT cover this endpoint (it has no
io.kubernetes.pod.namespace label), and our qa-fixtures didn't ship a
matching allow-template for it. Net effect: TLS handshake succeeds, HTTPRoutes
are Programmed, backends are healthy in-cluster, but every request 403s.

Caught live on prov #80 (omantel.biz, 2026-05-14) after the Gateway hostNetwork
fix (#1480) finally activated host-bind on :30443. Verified by:
- envoy debug log: cilium.l7policy DENY for endpoint 10.42.0.201 port 30443
- cilium-dbg endpoint get 3282 -o json: l4.ingress: [] and allowed-ingress-identities: [1]
- transiently applying the same CCNP via kubectl: console.omantel.biz → 200

Fix: ship a CCNP scoped to reserved:ingress that allows ingress from world,
cluster, host, remote-node (multi-region CP-to-CP), and kube-apiserver,
plus egress to all so envoy can forward to any backend service. This is
the canonical Cilium hostNetwork Gateway-API zero-trust pattern.

Chart bump: catalyst 1.4.142 → 1.4.143.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: e3mrah <catalyst@openova.io>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: e3mrah <1234567+e3mrah@users.noreply.github.com>
2026-05-14 18:50:34 +04:00
..
controllers fix(chart,api,controllers,ui): qa-loop iter-11 Fix #45 — three-cluster closeout (#1265) 2026-05-10 07:26:05 +04:00
marketplace-api fix(bp-catalyst-platform): auto-provision marketplace-api-secrets on Sovereign install (#887) (#888) 2026-05-05 09:26:23 +04:00
qa-fixtures fix(cilium-gateway): allow world ingress to reserved:ingress (unblocks Sovereign public surfaces) (#1482) 2026-05-14 18:50:34 +04:00
services fix(catalyst-api): catalyst-catalog + organization-controller GITEA_TOKEN secretKeyRef alignment (Fix #124, Fix #122 secondary) (#1336) 2026-05-11 01:06:46 +04:00
sme-services deploy: update sme service images to b0ed216 + bump chart to 1.4.87 2026-05-09 00:05:59 +00:00
api-cache-pvc.yaml feat: K8s informer + SSE data plane (#321) (#358) 2026-05-01 11:53:31 +04:00
api-deployment.yaml deploy: update catalyst images to a88e132 2026-05-14 14:27:51 +00:00
api-deployments-pvc.yaml feat(catalyst-api): persist deployments to PVC so they survive Pod restarts 2026-04-29 15:55:49 +02:00
api-service.yaml feat(consolidation): Phase 1 — move Catalyst-Zero apps + CI + manifests into public monorepo 2026-04-28 12:08:09 +02:00
catalyst-gitea-token-secret.yaml fix(catalyst-platform): gitea-token-mint hook 60->180 iters for autoscaler cold-start (Fix #184) (#1388) 2026-05-11 14:44:54 +04:00
catalyst-openova-kc-credentials-secret.yaml feat(bp-stalwart-sovereign): per-Sovereign Stalwart for Console mail (#924) (#931) 2026-05-05 14:20:16 +04:00
clusterrole-cutover-driver.yaml fix(networking): qa-loop iter-11 Fix #48 — wire Networking page + handlers to live data (#1267) 2026-05-10 07:55:52 +04:00
clusterrolebinding-cutover-driver-kustomize.yaml fix(bp-catalyst-platform): cutover-driver RBAC dual-mode render (#830) (#839) 2026-05-04 23:54:03 +04:00
clusterrolebinding-cutover-driver.yaml fix(bp-catalyst-platform): cutover-driver RBAC dual-mode render (#830) (#839) 2026-05-04 23:54:03 +04:00
configmap-catalyst-runtime-config.yaml fix(chart): create catalyst-runtime-config ConfigMap with KC/Gitea env (qa-loop iter-1) (#1197) 2026-05-09 15:53:11 +04:00
httproute.yaml fix(catalyst): chroot SPA 404s for /cloud/legacy + /notifications + /readyz shadow + /auth/handover html error (#1075) 2026-05-07 20:29:49 +04:00
ingress-console-tls.yaml fix(bp-catalyst-platform): restore contabo Flux paths broken by PRs 246/280/281/286 (#297) 2026-04-30 20:02:46 +04:00
ingress.yaml fix(catalyst-ui): add /assets + /component-logos ingress rules for Kustomize path (#616) 2026-05-02 18:36:38 +04:00
kustomization.yaml fix(bp-catalyst-platform): cutover-driver RBAC dual-mode render (#830) (#839) 2026-05-04 23:54:03 +04:00
openova-catalog-helmrepository.yaml fix(chart): ship missing openova-catalog HelmRepository (qa-loop iter-16 Fix #65) (#1304) 2026-05-10 20:43:13 +04:00
secret-organization-controller-keycloak.yaml fix(chart): auto-provision catalyst-organization-controller-keycloak Secret on Sovereign install (qa-loop iter-1 Fix #14) (#1201) 2026-05-09 16:02:43 +04:00
serviceaccount-cutover-driver.yaml fix(bp-catalyst-platform): cutover-driver RBAC dual-mode render (#830) (#839) 2026-05-04 23:54:03 +04:00
sovereign-fqdn-configmap.yaml fix(catalyst-api): /compliance/scorecard wire-shape for matrix runner (Fix #167) (#1370) 2026-05-11 11:49:02 +04:00
sovereign-wildcard-certs.yaml fix(bp-cert-manager-powerdns-webhook,bp-catalyst-platform): staging ClusterIssuer for QA Sovereigns (Fix #123, LE rate-limit bypass) (#1339) 2026-05-11 01:08:07 +04:00
ui-deployment.yaml deploy: update catalyst images to a88e132 2026-05-14 14:27:51 +00:00
ui-service.yaml feat(consolidation): Phase 1 — move Catalyst-Zero apps + CI + manifests into public monorepo 2026-04-28 12:08:09 +02:00