Skip to content

Conversation

@pmengelbert
Copy link

Description

Issue

Closes: #

@k8s-ci-robot k8s-ci-robot added this to the 1.35 milestone Oct 28, 2025
@k8s-ci-robot k8s-ci-robot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Oct 28, 2025
@netlify
Copy link

netlify bot commented Oct 28, 2025

👷 Deploy Preview for kubernetes-io-vnext-staging processing.

Name Link
🔨 Latest commit 9050ec0
🔍 Latest deploy log https://app.netlify.com/projects/kubernetes-io-vnext-staging/deploys/6900b62167534c0008530da9

@k8s-ci-robot k8s-ci-robot added area/blog Issues or PRs related to the Kubernetes Blog subproject area/localization General issues or PRs related to localization labels Oct 28, 2025
@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label Oct 28, 2025
@k8s-ci-robot k8s-ci-robot requested a review from graz-dev October 28, 2025 12:25
@k8s-ci-robot k8s-ci-robot added language/en Issues or PRs related to English language language/fr Issues or PRs related to French language language/it Issues or PRs related to Italian language language/ko Issues or PRs related to Korean language language/pt Issues or PRs related to Portuguese language language/zh Issues or PRs related to Chinese language sig/docs Categorizes an issue or PR as relevant to SIG Docs. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. labels Oct 28, 2025
@netlify
Copy link

netlify bot commented Oct 28, 2025

Pull request preview available for checking

Built without sensitive environment variables

Name Link
🔨 Latest commit 7aad6a2
🔍 Latest deploy log https://app.netlify.com/projects/kubernetes-io-main-staging/deploys/6925cb1c906f4d0008014b83
😎 Deploy Preview https://deploy-preview-52987--kubernetes-io-main-staging.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@graz-dev
Copy link
Contributor

graz-dev commented Oct 29, 2025

Hi @pmengelbert thank you for opening this feture blog placeholder PR.
Feature Blog PRs should be opened against the main brach could you please fix it?

I also see 81 changed files, is it correct?

EDIT: can you also confirm that this is the feature blog placeholder PR for kubernetes/enhancements#3104?

@pmengelbert pmengelbert changed the base branch from dev-1.35 to main October 29, 2025 15:10
@k8s-ci-robot k8s-ci-robot added size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. and removed size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. labels Oct 29, 2025
@pmengelbert
Copy link
Author

Hi @pmengelbert thank you for opening this feture blog placeholder PR. Feature Blog PRs should be opened against the main brach could you please fix it?

fixed

I also see 81 changed files, is it correct?

that was because the branch was synced with main but the PR base was dev-1.35. Now that the PR base is main, that's fixed.

EDIT: can you also confirm that this is the feature blog placeholder PR for kubernetes/enhancements#3104?

Specifically, it's for the addition of the credential plugin allowlist, which was recently added to KEP 3104 via an update.

@graz-dev
Copy link
Contributor

Nice, thank you @pmengelbert !

@graz-dev
Copy link
Contributor

graz-dev commented Nov 17, 2025

Hi @pmengelbert 👋 v1.35 Communications team here,

@helayoty as author of #52897, I'd like you to be a writing buddy for @pmengelbert on this PR.

Please:

  • Review this PR, paying attention to the guidelines and review hints
  • Update your own PR based on any best practices you identify that should be applied
  • Remember to be compassionate with your fellow article author

@pmengelbert
Copy link
Author

pmengelbert commented Nov 17, 2025 via email

@k8s-ci-robot k8s-ci-robot removed the size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. label Nov 17, 2025
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Nov 17, 2025
@graz-dev
Copy link
Contributor

graz-dev commented Nov 18, 2025

Hi @pmengelbert the meaning of my message is heaving @helayoty as a buddy for you to review the content of this PR since it is the author of another feature blog (#52897).
Same for you on her PR :)

@graz-dev
Copy link
Contributor

Hi @pmengelbert 👋 -- this is Graziano (@graz-dev) from the v1.35 Communications Team!

