-
Couldn't load subscription status.
- Fork 73
Add Pool-based Rack Awareness proposal #184
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
Signed-off-by: Griffin Davis <gcd@ibm.com>
| Many users may require adherence to the [separation of duty security principle](https://csrc.nist.gov/glossary/term/separation_of_duty) | ||
| under which application pods processing user data should not have access to the Kubernetes API. | ||
| All usage of the Kubernetes API must then be delegated to the operator. |
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.
Sorry, but there is nothing like that being said in the link.
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 linked definition from NIST discussed separation of duty at a higher level, not specific to Kubernetes.
In our specific Kubernetes case, we are separating two different roles for two different entities:
- Operators which act on the Kubernetes API and therefore have associated RBAC
- Operands which process/manage data and do not have access to the Kubernetes API
If you feel the link is misleading, I can remove it.
The underlying principle is one IBM has discussed with many enterprise clients in highly regulated industries (eg. financial services, telecommunications, etc). I'm not sure if the specific requirements are publicly documented by those companies.
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 do think it is absolutely misleading. And I do not think it is any principle Strimzi aims to follow.
Also, keep in mind that the broker is also reading Kubernetes Secrets for example. So even if you want to follow your interpretation of this rule, this proposal won't help you much.
| spec: | ||
| kafka: | ||
| rack: | ||
| idType: pool-name |
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.
If there would be some reasonable justification for changing this, then it would make much more sense to just configure it in a separate field then hardcode it to node pool name which is very limited.
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.
Would this involve moving the API change to the KafkaNodePool CR and allow specifying an arbitrary rack ID for each pool?
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'm not sure what you mean by that, sorry. But the node pool name is clearly not the right determinant as there would be many reasons for multiple pools in a single zone.
| This proposal maintains CRD compatibility by introducing a new, optional field. | ||
| All existing configurations would continue to be valid and maintain their existing behavior. | ||
|
|
||
| ## Rejected alternatives |
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.
Please keep in mind that there are also some new Kubernetes features coming to the downward API as discussed in strimzi/strimzi-kafka-operator#11504. If nothing else, that should be mentioned here. But likely we might want to wait for how it turns out.
This PR introduces a proposal for Kafka rack awareness where node pools are assigned to racks/availability zones.
I have created a prototype implementation here. I have used this prototype with the following configuration:
Kafka CR:
Three KafkaNodePool CRs, one for each zone, according to the following format:
An example using five brokers and three zones:
Sample broker config: