前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes TLS bootstrapping流程分析

Kubernetes TLS bootstrapping流程分析

原创
作者头像
shawwang
发布2020-07-06 11:20:17
2.1K0
发布2020-07-06 11:20:17
举报
文章被收录于专栏:腾讯云容器服务团队的专栏

细节参见官方文档:https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/

初始化流程:

  1. kubelet启动
  2. 发现本地没有kubeconfig文件
  3. 寻找bootstrap-kubeconfig文件
  4. 读取bootstrap-kubeconfig中的apiserver地址和bootstrap token,bootstrap的格式参考 https://kubernetes.io/docs/reference/access-authn-authz/bootstrap-tokens/
  5. 使用bootstrap token作为凭证访问apiserver
  6. 该token有权限去创建和获取证书签名请求(CSR) —— bootstrap token的命名具有特定的格式,可以被apiserver识别,username为system:bootstrap:<token id>,属于system:bootstrappers用户组,该用户组需要绑定system:node-bootstrapper的clusterrole,以便可以拥有创建csr的权限
  7. kubelet为自己创建一个CSR,签发者(csr.Spec.SignerName)为kubernetes.io/kube-apiserver-client-kubelet
  8. CSR被自动或者手动approved
    1. controller-manager自动approve,需要system:bootstrappers用户组绑定system:certificates.k8s.io:certificatesigningrequests:nodeclient的clusterrole。controller-manager的CSRApprovingController会通过SubjectAccessReview API的方式来校验csr中的username和group是否有对应权限,同时检查签发者是否为kubernetes.io/kube-apiserver-client-kubelet
    2. 通过kubectl等手动approve
  9. kubelet证书在approved之后由controller-manager创建
  10. controller-manager将证书更新到csr的status字段中
  11. kubelet从apiserver获取证书
  12. kubelet根据取回来的key和证书生成对应的kubeconfig
  13. kubelet使用生成的kubeconfig开始正常工作
  14. 如果配置了证书自动续期,则kubelet会在证书快过期的时候利用旧的kubeconfig来续约旧的证书
  15. 续约的证书被自动或者手动approved签发 —— 自动approve需要system:nodes用户组绑定system:certificates.k8s.io:certificatesigningrequests:selfnodeclient的clusterrole(system:nodes是kubelet之前申请的证书的group,即证书的组织O为system:nodes)

涉及的用户,用户组,权限

  1. bootstrap token的username为system:bootstrap:<token id>
  2. system:bootstrappers用户组,bootstrap token都属于该用户组
  3. clusterrole system:node-bootstrapper,拥有创建和获取CSR的权限,system:bootstrappers用户组一般需要绑定该role
  4. clusterrole system:certificates.k8s.io:certificatesigningrequests:nodeclient,属于该group的user申请的CSR可以被controller-manager自动approve,system:bootstrappers用户组一般需要绑定该role
  5. system:nodes用户组,kubelet从apiserver获取的证书一般都属于该用户组,即证书的组织O为system:nodes
  6. clusterrole system:certificates.k8s.io:certificatesigningrequests:selfnodeclient,属于该group的user在证书续期时可以被controller-manager自动approve,system:nodes用户组一般需要绑定该role

前置依赖:

  1. kube-apiserver需要指定client CA: --client-ca-file,客户端使用证书鉴权时,apiserver根据这个CA来校验客户端证书的合法性
  2. kube-apiserver使用static token或者bootstrap token:
    1. 使用static token需要指定--token-auth-file文件
    2. 使用bootstrap token需要开启对应功能: --enable-bootstrap-token-auth=true
  3. kube-controller-manager需要指定和kube-apiserver相同的--client-ca-file,同时需要指定--cluster-signing-cert-file和--cluster-signing-key-file用户签发kubelet证书
  4. kube-controller-manager自动approve需要为system:bootstrappers用户组和system:nodes用户组绑定对应的角色:system:certificates.k8s.io:certificatesigningrequests:nodeclient,system:certificates.k8s.io:certificatesigningrequests:selfnodeclient,同时csr的签发者为kubernetes.io/kube-apiserver-client-kubelet
  5. kubelet需要指定--bootstrap-kubeconfig

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档