Just a friendly reminder that we are approaching the feature blog "ready for review" deadline: Friday 21st November. We ask you to have the blog PR in non-draft state, and all write-up to be complete, so that we can start the blog review from SIG Docs Blog team.

If you have any questions or need help, please don't hesitate to reach out to me or any of the Communications Team members. We are here to help you!

@helayoty
Copy link
Member

/assign @helayoty

Copy link
Member

@helayoty helayoty left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments.

@@ -0,0 +1,105 @@
---
layout: blog
title: "Kubernetes v1.35: Protect your Machine from Untrusted Executables with the Credential Plugin Policy and Allowlist"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd recommend shorten the blog title.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment on lines 19 to 20
To give the user more control over what gets run on their system, kubernetes
1.35 adds the credential plugin policy and allowlist. This is available to all
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • What clients? Why does kuberc have more impact? This needs clarification or the statement should be reconsidered
  • What state is this feature at? (alpha, beta, GA)
  • Does user need to enable any feature gate/config? If yes, we need to mention it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree, only kubectl reads and knows kuberc, if there are other consumers, we don't quite care about that. So let's explicitly say kubectl here.

---

Did you know that `kubectl` can run arbitrary executables -- including shell
scripts -- with the full priveleges of the invoking user, and without your
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: priveleges-> privileges

you probably see the problem: do you know what your `kubeconfig` is running on
your machine? Do you trust the pipeline that generated your `kubeconfig`?

To give the user more control over what gets run on their system, kubernetes
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: kubernetes -> Kubernetes

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This statement is confusing, I'd probably say that SIG-Auth and SIG-CLI decided to add to Kubernetes 1.35.

Comment on lines 16 to 17
you probably see the problem: do you know what your `kubeconfig` is running on
your machine? Do you trust the pipeline that generated your `kubeconfig`?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd add few scenarios for the actual threats. (supply chain attacks, compromised pipelines, etc... )

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice, I agree.

Comment on lines +49 to +50
If you *don't know* whether or not you're using exec credential plugins, try
setting your policy to `DenyAll`:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any config user need to consider for the rollout?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather ask, how user can verify what breaks when they try to use it. Eg. if you run into issues try running kubectl get pods with increased logging --verbosity=5 or whatever log-level will provide sufficient information for the user to identify problems. Bonus points if you can point explicit log lines that will suggest what's failing and why.

@helayoty
Copy link
Member

of

Ah got it. Done :)

@helayoty
Copy link
Member

@graz-dev What is the right format to add blog file? Create a folder under /blog or just create md file? What is the difference?

Comment on lines 16 to 17
you probably see the problem: do you know what your `kubeconfig` is running on
your machine? Do you trust the pipeline that generated your `kubeconfig`?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice, I agree.

you probably see the problem: do you know what your `kubeconfig` is running on
your machine? Do you trust the pipeline that generated your `kubeconfig`?

To give the user more control over what gets run on their system, kubernetes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This statement is confusing, I'd probably say that SIG-Auth and SIG-CLI decided to add to Kubernetes 1.35.

Comment on lines 19 to 20
To give the user more control over what gets run on their system, kubernetes
1.35 adds the credential plugin policy and allowlist. This is available to all
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree, only kubectl reads and knows kuberc, if there are other consumers, we don't quite care about that. So let's explicitly say kubectl here.

Comment on lines +49 to +50
If you *don't know* whether or not you're using exec credential plugins, try
setting your policy to `DenyAll`:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather ask, how user can verify what breaks when they try to use it. Eg. if you run into issues try running kubectl get pods with increased logging --verbosity=5 or whatever log-level will provide sufficient information for the user to identify problems. Bonus points if you can point explicit log lines that will suggest what's failing and why.

If you *are* using credential plugins, you'll quickly find out what `kubectl` is
trying to execute. You'll get an error like the following.

> Unable to connect to the server: getting credentials: plugin "cloudco-login" not allowed: policy set to "DenyAll"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be move to previous paragraph where you covered DenyAll.

`exec.LookPath`. Both forms (basename and full path) are acceptable, but the
full path is preferable because it narrows the scope of allowed binaries even
further.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably worth explaining if glob-ing is allowed, and the different between AND-ed and OR-ed names, as described in #52877 where I asked for explicit examples.


