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

Kubernetes控制平面组件:APIServer 基于 引导Token 的认证机制

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

  • 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 认证机制中的 引导Token 认证方式进行介绍,包括 引导Token 的设计理念、实现原理、认证流程,以及在 Kubernetes 中的具体应用

1.引导Token的认证方式简介

  • Kubernetes 的引导 Token(Bootstrap Token)认证是一种用于简化集群节点加入和初始化的机制。
  • 它允许新节点或组件通过临时 Token 加入集群,并在完成初始化后自动失效。
  • 这种方式常用于集群的自动化部署和扩展。

2.引导 Token 认证的工作原理

  • 引导 Token 是一种短期的、临时的 Token,用于以下场景

    • 节点加入集群:新节点使用引导 Token 向 API Server 认证并加入集群。
    • 初始化组件:如 kubeadm 初始化集群时,使用引导 Token 完成初始配置。
  • 引导 Token 的特点:

    • 短期有效:Token 有明确的过期时间,通常为 24 小时。
    • 自动失效:使用后会自动失效,避免长期暴露。
    • RBAC 支持:可以为引导 Token 绑定特定的 RBAC 权限,限制其使用范围。

3.引导 Token 的结构

  • 引导 Token 是一个由两部分组成的字符串,格式为:<token-id>.<token-secret>
    • 例如:abcdef.0123456789abcdef
    • Token ID:6 个字符的随机字符串,用于标识 Token。
    • Token Secret:16 个字符的随机字符串,用于验证 Token。

4.创建引导 Token

4.1.使用 kubeadm 创建引导 Token

kubeadm 提供了创建和管理引导 Token 的工具。

kubeadm token create

输出示例:

abcdef.0123456789abcdef

4.2.查看已创建的 Token

kubeadm token list

输出示例:

TOKEN                     TTL       EXPIRES                USAGES                   DESCRIPTION   EXTRA GROUPS
abcdef.0123456789abcdef   23h       2025-02-19T12:34:56Z   authentication,signing   <none>        system:bootstrappers:kubeadm:default-node-token

4.3.手动创建引导 Token

  • 如果需要手动创建引导 Token,可以按照以下步骤操作:

    • 生成 Token ID 和 Token Secret:

      TOKEN_ID=$(head -c 6 /dev/urandom | base64 | tr -d '/+' | head -c 6)
      TOKEN_SECRET=$(head -c 16 /dev/urandom | base64 | tr -d '/+' | head -c 16)
      BOOTSTRAP_TOKEN="${TOKEN_ID}.${TOKEN_SECRET}"
      echo "Bootstrap Token: ${BOOTSTRAP_TOKEN}"
      
    • 将 Token 写入 Kubernetes Secret:

      kubectl create secret generic bootstrap-token-${TOKEN_ID} \
          --namespace=kube-system \
          --type=bootstrap.kubernetes.io/token \
          --from-literal=token-id=${TOKEN_ID} \
          --from-literal=token-secret=${TOKEN_SECRET} \
          --from-literal=usage-bootstrap-authentication=true \
          --from-literal=usage-bootstrap-signing=true \
          --from-literal=expiration=$(date -d "+24 hours" -u +"%Y-%m-%dT%H:%M:%SZ")
      

5.使用引导 Token 加入集群

5.1.获取集群信息

  • 在 Master 节点上运行以下命令,获取集群的 CA 证书哈希和 API Server 地址:
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    kubectl cluster-info
    

5.2.在新节点上使用引导 Token 加入集群

  • 在新节点上运行以下命令,使用引导 Token 加入集群:

    kubeadm join <api-server-address>:<port> \
        --token <bootstrap-token> \
        --discovery-token-ca-cert-hash sha256:<ca-cert-hash>
    
  • 例如:

    kubeadm join 192.168.1.100:6443 \
        --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
    

6.引导 Token 的 RBAC 配置

  • 引导 Token 默认绑定到 system:bootstrappers:kubeadm:default-node-token 组,可以通过 RBAC 为其分配权限。

  • 例如,为新节点分配必要的权限:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: kubeadm:node-autoapprove-bootstrap
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:node-bootstrapper
    subjects:
    - apiGroup: rbac.authorization.k8s.io
      kind: Group
      name: system:bootstrappers:kubeadm:default-node-token
    

7.引导 Token 的过期和清理

  • 引导 Token 在过期后会自动失效,也可以通过以下命令手动删除:
    kubeadm token delete <token-id>
    
  • 例如:
    kubeadm token delete abcdef
    

8.总结

  • 引导 Token 认证是 Kubernetes 中一种简单且安全的机制,适用于集群节点的初始化和自动化部署。
  • 通过 kubeadm 工具可以轻松创建和管理引导 Token,并结合 RBAC 实现权限控制。
  • 在实际操作中,建议:
    • 定期清理过期的 Token。
    • 结合自动化工具(如 Ansible、Terraform)实现集群的自动化部署。
    • 在生产环境中使用更安全的认证方式(如 TLS 证书)替代引导 Token。

相关文章:

  • C#上位机--选择语句(switch)
  • Typora软件(Markdown编辑器)详细安装教程(附补丁包)2025最详细图文教程安装手册
  • 打开Firefox自动打开hao360.hjttif.com标签解决方案
  • Resource not found: roslaunchROS path [0]=/opt/ros/noetic/share/ros
  • DeepSeek模型量化
  • 第一个CMAKE项目hello cmake
  • C++ 设计模式-解释器模式
  • Vue2 和 Vue3 的区别
  • 高级推理的多样化推理与验证
  • 前端(AJAX)学习笔记(CLASS 3):AJAX原理
  • 2025年度福建省职业院校技能大赛中职组“网络建设与运维”赛项规程模块三
  • 从Revit建模软件的“编辑”操作分析:构件与编辑 = 数据结构与算法
  • 【排版教程】如何在Word/WPS中优雅的插入参考文献
  • 鸿蒙-做一个简版的富文本解析控件
  • Docker+Kubernetes_第一章_Docker入门
  • Spring Boot文件上传
  • 设备树及gpio子系统及ioctl控制及字符设备驱动及内核模块编程事项仨LED灯说点就点说灭就灭
  • 计算机原理第三章——存储器(未完善
  • 计算机网络面试知识点总结
  • 一文说清楚编码、摘要、加密、公钥、私钥、解密、签名、验签
  • 全总联合六部门印发工作指引,共保劳动者合法权益
  • 证监会副主席李明:支持符合条件的外资机构申请新业务、设立新产品
  • 俄乌代表团抵达谈判会场
  • 把中国声音带向世界,DG和Blue Note落户中国
  • 秦洪看盘|缩量回踩,积蓄叩关能量
  • 商务部回应稀土出口管制问题