Skip to content

Conversation

sebltm
Copy link

@sebltm sebltm commented Aug 18, 2025

What this PR does / why we need it:

Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #

Special notes for your reviewer:

  1. Please confirm that if this PR changes any image versions, then that's the sole change this PR makes.

TODOs:

  • squashed commits
  • if necessary:
    • includes documentation
    • adds unit tests

/hold

@k8s-ci-robot k8s-ci-robot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Aug 18, 2025
Copy link

netlify bot commented Aug 18, 2025

Deploy Preview for kubernetes-sigs-cluster-api-openstack ready!

Name Link
🔨 Latest commit d4b1aec
🔍 Latest deploy log https://app.netlify.com/projects/kubernetes-sigs-cluster-api-openstack/deploys/68a332f59aa005000846483d
😎 Deploy Preview https://deploy-preview-2660--kubernetes-sigs-cluster-api-openstack.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Aug 18, 2025
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign emilienm for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot
Copy link
Contributor

Hi @sebltm. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@lentzi90
Copy link
Contributor

/ok-to-test

@k8s-ci-robot k8s-ci-robot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Sep 18, 2025
Copy link
Contributor

@lentzi90 lentzi90 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting proposal! It will need some polishing though.
I think all the links are broken, so that would perhaps be the first thing to fix.

Comment on lines +99 to +100
- [api/v1beta1/openstackcluster_types.go](api/v1beta1/openstackcluster_types.go)
- [api/v1beta1/types.go](api/v1beta1/types.go)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Links are broken

Comment on lines +103 to +114
- availabilityZoneSubnets []AZSubnetMapping (required to enable multi-AZ)
- Explicit mapping; each entry includes:
- availabilityZone string
- subnet SubnetParam
- The LB network MUST be specified when using this mapping via spec.apiServerLoadBalancer.network. Each mapped subnet MUST belong to that network.
- allowCrossAZLoadBalancerMembers *bool
- Default false.
- When true, register control plane nodes to all per-AZ LBs; otherwise same-AZ only.
- additionalPorts []int
- Optional extra listener ports besides the Kubernetes API port.
- allowedCIDRs []string
- Optional VIP ACL list when supported by the Octavia provider.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you put the code/yaml fields inside ticks so it is easier to read?
For example availabilityZoneSubnets []AZSubnetMapping.

Comment on lines +131 to +132
- [config/crd/bases/](config/crd/bases/)
- [config/crd/patches/](config/crd/patches/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Broken links

Comment on lines +137 to +139
- [controllers/openstackcluster_controller.go](controllers/openstackcluster_controller.go)
- [pkg/cloud/services/loadbalancer/](pkg/cloud/services/loadbalancer/)
- [pkg/cloud/services/networking/](pkg/cloud/services/networking/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Broken links

end
```

## Integration with External Global Server Load Balancing (GSLB)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section about GSLB seems quite redundant to me. It doesn't really have anything to do with CAPO or the implementation of this feature. It just explains how it can fit in the larger ecosystem. I would prefer to reduce this to just a paragraph under the Motivation section.

Comment on lines +227 to +244
Restrict access using allowed CIDRs
```yaml
spec:
apiServerLoadBalancer:
enabled: true
network:
id: 6c90b532-7ba0-418a-a276-5ae55060b5b0
availabilityZoneSubnets:
- availabilityZone: az1
subnet:
id: cad5a91a-36de-4388-823b-b0cc82cadfdc
- availabilityZone: az2
subnet:
id: e2407c18-c4e7-4d3d-befa-8eec5d8756f2
allowedCIDRs:
- 192.0.2.0/24
- 203.0.113.10
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not new in this proposal so I would leave it out.

- status.apiServerLoadBalancers is populated alongside legacy status until further cleanup.
- Disabling multi-AZ:
- Remove the mapping; controller maintains single-LB behavior.
- Per-AZ LBs are not automatically deleted; operators may clean up unused resources.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would we not clean them up automatically?

Comment on lines +273 to +275
- [pkg/cloud/services/loadbalancer/](pkg/cloud/services/loadbalancer/)
- [controllers/](controllers/)
- [test/e2e/](test/e2e/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Broken links

Comment on lines +18 to +21
## Non-Goals
- Managing or provisioning DNS records.
- Provider-specific topologies such as ACTIVE_STANDBY across fault domains.
- Service type LoadBalancer for worker Services.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems to me that automatic creation of the network and subnets is also a non-goal, right?

## Design Overview

### High-level behavior
- When enabled and configured with an explicit mapping, CAPO reconciles one LoadBalancer per Availability Zone (AZ).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps add here that the operator creates the network and subnets?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
Status: Inbox
Development

Successfully merging this pull request may close these issues.

3 participants