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.
This commit is contained in:
Hermes Agent service account
2026-06-07 20:44:52 -05:00
parent 23d6d75117
commit 543394a825
2 changed files with 37 additions and 6 deletions

View File

@@ -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

View File

@@ -53,24 +53,21 @@ service:
type: ClusterIP type: ClusterIP
port: 5984 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: ingress:
enabled: true enabled: true
className: nginx className: nginx
annotations: annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod" cert-manager.io/cluster-issuer: "letsencrypt-prod"
external-dns.alpha.kubernetes.io/hostname: "communicore.local.mk-labs.cloud" 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: hosts:
- communicore.local.mk-labs.cloud - communicore.local.mk-labs.cloud
- communicore.mk-labs.cloud
tls: tls:
- secretName: couchdb-tls - secretName: couchdb-tls
hosts: hosts:
- communicore.local.mk-labs.cloud - communicore.local.mk-labs.cloud
- communicore.mk-labs.cloud
# Resource limits # Resource limits
resources: resources: