已提供的答案是正确的,您在撰写此答案时无法撤销证书。
有人已经提到使用 serviceaccount 令牌并将 RBAC 角色分配给用户而不是组,我只想添加一些有关此方法为何有效的详细信息。
让我们从一些理论开始。用户验证的过程包括:
我们现在知道您无法更改身份验证级别,因为签名的证书无法撤销。
不过,您可以通过删除用户的权限来对授权级别进行更改(通过删除角色绑定或删除/更改 rbac 角色;请注意,可以将相同的 RBAC 角色分配给不同的用户/组)。
这种方法尽管是正确的,但可能会导致一些值得一提的安全问题。
为新用户签署证书时,您需要记住永远不要使用相同的用户名签署证书。一旦权限被撤销,您就不应该对新证书和关联的角色绑定使用相同的用户名(至少在旧证书过期之前),以确保旧证书在使用时不会被允许访问集群。
另外,我想向您建议另一种已经提出的解决方案:OpenID Connect 令牌 https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens
虽然 Kubernetes 不提供 OpenID Connect Identity Provider。您可以使用现有的公共 OpenID Connect 身份提供商(例如 Google)。或者,您可以运行自己的身份提供商,例如 dex 或 Keycloak
- dex https://dexidp.io/docs/kubernetes/
- keycloak https://www.keycloak.org/docs/latest/getting_started/
OpenId 令牌是生命周期非常短的令牌(例如 1 分钟),一旦您的 id_token 过期,kubectl 将尝试使用您的refresh_token 和 client_secret 刷新您的 id_token,并将refresh_token 和 id_token 的新值存储在您的 .kube/config 中。
即使此解决方案的配置比较复杂,但在需要管理大量用户时也值得考虑。
此外,与其他身份验证协议(LDAP、SAML、Kerberos、备用 x509 方案等)的集成可以使用验证代理 https://kubernetes.io/docs/reference/access-authn-authz/authentication/#authenticating-proxy or the 身份验证网络钩子 https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication