认证

开启 TLS 时,所有的请求都需要首先认证。Kubernetes 支持多种认证机制,并支持同时开启多个认证插件(只要有一个认证通过即可)。如果认证成功,则用户的 username 会传入授权模块做进一步授权验证;而对于认证失败的请求则返回 HTTP 401。

Kubernetes 不直接管理用户

虽然 Kubernetes 认证和授权用到了 username,但 Kubernetes 并不直接管理用户,不能创建 user 对象, 也不存储 username。但是 Kubernetes 提供了 Service Account,用来与 API 交互。

目前,Kubernetes 支持以下认证插件:

  • X509 证书

  • 静态 Token 文件

  • 引导 Token

  • 静态密码文件

  • Service Account

  • OpenID

  • Webhook

  • 认证代理

  • OpenStack Keystone 密码

Service Account

ServiceAccount 是 Kubernetes 自动生成的,并会自动挂载到容器的 /var/run/secrets/kubernetes.io/serviceaccount 目录中。

在认证时,ServiceAccount 的用户名格式为 system:serviceaccount:(NAMESPACE):(SERVICEACCOUNT),并从属于两个 group:system:serviceaccountssystem:serviceaccounts:(NAMESPACE)

认证代理

API Server 需要配置

Credential Plugin

从 v1.11 开始支持 Credential Plugin(Beta),通过调用外部插件来获取用户的访问凭证。这是一种客户端认证插件,用来支持不在 Kubernetes 中内置的认证协议,如 LDAP、OAuth2、SAML 等。它通常与 Webhook 配合使用。

Credential Plugin 可以在 kubectl 的配置文件中设置,比如

具体的插件开发及使用方法请参考 kubernetes/client-go

原文链接:认证

Last updated