Commit 0140e8d
committed
design-proposal: revise public-IP resource proposal per review
Rework the stub in response to review and maintainer steers:
- Rename the kinds PublicIP/PublicIPClaim/PublicIPClass -> IPAddress/
IPAddressClaim/IPAddressClass. A class names a pool, and pools are not
necessarily public; the resource is the general address.
- Drop the "regression, not a wishlist" framing entirely. Cozystack uses
kube-ovn only for subnets and VPCs, never its EIP objects, so there is no
prior reserve-then-associate capability to preserve. Argue on merits: hold,
move, quota, enumerate, bill.
- Add a Positioning section: this is not Cozystack-specific and belongs in a
standalone, reusable project; Cozystack becomes one consumer. API group is a
placeholder (ipam.example.com), deliberately not cozystack.io.
- Add Design section 7, worked examples against MetalLB, Cilium LB-IPAM, and a
cloud provider, including the "plain LB Service, no annotations" collision
case: reserved pools are autoAssign:false (or selector-gated) and disjoint
from auto-assign pools, so a plain Service can never draw a reserved address.
- Security: specify controller identity by ServiceAccount and an allowlist for
GitOps/system principals so admission does not break reconciliation.
- Status schema is a list (dual-stack), addressing the scalar-field gap.
- Defer multiple platform-owned addresses per workload as out of scope, with a
note that the case may not be real (a router/VPN VM's extra addresses live on
a tunnel the platform neither owns nor sees).
- Add a Naming note on the IPAddress overlap with core (KEP-1880) and Cluster
API IPAM.
Assisted-By: Claude Opus 4.8
Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>1 parent e21ca09 commit 0140e8d
1 file changed
Lines changed: 202 additions & 88 deletions
0 commit comments