@@ -10,6 +10,12 @@ Operator** on Kubernetes.
1010> The first request delivers everything (control plane, data plane, credentials,
1111> ACLs, routing). Later requests usually just update the ACLs to add more topics.
1212
13+ > ** Two repos.** This is the ** portal/platform** repo (catalog, templates, platform
14+ > bootstrap). Tenant GitOps config lives in a companion repo,
15+ > [ ` kafka-selfservice-gitops ` ] ( https://github.com/your-org/kafka-selfservice-gitops ) :
16+ > the templates open PRs there and Argo CD watches it. See
17+ > [ ` docs/repositories.md ` ] ( docs/repositories.md ) .
18+
1319## Why it's interesting
1420
1521- ** Zero broker changes to grant access.** Credentials are terminated at the gateway
@@ -36,15 +42,14 @@ Operator** on Kubernetes.
3642│ ├── networking/ # GatewayClass/Config, Gateway, TLS cert
3743│ ├── backstage/ # in-cluster Backstage: Deployment, Service, Postgres, config
3844│ └── kafka/ # Strimzi Kafka cluster + topics
39- ├── gitops/
40- │ ├── argocd/ # platform App + tenants ApplicationSet
41- │ └── apps/ # one dir per onboarded app (Backstage writes here)
42- │ └── fraud-analytics/ # worked example (rendered output)
4345├── examples/kafka-client/ # SCRAM client config + test commands
4446├── scripts/ # bootstrap, cert, validate
45- └── docs/ # architecture.md , flows.md
47+ └── docs/ # architecture, flows, prerequisites, secrets, repositories
4648```
4749
50+ Tenant config (the ` apps/* ` directories Backstage writes to, plus the Argo CD
51+ ` ApplicationSet ` ) lives in the companion ** ` kafka-selfservice-gitops ` ** repo, not here.
52+
4853## Prerequisites
4954
5055- A Kubernetes cluster (minikube is fine) with ** Kong Operator** , ** Strimzi** ,
@@ -64,12 +69,15 @@ The essentials:
6469kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
6570```
6671
67- ** Argo CD** — reconciles ` platform/ ` and auto-onboards each ` gitops/apps/* ` tenant:
72+ ** Argo CD** — reconciles ` platform/ ` (this repo) and auto-onboards each tenant from
73+ the companion repo's ` apps/* ` :
6874
6975``` bash
7076kubectl create namespace argocd
7177kubectl apply -n argocd --server-side --force-conflicts \
7278 -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
79+ # then apply argocd/platform-app.yaml + argocd/tenants-appset.yaml from
80+ # the kafka-selfservice-gitops repo (edit repoURLs first).
7381```
7482
7583** Backstage** — runs in-cluster; build the image once, then deploy the manifests:
@@ -100,25 +108,27 @@ Kong Operator + Strimzi install commands (and the AsyncAPI page wiring) are also
100108export KONNECT_PAT=kpat_xxx
101109./scripts/bootstrap.sh
102110
103- # 2) Either let Argo CD manage tenants...
104- kubectl apply -f gitops/argocd/ # edit repoURL first
105- # ...or apply the worked example directly:
106- kubectl apply -k gitops/apps/fraud-analytics/kong/
111+ # 2) Tenants come from the companion repo (kafka-selfservice-gitops):
112+ # let Argo CD manage them...
113+ kubectl apply -f ../kafka-selfservice-gitops/argocd/ # edit repoURLs first
114+ # ...or apply the worked example directly:
115+ kubectl apply -k ../kafka-selfservice-gitops/apps/fraud-analytics/kong/
107116
108117# 3) Expose the gateway locally and test
109118minikube tunnel &
110119cat examples/kafka-client/test-commands.md
111120```
112121
113- To wire up the portal, register ` catalog-info.yaml ` in Backstage and merge
114- ` backstage/app-config.snippet. yaml` into your ` app-config.yaml ` .
122+ To wire up the portal, point the in-cluster Backstage ` catalog.locations ` at this
123+ repo's ` catalog-info. yaml` (see ` platform/backstage/ app-config.configmap. yaml` ) .
115124
116125## The self-service experience
117126
1181271 . A developer opens the ** Retail Banking NY** or ** Wealth Management LA** API in the
119128 Backstage catalog and reads the AsyncAPI channels (topics).
1201292 . They run ** Consume Kafka Topics** , name their app, pick topics, and choose SCRAM or
121- OAuth. Backstage opens a PR under ` gitops/apps/<app>/ ` .
130+ OAuth. Backstage opens a PR adding ` apps/<app>/ ` to the ` kafka-selfservice-gitops `
131+ repo.
1221323 . On merge, Argo CD + Kong Operator provision the virtual cluster, credentials, ACLs
123133 and route. The app connects to ` bootstrap.<app>.127-0-0-1.sslip.io:9092 ` .
1241344 . Need more topics later? ** Add Topics to Application** changes only the ACL policy.
@@ -139,9 +149,9 @@ See [`docs/flows.md`](docs/flows.md) for sequence diagrams and
139149 CRDs in * your* operator version: the SCRAM principal ** password secret-ref** shape,
140150 and whether ACLs are a separate ` EventGatewayVirtualClusterPolicy ` or inline on the
141151 virtual cluster (` spec.apiSpec.clusterPolicies ` ). Both are called out in comments.
142- - SCRAM passwords are placeholders (` REPLACE_ME ` ). For real use, generate them with a
143- custom scaffolder action and store via SealedSecrets / External Secrets — never
144- commit plaintext.
152+ - SCRAM passwords (and the Backstage/Konnect secrets) are placeholders (` REPLACE_ME ` ).
153+ For real use, generate them and store via Sealed Secrets or External Secrets — never
154+ commit plaintext. [ ` docs/secrets.md ` ] ( docs/secrets.md ) shows worked manifests for both.
145155- The ` platform/ ` Kafka + Event Gateway manifests are adapted from the
146156 ` kong-event-gw-kubernetes ` reference.
147157
0 commit comments