Skip to content

Commit 260084e

Browse files
committed
Update proposal for new naming schema & reviews
Signed-off-by: Mangirdas Judeikis <mangirdas@judeikis.lt>
1 parent 06d52f8 commit 260084e

2 files changed

Lines changed: 90 additions & 50 deletions

File tree

docs/proposals/v2-extended.md

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# kube-bind v2 Extended: Backend API, CLI, UI
1+
# kbind v2 Extended: Backend API, CLI, UI
22

33
* Status: **DRAFT — for iteration**
44
* Authors: @mjudeikis
@@ -8,7 +8,7 @@
88
## Summary
99

1010
The v2 core contract is up for discussion: a binding is one `kubectl apply` of a Secret +
11-
`Connection` + bindings, consumed by the konnector, with zero kube-bind components on
11+
`Connection` + bindings, consumed by the konnector, with zero kbind components on
1212
the provider. This proposal designs everything *around* that contract — the optional
1313
service layer that answers the questions the core deliberately doesn't:
1414

@@ -64,11 +64,11 @@ Raw discovery already exists in core (`Connection.status.exportedAPIs` from labe
6464
CRDs / the workspace boundary). The catalog adds **curation**: human-facing metadata
6565
and sensible defaults that turn "a list of CRD names" into "a service you'd choose".
6666

67-
Group: `catalog.kube-bind.io`. Two kinds, successors of v1's
67+
Group: `catalog.kbind.dev`. Two kinds, successors of v1's
6868
`APIServiceExportTemplate` and `Collection`:
6969

7070
```yaml
71-
apiVersion: catalog.kube-bind.io/v1alpha1
71+
apiVersion: catalog.kbind.dev/v1alpha1
7272
kind: Export # one offering
7373
metadata:
7474
name: mangodb
@@ -93,7 +93,7 @@ spec:
9393
```
9494
9595
```yaml
96-
apiVersion: catalog.kube-bind.io/v1alpha1
96+
apiVersion: catalog.kbind.dev/v1alpha1
9797
kind: Collection # grouping for UI/CLI browsing
9898
metadata:
9999
name: databases
@@ -135,7 +135,7 @@ distribution, which wires its own implementation against the same interface.
135135
revisitable without API change (the bundle's Secret is replaceable; a bounded-token +
136136
reissue mode can be added later behind the same interface). Revocation = delete the
137137
`Grant` → issuer deletes the SA/token.
138-
* Records issuance in **`Grant`** (`iam.kube-bind.io` — an issuance/identity record, not
138+
* Records issuance in **`Grant`** (`iam.kbind.dev` — an issuance/identity record, not
139139
catalog presentation): "identity X was issued credentials Y for export Z". The anchor
140140
for revocation, audit, and the reaper.
141141

@@ -195,7 +195,7 @@ equivalent), so the reaper ships only once the konnector actually maintains the
195195
until then dead-consumer GC is manual.
196196

197197
* Lease expired beyond TTL → mark the issuance stale → (configurably) revoke
198-
credentials, then delete kube-bind-created namespaces and synced objects.
198+
credentials, then delete kbind-created namespaces and synced objects.
199199
* TTLs and the destructive step are opt-in and conservative by default (revoke ≠
200200
delete; deletion requires explicit enablement).
201201

@@ -206,12 +206,15 @@ Thin client over the gateway; everything it does is reproducible by hand:
206206
```sh
207207
kubectl bind login https://mangodb.example.com # auth, cache token
208208
kubectl bind catalog # list Exports/Collections
209-
kubectl bind mangodb # bind an Export:
209+
kubectl bind export mangodb # bind an Export:
210210
# POST /api/bind → bundle
211211
# → kubectl apply (or -o yaml)
212-
kubectl bind mangodb -o yaml > binding.yaml # GitOps mode: print, don't apply
212+
kubectl bind export mangodb -o yaml > binding.yaml # GitOps mode: print, don't apply
213213
```
214214

215+
* Every CLI action is an explicit subcommand (`login`, `catalog`, `export`); export
216+
names never occupy the subcommand slot — `kubectl bind export mangodb`, not
217+
`kubectl bind mangodb` — so command names and export names cannot collide.
215218
* `--install-konnector` (default on for interactive use) installs/upgrades the v2
216219
konnector, as v1 did.
217220
* The CLI never creates bespoke objects — it applies the gateway's bundle verbatim.
@@ -223,8 +226,8 @@ kubectl bind mangodb -o yaml > binding.yaml # GitOps mode: print, don'
223226

224227
Browse catalog → authenticate → bind → then either:
225228

226-
* **download the bundle** (via the one-time pickup URL) / copy a `kubectl bind`
227-
one-liner, or
229+
* **download the bundle** (via the one-time pickup URL) / copy a
230+
`kubectl bind export` one-liner, or
228231
* **browser-apply** (v1's UI-only flow, roadmap #406, kept): the user supplies a
229232
consumer-cluster kubeconfig (or the UI runs in-platform where one is already held),
230233
and the gateway's `/api/apply` applies the bundle and installs the konnector into the
@@ -253,11 +256,11 @@ remains separate, providing its own issuer implementation behind the same interf
253256

254257
## Decided
255258

256-
* **Packaging**: one `kube-bind-backend` binary; gateway/issuer/reaper/apply are module
259+
* **Packaging**: one `kbind-backend` binary; gateway/issuer/reaper/apply are module
257260
flags, boundaries kept as Go packages.
258-
* **Issuance anchor**: `Grant` in `iam.kube-bind.io` — the typed record of
261+
* **Issuance anchor**: `Grant` in `iam.kbind.dev` — the typed record of
259262
"identity X was issued credentials Y for export Z"; anchor for revocation, audit,
260-
reaper. Kept out of `catalog.kube-bind.io` so that group stays purely presentation+defaults.
263+
reaper. Kept out of `catalog.kbind.dev` so that group stays purely presentation+defaults.
261264
* **Credentials**: long-lived secret-based SA token (v1 behavior) — zero rotation
262265
friction accepted over security posture; revocation via `Grant` deletion; bounded
263266
tokens addable later behind the same issuer interface without API change.
@@ -273,6 +276,9 @@ remains separate, providing its own issuer implementation behind the same interf
273276
is an explicitly accepted trade-off when enabled.
274277
* **Federation**: one gateway = one provider; cross-provider aggregation is a future
275278
layer above the bundle protocol.
279+
* **CLI verb structure**: every action is an explicit subcommand; binding an export is
280+
`kubectl bind export <name>`, never a bare `kubectl bind <name>` — export names and
281+
command names must not share a namespace (review feedback, @sttts).
276282

277283
## Open questions
278284

0 commit comments

Comments
 (0)