## Get involved

The credential plugin policy and allowlist has reached beta, and we are very interested
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is misleading, let's be explicit that kuberc is beta, Plugin Policy is just part of the extensions happening while we're at beta. I don't want to give false impressions and confuse our users.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was not trying to intentionally mislead, it's an artifact of using the prior kuberc blog post as scaffolding. I'll fix this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This issue is not resolved yet. The blog should be explicit about this distinction to avoid confusing users.

@pmengelbert
Copy link
Author

Hi @pmengelbert the meaning of my message is heaving @helayoty as a buddy for you to review the content of this PR since it is the author of another feature blog (#52897). Same for you on her PR :)

My mistake! Thanks for the clarification. This is my first time through the process :)

@pmengelbert pmengelbert changed the title Placeholder for KEP-3104 Feature Blog entry KEP-3104 Feature Blog entry Nov 19, 2025
@graz-dev
Copy link
Contributor

@graz-dev What is the right format to add blog file? Create a folder under /blog or just create md file? What is the difference?

@helayoty if you need to add some images into the blog post the folder is the best option, if not you can go with a single md file in the blog folder

pmengelbert and others added 2 commits November 24, 2025 14:00
* Add note explaining that globbing does not work
* Add examples of threats
* Capitalize Kubernetes
* Clean up second paragraph
* * Clean up language
* * Describe how it's available to users of `client-go`
* * Clarify no feature gates are needed
* * Clarify this is a beta feature

Signed-off-by: Peter Engelbert <[email protected]>
@windsonsea
Copy link
Member

/remove-language fr it ko pt zh
/remove-area localization

@k8s-ci-robot k8s-ci-robot removed language/fr Issues or PRs related to French language language/it Issues or PRs related to Italian language language/ko Issues or PRs related to Korean language language/pt Issues or PRs related to Portuguese language language/zh Issues or PRs related to Chinese language area/localization General issues or PRs related to localization labels Nov 26, 2025
@pmengelbert
Copy link
Author

/assign @benjaminapetersen

Copy link
Member

@helayoty helayoty left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one nit comment.


## Get involved

The credential plugin policy and allowlist has reached beta, and we are very interested
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This issue is not resolved yet. The blog should be explicit about this distinction to avoid confusing users.

