Fix parsing Kubernetes Resources without GroupVersionKind#38956
Merged
Conversation
Kubernetes API has a concept of `GroupVersionKind` where each payload includes the type identification `(group, version, kind)` that uniquely identifies the resource withing Kubernetes itself. Kubernetes API and `kubectl` always honor this information but custom tools and tools that use equivalents of `json.Marshal` without setting the `GVK` data fail to be decoded when decoding `CREATE` requests targeted to support kinds. This PR aims to fix that by providing an hint to the Kubernetes decoder that aims to be used as fallback GVK when unmarshaling a payload without the specification. The hint is provided by the API request path that Teleport extracts from the request URI. Fixes #37972 Signed-off-by: Tiago Silva <tiago.silva@goteleport.com>
AntonAM
approved these changes
Mar 5, 2024
Contributor
Author
|
@zmb3 @fheinecke friendly ping |
zmb3
approved these changes
Mar 10, 2024
This was referenced Mar 10, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Kubernetes API has a concept of
GroupVersionKindwhere each payload includes the type identification(group, version, kind)that uniquely identifies the resource structure withing Kubernetes itself.Kubernetes API and
kubectlalways honor this information but custom tools and tools that use equivalents ofjson.Marshalwithout setting theGVKdata fail to be decoded when decodingCREATErequests targeted to support kinds through Teleport.This PR aims to fix that by providing an hint to the Kubernetes decoder that aims to be used as fallback GVK when unmarshaling a payload without the specification.
The hint is provided by the API request path that Teleport extracts from the request URI.
Changelog: Resolved sporadic errors caused by requests fail to comply with Kubernetes API spec by not specifying resource identifiers.
Fixes #37972