From 543394a825adfea91868269c1afaa502d548eaa1 Mon Sep 17 00:00:00 2001 From: Hermes Agent service account Date: Sun, 7 Jun 2026 20:44:52 -0500 Subject: [PATCH] feat(couchdb): split internal/external ingress for correct CN per cert - values.yaml: internal ingress only (communicore.local.mk-labs.cloud) CN=communicore.local.mk-labs.cloud, secret=couchdb-tls - ingress-public.yaml: external ingress (communicore.mk-labs.cloud) CN=communicore.mk-labs.cloud, secret=couchdb-tls-public ExternalDNS opt-in annotations for Cloudflare -> ingress.mk-labs.cloud Obsidian Sync connects externally via communicore.mk-labs.cloud; JARVIS traffic stays internal on communicore.local.mk-labs.cloud. --- .../applications/couchdb/ingress-public.yaml | 34 +++++++++++++++++++ cluster/applications/couchdb/values.yaml | 9 ++--- 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 cluster/applications/couchdb/ingress-public.yaml diff --git a/cluster/applications/couchdb/ingress-public.yaml b/cluster/applications/couchdb/ingress-public.yaml new file mode 100644 index 0000000..410ff7e --- /dev/null +++ b/cluster/applications/couchdb/ingress-public.yaml @@ -0,0 +1,34 @@ +# ------------------------------------------------------------------------------ +# FILE: cluster/applications/couchdb/ingress-public.yaml +# DESCRIPTION: External ingress for CouchDB — communicore.mk-labs.cloud only. +# Separate from the Helm-managed internal ingress so each cert +# has the correct CN for its hostname. CN validation in Obsidian +# Sync requires CN=communicore.mk-labs.cloud on the public cert. +# ------------------------------------------------------------------------------ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: couchdb-public + namespace: couchdb + annotations: + cert-manager.io/cluster-issuer: "letsencrypt-prod" + external-dns.alpha.kubernetes.io/hostname: "communicore.mk-labs.cloud" + external-dns.alpha.kubernetes.io/target: "ingress.mk-labs.cloud" + external-dns.alpha.kubernetes.io/public: "true" +spec: + ingressClassName: nginx + rules: + - host: communicore.mk-labs.cloud + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: couchdb-svc-couchdb + port: + number: 5984 + tls: + - secretName: couchdb-tls-public + hosts: + - communicore.mk-labs.cloud diff --git a/cluster/applications/couchdb/values.yaml b/cluster/applications/couchdb/values.yaml index 0f8d1a7..1630b12 100644 --- a/cluster/applications/couchdb/values.yaml +++ b/cluster/applications/couchdb/values.yaml @@ -53,24 +53,21 @@ service: type: ClusterIP port: 5984 -# Ingress configuration +# Ingress configuration — internal only +# External access via separate ingress manifest (ingress-public.yaml) +# which carries its own cert with CN=communicore.mk-labs.cloud ingress: enabled: true className: nginx annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" external-dns.alpha.kubernetes.io/hostname: "communicore.local.mk-labs.cloud" - external-dns.alpha.kubernetes.io/target: "ingress.mk-labs.cloud" - # Opt in to public Cloudflare DNS — creates communicore.mk-labs.cloud -> ingress.mk-labs.cloud - external-dns.alpha.kubernetes.io/public: "true" hosts: - communicore.local.mk-labs.cloud - - communicore.mk-labs.cloud tls: - secretName: couchdb-tls hosts: - communicore.local.mk-labs.cloud - - communicore.mk-labs.cloud # Resource limits resources: