Do I Need to Validate Custom Resources in My Kubernetes Operator if I Have a Validating Webhook?

0
4
Asked By TechieNomad42 On

I'm currently developing a Kubernetes Operator that utilizes both a mutating webhook to set default values for missing fields and a validating webhook set to `failurePolicy: Fail`. This setup is supposed to ensure that Custom Resource Definitions (CRDs) have the correct structure before they're admitted into the cluster. I'm wondering if I still need to include additional validation checks within my Operator (especially in the Reconcile() function) to prevent potential issues like accessing uninitialized fields, such as `Spec.Foo[0]`. It seems like overkill to re-validate if the validating webhook already does its job, but I'm curious what the best practices are. Should I defensively check critical fields again even if the validating webhook is in place, or is that unnecessary? While I get that webhooks validate and operators handle reconciliation, I worry about relying solely on the webhook running properly. Any thoughts?

4 Answers

Answered By CautiousCoder55 On

Absolutely, revalidation is wise. You can't guarantee that the validating webhook has run successfully from the operator's end. There are ways to configure webhooks where they might pass validation even if they fail or aren't available, so being cautious and validating again ensures you're safe. The core idea in Kubernetes design is to never trust incoming data blindly.

Answered By WebDevWhiz On

I think of mutating and validating webhooks like form validation on websites. They help ensure that users follow the right steps, but you can’t always rely on them to be there, especially during upgrades. Here are some tips: 1. Use CEL expressions for validation annotations in CRD. 2. Make sure your controller also sets defaults if they aren’t present. 3. Understand what constitutes a breaking change in your API.

Answered By CodeWhisperer88 On

It’s definitely a good topic to think about. While the validating webhook should catch most issues, consider that if you're encounter upgrades, you might run into problems if the operator at version N tries to read a CR from version N+1. This can happen if fields are added without a corresponding version bump. If your defaulting relies mainly on implicit defaults, you might be fine without extra checks. But if you’ve added explicit defaults, things get trickier. In that case, revalidating in the operator can help avoid unforeseen issues.

DevGuru99 -

Solid points! Keeping track of API versions is crucial.

CloudNinja7 -

Yeah, versioning is key. It can prevent those nasty surprises!

Answered By SafetyFirst22 On

In theory, if the validating webhook fails, Kubernetes won't let the CR in at all, meaning your operator shouldn’t see any invalid data. So, on that front, full revalidation might seem redundant. But to play it safe, I still recommend implementing checks for nil values or empty fields just to avoid possible panics in your code.

Related Questions

LEAVE A REPLY

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.