-
Notifications
You must be signed in to change notification settings - Fork 82
✨ Networking config for default mode webhooks #379
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
✨ Networking config for default mode webhooks #379
Conversation
ffa7865
to
6bcba1c
Compare
## Walkthrough
This change extends the ClusterManager CustomResourceDefinition and its Go type definitions to support detailed webhook server configuration for both Default and Hosted deployment modes. It introduces new configuration fields for webhook servers, updates validation rules, augments deep copy logic, and enhances Swagger documentation to reflect these additions. Additionally, a test was updated to reflect changes in default port values for Hosted mode webhook configurations.
## Changes
| Files/Paths | Change Summary |
|-----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| operator/v1/0000_01_operator.open-cluster-management.io_...yaml | Extended CRD schema: added `default` under `deployOption` with webhook server configuration fields; added new fields (`healthProbeBindAddress`, `hostNetwork`, `metricsBindAddress`) to both `default` and `hosted` webhook configs; added `port` with default 9443 for `default` mode; updated hosted mode webhook configs with new fields and retained port default 443; refined descriptions and validation for webhook configuration fields. |
| operator/v1/types_clustermanager.go | Added `DefaultClusterManagerConfiguration` struct; updated `ClusterManagerDeployOption` to include `Default`; extended `WebhookConfiguration` with new fields (`HealthProbeBindAddress`, `MetricsBindAddress`, `HostNetwork`); introduced separate `DefaultWebhookConfiguration` (with `Port` default 9443) and `HostedWebhookConfiguration` (with required `Address` and `Port` default 443); changed `Address` to required only in Hosted mode. |
| operator/v1/zz_generated.deepcopy.go | Added deep copy methods for `DefaultClusterManagerConfiguration`, `DefaultWebhookConfiguration`, and `HostedWebhookConfiguration`; updated `ClusterManagerDeployOption` deep copy logic to handle new `Default` field. |
| operator/v1/zz_generated.swagger_doc_generated.go | Added SwaggerDoc methods for `DefaultClusterManagerConfiguration`, `DefaultWebhookConfiguration`, and `HostedWebhookConfiguration`; updated docs for `ClusterManagerDeployOption` and `WebhookConfiguration` to include new fields and detailed descriptions; removed `address` and `port` from base `WebhookConfiguration` Swagger docs and moved them to hosted/default specific docs. |
| test/integration/api/clustermanager_test.go | Replaced `WebhookConfiguration` with `HostedWebhookConfiguration` in Hosted mode tests; clarified default port expectations for Hosted mode; retained existing test logic and error checks. | 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (5)
🚧 Files skipped from review as they are similar to previous changes (5)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
849e553
to
b2da1b0
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/approve
only issue is cel validation is not added in the crd.
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: bhperry, qiujian16 The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
b859cf1
to
ab6dcf9
Compare
Signed-off-by: Ben Perry <[email protected]>
ab6dcf9
to
dc6f14d
Compare
} | ||
|
||
// WebhookConfiguration has two properties: Address and Port. | ||
// WebhookConfiguration represents customization of webhook servers |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
actually it is not WebhookConfiguration, I think we could also use this for controller to set healthiness and metrics endpoint?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
True. Maybe BindConfiguration
?
Realized there is an issue for Hosted mode. The Port field is only the external endpoint for k8s API to reach the validating webhook, but if you set HostNetwork then you would also want to control the internal port bind to avoid port collision on the host net.
Perhaps a better API would be something like this:
spec:
...
deployOption:
hosted:
workWebhookConfiguration:
port: 443
address: work.webhook.example.com
bindConfiguration:
port: 19443
healthProbeBindAddress: ":18000"
metricsBindAddress: ":18080"
hostNetwork: true
registrationWebhookConfiguration:
...
mode: Hosted
---
spec:
...
deployOption:
default:
workWebhookConfiguration:
bindConfiguration:
...
registrationWebhookConfiguration:
...
mode: Default
bindConfiguration would be optional and nullable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like controller servers work very differently from the webhooks. They use the openshift/library-go
controller builder, which only takes a single listen address:port. Whereas the webhooks use controller-runtime
which has separate binds for each. So I don't think it makes sense to re-use this configuration for controllers (unless they get migrated to controller-runtime in the future)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we do not need to consider how the implementation is when considering this API. The controller-runtime allows bind endpoint separately does not mean we need to support that in the API level. Is there scenario that we need to let metrics/healthiness bind to the different address?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well it's not just that it can bind separately, they are separate listeners. No option to share port with the webhook server. As a result, when using hostNetwork mode, it is important to have control over the binds.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand the port should be different, I am wondering if it is necessary to bind different HOST/IP for metrics/healthz endpoint.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. I figured if you can bind hostNet then it is reasonable to allow fully configuring the bind for metrics/healthz. Not strictly necessary though (I had no intention of using it, I'm just binding ":" for all of these).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
right, I think it is sufficient to specify port for each
PR needs rebase. 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. |
Summary
API changes to support customizing webhook ports and hostNetwork in Default installation mode
Related issue(s)
open-cluster-management-io/ocm#1035
Summary by CodeRabbit