当前位置: 首页 > news >正文

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

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

  • kubernetes学习系列快捷链接
    • Kubernetes架构原则和对象设计(一)
    • Kubernetes架构原则和对象设计(二)
    • Kubernetes架构原则和对象设计(三)
    • Kubernetes控制平面组件:etcd(一)
    • Kubernetes控制平面组件:etcd(二)
    • Kubernetes控制平面组件:etcd常用配置参数
    • Kubernetes控制平面组件:etcd高可用集群搭建
    • Kubernetes控制平面组件:etcd高可用解决方案
    • Kubernetes控制平面组件:Kubernetes如何使用etcd
    • kubectl 和 kubeconfig 基本原理
    • kubeadm 升级 k8s集群 1.17到1.20
    • Kubernetes常见问题解答
    • 查看云机器的一些常用配置

本文主要对 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

相关文章:

  • std::lock_guard、std::unique_lock、std::shared_lock
  • Oil Invoice Process
  • Linux内核,slub分配流程
  • 系统思考—结构影响行为
  • PyTorch v2.6 Overview
  • springboot+dubbo+zookeeper的注册服务和调用实践
  • vue2.x 中子组件向父组件传递数据主要通过 $emit 方法触发自定义事件方式实现
  • DeepSeek最新开源动态:核心技术公布
  • 创建Linux虚拟环境并远程连接
  • 大屏自适应终极方案:基于比例缩放的完美适配实践(Vue3版)
  • 加油站(力扣134)
  • Gemini 2.0助力科学突破,AI联合科学家系统登场
  • 小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试等,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
  • git从本地其他设备上fetch分支
  • 线性回归 (Linear Regression)基础知识1
  • C++——priority_queue模拟实现
  • 数电笔记——第二章 逻辑代数基础
  • 探索火山引擎 DeepSeek-R1 满血版:流畅、高效的 AI 开发体验
  • 小智机器人CMakeLists编译文件解析
  • 【量化策略】趋势跟踪策略
  • 2人恶意传播刘国梁谣言被处罚,媒体:以法律利剑劈谣斩邪,加快推进依法治体
  • 原核试验基地司令员范如玉逝世,从事核试验研究超40年
  • 天算星座二期首批卫星成功发射,将助力6G空天信息基础设施建设
  • 刘小涛任江苏省委副书记
  • 中国青年报:为见义勇为者安排补考,体现了教育的本质目标
  • 恒生银行回应裁员传闻:受影响的员工数目占银行核心业务员工总数约1%