-
-
Notifications
You must be signed in to change notification settings - Fork 16
feat!: Add working conversion webhook with cert rotation #1066
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?
Conversation
pub const WEBHOOK_CA_LIFETIME: Duration = Duration::from_minutes_unchecked(3); | ||
pub const WEBHOOK_CERTIFICATE_LIFETIME: Duration = Duration::from_minutes_unchecked(2); | ||
pub const WEBHOOK_CERTIFICATE_ROTATION_INTERVAL: Duration = Duration::from_minutes_unchecked(1); |
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.
reminder to bump these before merging. Currently they are so low for easy testing
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.
Partial review, I didn't look at the CertificateResolver
yet.
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.
We are mostly there, just some small things left.
/// The environment the operator is running in, notably the namespace and service name it is | ||
/// reachable at. | ||
pub operator_environment: OperatorEnvironmentOptions, |
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.
note: Let's avoid pulling in a type from stackable_operator
here. Instead, split it into two separate fields.
/// The environment the operator is running in, notably the namespace and service name it is | |
/// reachable at. | |
pub operator_environment: OperatorEnvironmentOptions, | |
pub namespace: String, | |
pub service_name: String, |
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.
Hmm, I intentionally sticked with the struct that describes the k8s env. I understand your concerns, but I also really don't like too many function arguments when there is a perfectly fine struct for what we want as "information about the environment of the operator".
Maybe tomorrow we need the k8s version or if we are on OpenShift or whatnot
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.
The comment of the field perfectly sums this up:
The environment the operator is running in, notably the namespace and service name it is reachable at.
Currently, we only need the namespace and the service name. That's it. Why are we optimizing for something which might or might not come in the future? Regarding how the crates are currently structured, I would like to avoid more entanglement between those.
As discussed multiple times already, this needs better structure in the long run, which I can hopefully pick up soon.
I also really don't like too many function arguments
There is only a single parameter: ConversionWebhookOptions
. Everything is contained in there. And having two fields instead of one, doesn't really justify mixing even more types between crates (which are not designed for that currently).
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.
Switched to separate namespace and service_name in 568cda7
@@ -2,4 +2,5 @@ | |||
//! purposes. | |||
mod conversion; | |||
|
|||
pub use conversion::*; | |||
pub use conversion::{ConversionWebhookError, ConversionWebhookOptions, ConversionWebhookServer}; | |||
pub use kube::core::conversion::ConversionReview; |
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.
note: This is already re-exported via stackable_webhook::servers::conversion::ConversionReview
. As such, please remove it from here again.
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.
Correct, removed in 8dc1235
let (cert, certified_key) = Self::generate_new_cert(subject_alterative_dns_names.clone()) | ||
.await | ||
.context(GenerateNewCertificateSnafu)?; | ||
|
||
cert_tx | ||
.send(cert) | ||
.await | ||
.map_err(|_err| CertificateResolverError::SendCertificateToChannel)?; |
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.
note: I feel like this can be moved into its own function, because we repeat the exact same code below.
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.
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.
Any reason why you didn't include the certificate generation in that function as well? That's basically also the same code across two functions.
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.
Pls have a look at 39fe001
Co-authored-by: Techassi <[email protected]>
Co-authored-by: Techassi <[email protected]>
Co-authored-by: Techassi <[email protected]>
Description
Part of stackabletech/issues#642
An working example usage can be found in stackabletech/zookeeper-operator#958 (mainly look at
rust/operator-binary/src/main.rs
)Definition of Done Checklist
Author
Reviewer
Acceptance