Kubernetes控制平面组件:APIServer 基于匿名请求的认证机制详解

云原生学习路线导航页(持续更新中)

本文主要对 kubernetes API Server 认证机制中的 基于匿名请求的认证进行介绍,包括 匿名请求 的设计理念、实现原理、认证流程,以及在 Kubernetes 中的具体应用

1.基本概念

1.1.匿名请求定义

  • 当客户端访问 Kubernetes API Server 时,若请求中 未携带任何认证信息(如证书、Token、Basic Auth 等),该请求会被标记为 匿名请求

1.2.默认行为

  • Kubernetes 1.6+:默认启用匿名请求认证(--anonymous-auth=true
  • 身份标识
    • 用户名:system:anonymous
    • 用户组:system:unauthenticated

2.认证流程

+------------+       +--------------+
|   Client   |       | API Server   |
+------------+       +--------------+
      | 1. 无认证请求       |
      |-------------------->|
      |                     | 2. 认证链检查
      |                     |--+ 
      |                     |  | 所有认证方法失败
      |                     |<-+
      | 3. 标记为匿名用户    |
      |<---------------------|

3.操作示例

3.1.允许匿名请求(默认配置)

3.1.1.直接访问 API

# 不携带任何认证信息
curl -k https://<API_SERVER_IP>:6443/api/v1/namespaces/default/pods

响应示例

{
  "kind": "Status",
  "apiVersion": "v1",
  "status": "Failure",
  "message": "pods is forbidden: User \"system:anonymous\" cannot list resource \"pods\" in API group \"\" in the namespace \"default\"",
  "reason": "Forbidden",
  "details": { "kind": "pods" },
  "code": 403
}

说明:认证通过但授权(RBAC)拒绝

3.1.2.查看认证用户信息

kubectl create clusterrolebinding anonymous-access \
  --clusterrole=view \
  --user=system:anonymous

curl -k https://<API_SERVER_IP>:6443/api/v1/namespaces/default/pods

此时将返回 Pod 列表(需提前创建测试 Pod)

3.2.禁用匿名请求

3.2.1.修改 API Server 配置

# 编辑 /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --anonymous-auth=false  # 添加此参数

3.2.2.验证禁用效果

curl -k https://<API_SERVER_IP>:6443/api/v1/namespaces/default/pods

响应示例

{
  "kind": "Status",
  "apiVersion": "v1",
  "status": "Failure",
  "message": "Unauthorized",
  "code": 401
}

4.安全建议

4.1.生产环境推荐配置

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: deny-anonymous-access
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin  # 根据实际情况调整
subjects:
- kind: User
  name: system:anonymous
  apiGroup: rbac.authorization.k8s.io

通过 RBAC 显式拒绝匿名用户的所有权限

4.2.审计配置

# /etc/kubernetes/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
  users: ["system:anonymous"]  # 记录匿名请求审计日志

5.关键排查命令

# 查看 API Server 匿名认证配置
ps aux | grep kube-apiserver | grep anonymous-auth

# 检查匿名请求的 RBAC 权限
kubectl auth can-i list pods --as=system:anonymous
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值