Kubelet 的认证授权

Kubelet 的认证与授权机制是保障 Kubernetes 节点安全的核心环节,合理配置可有效防止未授权访问和敏感操作风险。

概述

Kubelet 作为 Kubernetes 集群中的关键组件,其 HTTPS 端点暴露了访问敏感数据的 API,并允许在节点和容器内执行各种权限级别的操作。为了确保集群安全,必须对这些端点进行适当的认证和授权配置。

本文档详细介绍如何配置 Kubelet 的认证和授权机制,以保护集群的安全性。

Kubelet 认证配置

Kubelet 支持多种认证方式,合理配置可有效防止未授权访问。

匿名访问控制

默认情况下,Kubelet 会将所有未通过其他身份验证方法的请求视为匿名请求,并授予 system:anonymous 用户名和 system:unauthenticated 组。

如需禁用匿名访问并对未经身份验证的请求返回 401 Unauthorized 响应:

kubelet --anonymous-auth=false

X.509 客户端证书认证

通过 X.509 客户端证书可实现强身份认证。

Kubelet 配置:

kubelet --client-ca-file=/path/to/ca-bundle.crt

API Server 配置:

kube-apiserver --kubelet-client-certificate=/path/to/client.crt \
               --kubelet-client-key=/path/to/client.key

Bearer Token 认证

Kubelet 支持 API Bearer Token(包括 Service Account Token)认证。

前置条件:

  • 确保 API Server 中启用了 authentication.k8s.io/v1 API 组

Kubelet 配置:

kubelet --authentication-token-webhook \
        --kubeconfig=/path/to/kubeconfig \
        --require-kubeconfig

配置完成后,Kubelet 会通过调用 API Server 的 TokenReview API 来验证 Bearer Token 并获取用户信息。

Kubelet 授权配置

Kubelet 支持多种授权模式,推荐使用 Webhook 授权实现细粒度访问控制。

默认授权模式

Kubelet 默认使用 AlwaysAllow 授权模式,允许所有经过身份验证的请求(包括匿名请求)。

Webhook 授权模式

为实现细粒度的访问控制,建议将授权委托给 API Server。

前置条件:

  • 确保 API Server 中启用了 authorization.k8s.io/v1 API 组

Kubelet 配置:

kubelet --authorization-mode=Webhook \
        --kubeconfig=/path/to/kubeconfig \
        --require-kubeconfig

配置完成后,Kubelet 会通过调用 API Server 的 SubjectAccessReview API 来确定每个请求的授权状态。

请求属性映射

Kubelet 授权时会将 HTTP 请求映射为标准的 Kubernetes 资源操作属性。

HTTP 动词映射

下表展示了 HTTP 动词与 Request 动词的对应关系:

HTTP 动词Request 动词
POSTcreate
GET, HEADget
PUTupdate
PATCHpatch
DELETEdelete
表 1: Kubelet HTTP 动词与 Request 动词映射

资源路径映射

不同的 Kubelet API 路径对应不同的资源和子资源:

Kubelet API 路径资源子资源
/stats/*nodesstats
/metrics/*nodesmetrics
/logs/*nodeslog
/spec/*nodesspec
其他所有路径nodesproxy
表 2: Kubelet API 路径与资源映射

注意事项:

  • Namespace 和 API 组属性始终为空字符串
  • 资源名称始终为 Kubelet 对应的 Node API 对象名称

授权权限配置

当使用 Webhook 授权模式时,需要为相关用户授予如下 RBAC 权限:

# 必需的 RBAC 权限
- verb: "*"
  resource: "nodes"
  subresource: "proxy"
- verb: "*"
  resource: "nodes"
  subresource: "stats"
- verb: "*"
  resource: "nodes"
  subresource: "log"
- verb: "*"
  resource: "nodes"
  subresource: "spec"
- verb: "*"
  resource: "nodes"
  subresource: "metrics"

最佳实践

为保障 Kubelet 端点安全,建议遵循以下最佳实践:

建议类别具体建议
认证配置生产环境禁用匿名访问
授权模式使用 Webhook 授权实现细粒度控制
证书管理定期轮换客户端证书
日志监控监控访问日志,及时发现异常行为
权限分配遵循最小权限原则,仅授予必要权限
表 3: Kubelet 认证与授权最佳实践

总结

通过合理配置 Kubelet 的认证和授权机制,可以有效保护 Kubernetes 集群的安全性,防止未经授权的访问和操作。建议结合实际业务需求,采用多重防护措施,持续优化节点安全策略。

参考文献

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区