Quiz Report Card: Kubelet API Rights
Date: 2026-03-09 | Qwen 3.6 Plus added: 2026-04-20 | DeepSeek V4 Pro added: 2026-04-24 | DeepSeek V4 Flash added: 2026-04-24 | GPT 5.5 added: 2026-04-25 | Kimi K2.6 added: 2026-04-26 | Qwen3.6-35b-a3b (Local) added: 2026-05-03 | Gemma 4 31B (Local) added: 2026-05-03 | Claude Opus 4.8 added: 2026-05-31 Question: When communicating directly with the Kubelet API on 10250/TCP using a valid client certificate and using webhook authorization, what RBAC rights to the main Kubernetes API are needed to allow a user to get pod lists, metrics and log information from the Kubelet? Additionally what rights are needed to execute a command in a pod running on that host via the Kubelet API?
Reference Answer
Per the Kubernetes documentation on kubelet authorization, when webhook authorization is enabled, the kubelet sends SubjectAccessReview requests to the API server. The kubelet maps its endpoints to node subresources, not standard API resources:
| Kubelet API | Resource | Subresource |
|---|---|---|
/stats/* |
nodes | stats |
/metrics/* |
nodes | metrics |
/logs/* |
nodes | log |
/spec/* |
nodes | spec |
/checkpoint/* |
nodes | checkpoint |
all others (including /pods, /exec, /run) |
nodes | proxy |
Read operations (pod lists, metrics, logs)
- Pod lists (
/pods):getonnodes/proxy - Metrics (
/metrics/*):getonnodes/metrics - Stats (
/stats/*):getonnodes/stats - Logs (
/logs/*):getonnodes/log
Exec (tricky)
- Exec/run: Maps to
nodes/proxy— and critically, the verb isget, notcreate. The documentation explicitly warns: “nodes/proxy with get permission is NOT read-only. It authorizes executing commands in any container running on the node, since some endpoints support Websocket protocols via HTTP GET requests.”
Fine-grained authorization (bonus)
Available from Kubernetes 1.33 (beta), the KubeletFineGrainedAuthz feature gate adds dedicated subresources (e.g., nodes/pods, nodes/healthz, nodes/configz) so that not everything falls through to the overly-broad nodes/proxy.
Scoring Criteria
- Node subresource model: Does the response understand that kubelet webhook authorization checks node subresources (
nodes/proxy,nodes/metrics,nodes/stats,nodes/log), not standard API resources (pods,pods/log,pods/exec)? - Correct read mappings: Are the specific subresources and verbs correct for each read operation?
- Exec mapping: Does it identify
nodes/proxyas the resource? Bonus: does it identifyget(notcreate) as the sufficient verb? - Fine-grained authorization: Any mention of K8s 1.33 fine-grained kubelet authorization is a bonus.
- Accuracy: Are there fabricated or incorrect claims?
Results Summary
| Model | Score | Node Subresource Model | Read Mappings | Exec Resource | Exec Verb (GET) | Fine-Grained Auth | Major Errors |
|---|---|---|---|---|---|---|---|
| anthropic/claude-opus-4.7 | 6/10 | Correct | Correct | Correct | No (says create) | No | nodes/pods confusion |
| openai/gpt-5.4 | 7/10 | Correct | Correct | Correct | No (says create) | No | None |
| google/gemini-3-flash-preview | 7/10 | Mostly correct | Correct | Correct | No (says create+get) | No | None significant |
| anthropic/claude-sonnet-4.6 | 6/10 | Correct | Correct | Correct | No (says create) | No | Fabricated checks |
| deepseek/deepseek-v3.2 | 3/10 | Wrong | Mostly wrong | Wrong | No | No | Wrong model |
| minimax/minimax-m2.5 | 2/10 | Wrong | Wrong | Wrong | No | No | Wrong model |
| minimax/minimax-m2.7 | 8/10 | Partial | Yes | pods/exec | create (wrong) | No | None |
| qwen/qwen3.6-plus | 5/10 | Wrong | Mostly wrong | Wrong (pods/exec) | No (says create) | No | Wrong model |
| deepseek/deepseek-v4-pro | 4/10 | Partial | Mostly wrong | Wrong (create) | No | No | Exec verb wrong |
| deepseek/deepseek-v4-flash | 3/10 | Wrong | Mostly wrong | Wrong | No | No | Fabricated resources |
| moonshotai/kimi-k2.6 | 7/10 | Correct | Correct | Correct | No (says create) | No | Exec verb wrong |
| openai/gpt-5.5 | 6/10 | Correct | Correct | Correct | No (says create) | No | Exec verb wrong |
| qwen/qwen3.6-35b-a3b (LOCAL) | 4/10 | No | No | No | Fundamental misunderstanding of kubelet webhook auth | ||
| anthropic/claude-opus-4.8 | 5/10 | Partial | Partial | Wrong (create) | No | No | Invented subresources |
| google/gemma-4-31b (LOCAL) | 5/10 | Partial | Partial | Wrong | Calls SA signer a CA; confused authorization model |
Detailed Analysis
anthropic/claude-opus-4.7 — 6/10
Strengths:
- Correctly explains webhook authorization delegation model
- Identifies nodes/metrics, nodes/stats, nodes/log subresources
- Good security notes about the power of nodes/proxy
Weaknesses:
- Exec verb wrong: States
createon nodes/proxy is needed for exec — should beget(WebSocket upgrade uses HTTP GET) - Confused mention of
nodes/podswhich is not a standard subresource - No mention of fine-grained authorization (Kubernetes 1.33 beta)
Comparison vs Opus 4.6 (7): Regression. Gets the exec verb wrong (create instead of get) and misses fine-grained authorization.
Notable: A rare regression from Opus 4.6. The exec verb error is shared by most models, but the nodes/pods confusion and missing fine-grained auth represent a step back from Opus 4.6’s cleaner response.
openai/gpt-5.4 — 7/10
Strengths:
- Correctly identifies that all kubelet authorization maps to node subresources:
nodes/proxy,nodes/stats,nodes/log,nodes/spec,nodes/metrics - Clean, accurate RBAC examples with the right resource names and
getverb for all read operations - Correctly identifies exec maps to
nodes/proxy - Does not fabricate additional kubelet-side checks (no spurious
pods/logorpods/execclaims) - Concise and practical
Weaknesses:
- Says exec requires
createonnodes/proxy— the docs state thatgetalone is sufficient due to WebSocket connections using HTTP GET - No mention of fine-grained authorization (K8s 1.33)
- Includes
nodes/specwhich wasn’t asked about (minor, not an error)
Notable: The cleanest and most accurate response for the standard kubelet authorization model. The only substantive error is the exec verb.
google/gemini-3-flash-preview — 7/10
Strengths:
- Correctly maps most operations to node subresources
- Excellent insight: Explicitly notes that
pods/execis for the API server path, not for direct kubelet access — “It is a common mistake to try and grant permissions onpods/exec.” This is the best single observation across all responses. - Correctly identifies exec maps to
nodes/proxy - Mentions
system:node-adminbuilt-in role as a practical shortcut - Good explanation of authentication vs authorization flow
Weaknesses:
- Lists exec verb as
create(andget) — should begetonly - Mentions
nodes/podsas an alternative for pod lists without clarifying this only exists with fine-grained authorization (K8s 1.33+) - RBAC example uses
nodes/podswhich doesn’t exist in standard kubelet authorization - No mention of fine-grained authorization despite referencing
nodes/pods
Notable positive: The explicit callout that pods/exec is wrong for direct kubelet access demonstrates genuine understanding of the two different authorization paths (API server vs kubelet direct). This is the most insightful observation across all five responses.
anthropic/claude-sonnet-4.6 — 6/10
Strengths:
- Correctly identifies the node subresource model:
nodes/proxy,nodes/metrics,nodes/stats,nodes/log - Provides the accurate endpoint-to-subresource mapping table
- Correctly identifies exec maps to
nodes/proxy - Good security notes about
nodes/proxybeing highly privileged
Weaknesses:
- Fabricates additional kubelet-side checks: Claims the kubelet performs a second authorization check on
pods/logfor container logs andpods/execfor exec operations. This is incorrect — the kubelet only checks node-level resources. It does not perform namespace-scoped pod-level authorization. - Lists exec verbs as
get,post,create— onlygetis needed - The fabricated dual-check model (node resource + pod resource) would mislead administrators into creating unnecessary RBAC rules and misunderstanding the kubelet’s security model
Notable negative: The fabricated pods/log and pods/exec checks are significant because they misrepresent the kubelet’s authorization model. An administrator reading this might incorrectly believe the kubelet provides namespace-scoped pod-level authorization, when in reality it only checks broad node-level permissions. This is exactly the security gap that fine-grained authorization (K8s 1.33) was designed to address.
deepseek/deepseek-v3.2 — 3/10
Strengths:
- Correctly identifies
nodes/statsfor the stats endpoint - Understands the webhook/SubjectAccessReview mechanism conceptually
- Correctly notes that pod log/exec authorization is namespaced (when going through the API server, though not via kubelet)
- Some useful practical caveats about real-world usage
Weaknesses:
- Fundamentally wrong authorization model: Maps
/podstopodsresource withlistverb instead ofnodes/proxywithget - Maps
/containerLogstopods/loginstead ofnodes/proxy(ornodes/logfor/logs/*) - Maps
/exectopods/execwithcreateinstead ofnodes/proxywithget - Confuses kubelet webhook authorization checks with standard Kubernetes API RBAC
- No mention of fine-grained authorization
Notable negative: The response conflates two different authorization paths — going through the API server (where pods/log, pods/exec are correct) vs going directly to the kubelet (where only node subresources are checked). This is a fundamental misunderstanding of how kubelet webhook authorization works.
minimax/minimax-m2.5 — 2/10
Strengths:
- Correctly describes the SubjectAccessReview mechanism at a conceptual level
- Authentication details (CN, O fields from certificates) are accurate
- Mentions webhook configuration requirement
Weaknesses:
- Completely wrong authorization model: Maps every operation to standard API resources:
- Pod lists →
podswithlist, watch— should benodes/proxywithget - Metrics →
nodeswithgetandmetrics.k8s.io/pods— should benodes/metricswithget - Logs →
pods/logwithget— should benodes/logwithget - Exec →
pods/execwithcreate— should benodes/proxywithget
- Pod lists →
- Does not understand that the kubelet maps endpoints to node subresources at all
- The
metrics.k8s.ioAPI group reference is for the metrics-server, not kubelet authorization - No mention of fine-grained authorization
Notable negative: This response would be correct if the question were about accessing pods through the Kubernetes API server. But the question specifically asks about communicating directly with the kubelet API, where an entirely different authorization model applies. The response demonstrates no understanding of kubelet-specific authorization.
minimax/minimax-m2.7 — 8/10
Strengths:
- Excellent structured table mapping kubelet API operations to RBAC resources and verbs
- Correctly identifies all standard verbs and the node subresource model
- Concrete YAML examples for ClusterRole and ClusterRoleBinding configurations
- Good checklist summary of required permissions
Weaknesses:
- Missed the websocket/GET on
nodes/proxytrick for exec — listscreateas the verb instead ofget - No mention of fine-grained authorization (
KubeletFineGrainedAuthzfeature gate, K8s 1.33+)
Notable: The best structured response of any model for this question, with clear tabular mappings that would be immediately useful for an administrator. Represents a dramatic improvement over MiniMax M2.5 (which scored 2/10 with a completely wrong authorization model). Highest score on kubelet API across all models, tied with GPT 5.4 and Gemini 3 Flash but earning the edge through superior presentation.
qwen/qwen3.6-plus — 5/10
Strengths:
- Correctly explains webhook authorization delegation model (kubelet sends SubjectAccessReview)
- Mentions
nodes/metricsandnodes/statsfor metrics endpoints - Good structural explanation of namespace scoping vs cluster scoping
- Correct note about user identity mapping from certificate CN/O fields
Weaknesses:
- Fundamentally wrong authorization model for most endpoints: Maps pod lists to standard
podsresource withlist/getverbs, pod logs topods/log, and exec topods/exec— these are API server RBAC resources, not kubelet webhook authorization checks - Exec verb wrong: States
createonpods/execis needed — should begetonnodes/proxy - The version caveat claiming “Older versions used
nodes/proxy” is backwards —nodes/proxyis the current and correct resource for kubelet authorization - No mention of fine-grained authorization (K8s 1.33)
Notable: The response conflates API server RBAC (where pods, pods/log, pods/exec are correct) with kubelet webhook authorization (where only node subresources are checked). Correctly mentions nodes/metrics and nodes/stats for some endpoints but inconsistently applies the wrong model for pods, logs, and exec.
deepseek/deepseek-v4-pro — 4/10
Strengths:
- Correctly identifies webhook authorization delegation model
Weaknesses:
- Critical error on exec verb: Claims exec requires CREATE on nodes/proxy — the correct answer is GET due to WebSocket implementation
- No mention of fine-grained authorization (KubeletFineGrainedAuthz feature gate, K8s 1.33+)
- Partially mixes API server and kubelet authorization models
Notable: A regression from DeepSeek V3.2’s already-low score (3/10) to 4/10 — marginal improvement. The exec verb error is shared by most models, but the lack of fine-grained authorization mention and partial model confusion limit the score.
deepseek/deepseek-v4-flash — 3/10
Strengths:
- Understands the concept of webhook authorization delegation
Weaknesses:
- Fabricates incorrect resource strings rather than using the correct node subresource model
- Does not correctly map kubelet endpoints to
nodes/proxy,nodes/metrics,nodes/stats,nodes/log - Misses the GET on
nodes/proxytrick for exec operations - No mention of fine-grained authorization (K8s 1.33)
Notable: Matches DeepSeek V3.2’s score of 3/10 — no improvement on this question between generations. Both DeepSeek non-Pro models fundamentally confuse the kubelet webhook authorization model with standard API server RBAC. V4 Pro scored marginally better (4/10) but the entire DeepSeek family struggles on this question.
openai/gpt-5.5 — 6/10
Strengths:
- Correctly identifies the node subresource model from the outset: “the Kubelet asks the main Kubernetes API server to authorize the client identity using RBAC against Node subresources”
- All four node subresources correctly listed:
nodes/proxy,nodes/metrics,nodes/stats,nodes/logwith correctgetverb for read operations - Clean YAML examples for a
kubelet-readClusterRole — immediately usable - Correctly maps
/podstonodes/proxyand/exectonodes/proxy - Good practical note about limiting to specific nodes using
resourceNames
Weaknesses:
- Exec verb wrong: States
createonnodes/proxyis needed for exec — the correct answer isget(WebSocket upgrade uses HTTP GET). Acknowledges that “GET-based WebSocket upgrade” may also needget, but treatscreateas the primary verb - No mention of fine-grained authorization (
KubeletFineGrainedAuthzfeature gate, K8s 1.33+ beta)
Notable: Gets the node subresource model completely right, matching GPT 5.4 and the Anthropic models on the fundamental authorization model. The exec verb error is shared by every model tested — no model has yet correctly identified get as sufficient for exec. The response is cleaner than GPT 5.4’s but scores lower due to less insightful analysis.
moonshotai/kimi-k2.6 — 7/10
Strengths:
- Correctly identifies the node subresource model for kubelet webhook authorization
- Correct read mappings for nodes/proxy, nodes/metrics, nodes/stats, nodes/log
- Correctly maps exec to nodes/proxy
Weaknesses:
- Exec verb wrong: States
createon nodes/proxy is needed for exec — should beget(WebSocket upgrade uses HTTP GET) - No mention of fine-grained authorization (KubeletFineGrainedAuthz feature gate, K8s 1.33+)
Notable: Matches GPT 5.4 and Gemini 3 Flash at 7/10 with a clean understanding of the node subresource model. Like every other model tested, gets the exec verb wrong.
qwen/qwen3.6-35b-a3b (LOCAL) — 4/10
Strengths:
- Understands the concept of webhook authorization delegation at a high level
Weaknesses:
- Opens by saying “no main API RBAC required” — fundamentally wrong. Kubelet webhook authorization delegates to the API server via SubjectAccessReview, which checks RBAC on node subresources
- Doesn’t know kubelet webhook mode delegates to SubjectAccessReview on nodes subresources
- Never mentions nodes/log, nodes/metrics, nodes/proxy — the core of kubelet webhook authorization
- Misses fine-grained kubelet authorization entirely
- No mention of the exec verb trick (GET on nodes/proxy)
Notable: The weakest understanding of the kubelet webhook authorization model among recent models. The fundamental error of claiming “no main API RBAC required” shows a gap in understanding how kubelet webhook auth works — it specifically requires RBAC on the main API server. Matches DeepSeek V4 Pro at 4/10.
google/gemma-4-31b (LOCAL) — 5/10
Strengths:
- Understands the webhook authorization delegation model at a conceptual level
- Identifies some node subresources for read operations
- Mentions
nodes/metricsandnodes/statsfor metric endpoints
Weaknesses:
- Partially conflates API server RBAC with kubelet webhook authorization — maps some operations to standard pod resources rather than node subresources exclusively
- Exec verb wrong — states
createonnodes/proxyis needed for exec (should begetdue to WebSocket implementation) - Incomplete mapping of all kubelet endpoints to their correct node subresources
- No mention of fine-grained authorization (KubeletFineGrainedAuthz feature gate, K8s 1.33+)
Notable: A slight improvement over Qwen-35b (4/10) but still below the cluster of GPT 5.4, Gemini 3 Flash, and Kimi K2.6 at 7/10. The model has partial knowledge of the node subresource model but doesn’t apply it consistently. The exec verb error is shared by nearly every model tested.
anthropic/claude-opus-4.8 — 5/10
Strengths:
- Understands the webhook authorization delegation model at a conceptual level
- Identifies some node subresources for read operations
Weaknesses:
- Exec verb wrong: Claims
createon nodes/proxy is needed for exec — the correct answer isget(WebSocket upgrade uses HTTP GET) - Invented subresources: Claims
nodes/statsandnodes/metricsexist as separate subresources when the kubelet actually maps/stats/*and/metrics/*to those, but also fabricates other subresource mappings - No mention of fine-grained authorization (KubeletFineGrainedAuthz feature gate, K8s 1.33+)
- Partially conflates API server RBAC with kubelet webhook authorization
Comparison vs Opus 4.7 (6): Regression. The invented subresources and continued exec verb error bring the score below Opus 4.7’s cleaner response.
Notable: A regression from Opus 4.7 (6/10). The kubelet webhook authorization model continues to be a weak spot for Anthropic models. The exec verb error is shared by every model tested, but the invented subresources are a new issue for the Anthropic family.
Key Findings
-
The node subresource model is the key differentiator: Several models (Claude, GPT 5.4, Gemini 3 Flash) correctly understood that kubelet webhook authorization checks node subresources. Qwen 3.6 Plus partially mixed API server and kubelet models. MiniMax M2.5 and DeepSeek V3.2 mapped everything to standard API resources, which is fundamentally wrong for direct kubelet access.
-
No model got the exec verb right: The documentation explicitly warns that
getonnodes/proxyis not read-only due to WebSocket protocols. All five models either saidcreateor includedcreatealongsideget. This confirms the scoring notes’ prediction that models are unlikely to get this right. -
No model mentioned fine-grained authorization: The
KubeletFineGrainedAuthzfeature gate (K8s 1.33 beta) was not mentioned by any model, missing the bonus scoring opportunity. -
Fabricated checks are worse than missing information: Claude’s response fabricated additional kubelet-side checks on
pods/logandpods/execthat don’t exist. While it got the node-level mappings right, the fabricated dual-check model actively misleads about the kubelet’s security properties. -
Gemini 3 Flash produced the best single insight: Explicitly warning that
pods/execis a common mistake for direct kubelet access demonstrates deeper understanding than any other response, even though the model still got the exec verb wrong. -
API server vs kubelet confusion: Both MiniMax M2.5 and DeepSeek V3.2 answered as if the question were about API server RBAC, not kubelet webhook authorization. This suggests these models lack specific training data about kubelet internals.