Comment on lines +23 to +24
To give the user more control over what gets run on their system, Sig-Auth and
Sig-CLI added the credential plugin policy and allowlist as a beta feature to
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
To give the user more control over what gets run on their system, Sig-Auth and
Sig-CLI added the credential plugin policy and allowlist as a beta feature to
To give the user more control over what gets run on their system, [SIG-Auth](https://git.k8s.io/community/sig-auth) and
[SIG-CLI](https://git.k8s.io/community/sig-cli) added the credential plugin policy and allowlist as a beta feature to

Copy link
Member

@lmktfy lmktfy Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even better: SIG Auth and SIG CLI (with a space); that's what our style guide recommends.

credentialPluginPolicy: DenyAll
```

### Selectively Allowing Plugins
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the below paragraph nicely flows into the debugging DenyAll, I'd probably move this paragraph start after the next paragraph. Specifically, after the example log message. So that you'll have:

### Selectively Allowing Plugins

What if you need the `cloudco-login` plugin...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) We prefer to write headings in sentence case.


## Get involved

The credential plugin policy and allowlist has reached beta, and we are very interested
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe reword it to something like:

Suggested change
The credential plugin policy and allowlist has reached beta, and we are very interested
The credential plugin policy is still under development, and we are very interested

this will drop the unnecessary confusion, and leave the necessary room for input. We have docs which explain the exact state of the feature, and we also mentioned that earlier in this document. So let's keep it simple 😄

@soltysh
Copy link
Contributor

soltysh commented Dec 3, 2025

/label tide/merge-method-squash

@k8s-ci-robot k8s-ci-robot added the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Dec 3, 2025

## How it works

A full description of this functionality is available [in our official documentation](/docs/reference/kubectl/kuberc/),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A full description of this functionality is available [in our official documentation](/docs/reference/kubectl/kuberc/),
A full description of this functionality is available in our [official documentation](/docs/reference/kubectl/kuberc/) for kuberc,

kind: Preference
credentialPluginPolicy: DenyAll
```

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
If you have more than one kubeconfig client context, it's a good
idea to check each of them before you continue.

credentialPluginPolicy: DenyAll
```

### Selectively Allowing Plugins
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) We prefer to write headings in sentence case.

(basename and full path) are acceptable, but the full path is preferable because
it narrows the scope of allowed binaries even further.

### Future Enhancements
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Future Enhancements
### Future enhancements


### Future Enhancements

Currently, an allowlist entry has only one field, `name`. In the future, we want
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Currently, an allowlist entry has only one field, `name`. In the future, we want
Currently, an allowlist entry has only one field, `name`. In the future, we (Kubernetes SIG CLI) want

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(avoid some people inferring that "we" means Microsoft)

you'd like to see it solve. Or, if you have the cycles to contribute one of the
above enhancements, they'd be a great way to get started contributing to
Kubernetes. Feel free to join in the discussion on slack:
- [SIG-CLI](https://kubernetes.slack.com/archives/C2GL57FJ4),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- [SIG-CLI](https://kubernetes.slack.com/archives/C2GL57FJ4),
- [#sig-cli](https://kubernetes.slack.com/archives/C2GL57FJ4),

above enhancements, they'd be a great way to get started contributing to
Kubernetes. Feel free to join in the discussion on slack:
- [SIG-CLI](https://kubernetes.slack.com/archives/C2GL57FJ4),
- [SIG-Auth](https://kubernetes.slack.com/archives/C0EN96KUY). No newline at end of file
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- [SIG-Auth](https://kubernetes.slack.com/archives/C0EN96KUY).
- [#sig-auth](https://kubernetes.slack.com/archives/C0EN96KUY).

To give the user more control over what gets run on their system, Sig-Auth and
Sig-CLI added the credential plugin policy and allowlist as a beta feature to
Kubernetes 1.35. This is available to all clients using the `client-go` library,
by filling out the `ExecProvider.PluginPolicy` struct on a REST config. To
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't especially linked to REST in the sense I'd recognize. Can we reword?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this particular element is discussing client-go API bits, maybe strictly pointing to
ExecProvider.PluginPolicy type: https://github.com/kubernetes/client-go/blob/master/tools/clientcmd/api/types.go#L290 would help clarifying this?

Sig-CLI added the credential plugin policy and allowlist as a beta feature to
Kubernetes 1.35. This is available to all clients using the `client-go` library,
by filling out the `ExecProvider.PluginPolicy` struct on a REST config. To
broaden the impact of this change, we made it easy to configure `kubectl` to use
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
broaden the impact of this change, we made it easy to configure `kubectl` to use
broaden the impact of this change, Kubernetes v1.35 also lets you manage this without
writing a line of application code. You can configure `kubectl` to enforce

?

@@ -0,0 +1,114 @@
---
layout: blog
title: "Kubernetes v1.35: Protect your Machine from Untrusted Executables with the Credential Plugin Policy"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be snappier; what do you think of:

Suggested change
title: "Kubernetes v1.35: Protect your Machine from Untrusted Executables with the Credential Plugin Policy"
title: "Kubernetes v1.35: Protection Against Trojan Horse Kubeconfig Files"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I personally prefer the original.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a different version where people who only read the title can easily figure out what they are skipping?

Copy link
Contributor

@soltysh soltysh Dec 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure I understand what you're asking for, but I believe the original title answers the question what, maybe we can expand on the where part. As in, adding "in kuberc", although that makes it too long and somewhat clumsy.

@graz-dev
Copy link
Contributor

Hi @pmengelbert, can you please implement the pending suggestions?
I'll be happy to merge it as a draft then.

Thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/blog Issues or PRs related to the Kubernetes Blog subproject cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. language/en Issues or PRs related to English language sig/docs Categorizes an issue or PR as relevant to SIG Docs. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants