首页 > 其他分享 >TLS Bootstrapping原理

TLS Bootstrapping原理

时间:2022-12-07 00:22:33浏览次数:67  
标签:TLS Kubelet Bootstrapping kubeconfig apiserver kubelet 证书 原理 CSR

1.1   Kubelet启动过程

TLS BootStrapping 官方文档:

https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#initialization-process

 

a)       查找kubeconfig文件,文件一般位于/etc/kubernetes/kubelet.kubeconfig

b)       从kubeconfig文件中检索APIServer的URL和证书

c)       然后去和APIServer进行交互

 

查看kubelet.kubeconfig证书有效期:

首先对kubelet.kubeconfi的certificate-authority-data字段进行解密:

echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0akNDQXNxZ0F3SUJBZ0lVVXdzUHFhWGxWVUdWb3lvYkZyZFpIRmZIQk04d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2R6RUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKb

GFXcHBibWN4RURBT0JnTlZCQWNUQjBKbAphV3BwYm1jeEV6QVJCZ05WQkFvVENrdDFZbVZ5Ym1WMFpYTXhHakFZQmdOVkJBc1RFVXQxWW1WeWJtVjBaWE10CmJXRnVkV0ZzTVJNd0VRWURWUVFERXdwcmRXSmxjbTVsZEdWek1CNFhEVEl3TURrd05UQXlNVFF3TUZvWERUSTEKTU

Rrd05EQXlNVFF3TUZvd2R6RUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFXcHBibWN4RURBTwpCZ05WQkFjVEIwSmxhV3BwYm1jeEV6QVJCZ05WQkFvVENrdDFZbVZ5Ym1WMFpYTXhHakFZQmdOVkJBc1RFVXQxClltVnlibVYwWlhNdGJXRnVkV0ZzTVJNd0VRWUR

WUVFERXdwcmRXSmxjbTVsZEdWek1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXUrV291WmpLS1RmUnMwbkY1NTdCUk8wVTlkSUVvRVlydEFHawp5aWZET0s5MGdNeDBRTzlhMGpJOXd0OFlNM284cmpGcmVjdWJ5Q1RzK1JSMTFmd0EvdGIwc0kr

U1NlRVVYVGo3ClFlaklVK1pBTzdzNGRvM2hveGYrbzBsS2tPbVIvTVZTa2NYUFl2ZzJhc0tGTnI0NkZCSVFZRkh4NzJCcGIreFMKVmViMWhqNTFXTVBmSkdZcW4vRWZYS3hlb3dvNEE5WXJHdXoxVDVGWVNtcjJWa3VIOXEwajRsRE9TbkQ4WnF0eQpDZW1HZVI5M1IraklmTkxCN

DZHZC9vVm9veEJYb0dPemlvUURLZDM1QllXaExvZzVmT2cyMko4ZmNrTEI0bk9wCnBjb24xZ01vOGtlS0xZSlBxTmp6ZGFuL0hNN1dtaElMb2JIUVF3V0NjK1hjTkxnaUxRSURBUUFCbzJZd1pEQU8KQmdOVkhROEJBZjhFQkFNQ0FRWXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SU

JBakFkQmdOVkhRNEVGZ1FVN3NuYQoweGhZUU5wNDJ0ZzhmdGxjVVdiSlE3b3dId1lEVlIwakJCZ3dGb0FVN3NuYTB4aFlRTnA0MnRnOGZ0bGNVV2JKClE3b3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBTEFGdUdiTmNoTGk4aFdWbURRUGlIR2E0Z2JzdG1NWjZ1eC8KVnNqVnF

IcnkrMXdXcm8rWDc1SDJ6QXV3d3RIMHFYUGhKZjRid2hWMTREb1k0eGpVYW9aTjF0ejU3VEpQUXczNApuT3lRa1VmOFhZcDJpK1BBczZ6ZUgrVUZjQUJqeGIrdFRuYlU0MENqakx6L2ZaRjJURkxscWtTUzVnOSttQnkrCkx1bkVGY1E5Z1hLaHFvbWJ5TkpNcytsY0hacFJ6YmF4

NE9oeTRZTU1qNENaQjNKZG9TUDR5dkRQMnZWNXZvbmcKcU0rUHl3SVl2TjhUN3hFeTIrbTZxWGNla3gyRmlVeFJDeTMyWkRGbGQrTDhFamdrelN2YVNpQ2thWjF6TlczRwpZWTBFWkhGcGM2S1lrdlJDWWVvMGRDRkwyVSsxckpEMFVWbGRKS0dnUEcyMjh2aUY5cTA9Ci0tLS0tR

U5EIENFUlRJRklDQVRFLS0tLS0K" | base64 --decode >/tmp/1

 

                          

然后使用OpenSSL即可查看证书过期时间:

openssl x509 -in /tmp/1 -noout -dates

 

 

1.2   TLS Bootstrapping初始化流程

 

 

1、   Kubelet启动

2、   Kubelet查看kubelet.kubeconfig文件,假设没有这个文件

3、   Kubelet会查看本地的bootstrap.kubeconfig

4、   Kubelet读取bootstrap.kubeconfig文件,检索apiserver的url和一个token

5、   Kubelet链接apiserver,使用这个token进行认证

a)  Apiserver会识别tokenid,apiserver会查看该tokenid对于的bootstrap的一个secret

b)  找个这个secret中的一个字段,apiserver把这个token识别成一个username,名称是system:bootstrap:<token-id>,属于system:bootstrappers这个组,这个组具有申请csr的权限,该组的权限绑定在一个叫system:node-bootstrapper的clusterrole

                   i.           # clusterrole k8s集群级别的权限控制,它作用整个k8s集群

                  ii.           # clusterrolebinding 集群权限的绑定,它可以帮某个clusterrole绑定到一个用户、组或者seviceaccount

c)  CSR:相当于一个申请表,可以拿着这个申请表去申请我们的证书。

6、   经过上面的认证,kubelet就有了一个创建和检索CSR的权限

7、   Kubelet为自己创建一个CSR,名称为kubernetes.io/kube-apiserver-client-kubelet

8、   CSR被允许有两种方式:

a)  K8s管理员使用kubectl手动的颁发证书

b)  如果配置了相关权限,kube-controller-manager会自动同意。

                   i.           Controller-manager有一个CSRApprovingController。他会校验kubelet发来的csr的username和group是否有创建csr的权限,而且还要验证签发着是否是kubernetes.io/kube-apiserver-client-kubelet

                  ii.           Controller-manager同意CSR请求

 

9、   CSR被同意后,controller-manager创建kubelet的证书文件

10、      Controller-manager将证书更新至csr的status字段

11、      Kubelet从apiserver获取证书

12、      Kubelet从获取到的key和证书文件创建kubelet.kubeconfig

13、      Kubelet启动完成并正常工作

14、      可选:如果配置了自动续期,kubelet会在证书文件过期的时候利用之前的kubeconfig文件去申请一个新的证书,相当于续约。

15、      新的证书被同意或签发,取决于我们的配置

a)  Kubelet创建的CSR是属于一个O:system:nodes

b)  CN:system:nodes:主机名

标签:TLS,Kubelet,Bootstrapping,kubeconfig,apiserver,kubelet,证书,原理,CSR
From: https://www.cnblogs.com/xgg123/p/16961898.html

相关文章

  • HCIA学习笔记四十九:PPPOE原理及配置
    一、DSL1.1、DSL应用场景• 数字用户线路DSL是以电话线为传输介质的传输技术。1.2、PPPoE在DSL中的应用二、PPPoE原理2.1、PPPoE报文• PPPoE报文是使用Etherne......
  • v-model双向绑定原理
    父组件代码如下:<template> <div>  我是父组件:<inputtype="text"v-model="msg">  <son-boxv-model="msg"/> </div></template><script>//导入子......
  • C++学习---STL中nullptr_t的实现原理
    引言nullptr_t/nullptr是对C语言中NULL的替代,C语言中NULL通常定义为0或(void*)0,无法很好地处理与C++相关的环境,比如类指针的转换、赋值、比较等,容易出现异常。我们来分析一......
  • 很简单的源码剖析-SpringBoot内嵌Tomcat原理
    SpringBoot默认支持Tomcat,Jetty,和Undertow作为底层容器。而SpringBoot默认使用Tomcat,一旦引入spring-boot-starter-web模块,就默认使用Tomcat容器。<dependency><gr......
  • AQS原理
    *前置知识:1,线程的生命周期:新建(new())--就绪(start())--运行(run())--阻塞--死亡;线程的非运行状态:等待,挂起,睡眠,阻塞 正常生命周期中运行的线程,如果有同步需求,假如正在......
  • 云原生架构(一)原理概览
    系列目录云原生架构(一)原理概览云原生架构(二)环境搭建云原生架构(三)简单样例云原生架构(四)源码详解云原生架构(五)总结提高一、行业现状 云原生架构真正进入大众视野要从......
  • DNS协议—计算机网络原理
    DNS协议详解DNS协议定义DNS(DomainNameSystem)域名系统DNS协议:是一个处理IP地址与域名之间映射的网络协议,做用于应用层DNS域名结构因为用户访问别的主机时,如果一......
  • Redis原理 - 对象的数据结构(SDS、Inset、Dict、ZipList、QuickList、SkipList、RedisO
    Redis数据结构1.SDSRedis是用C语言写的,但是对于Redis的字符串,却不是C语言中的字符串(即以空字符’\0’结尾的字符数组),它是自己构建了一种名为简单动态字符串(sim......
  • 计算机组成原理(day1)
    1.二进制转换小数部分采用拼凑法(按下表)2.BCD码目的:方便机器语言与十进制快速转换2.18421码六个冗余表示十进制,运算结果落入1010(10)~1111(15)则无定义,需补0110(6)后储存。如果......
  • <二>bind1st和bind2nd的底层实现原理
    自己实现绑定器,代码如下#include<iostream>#include<iostream>#include<vector>#include<functional>#include<algorithm>#include<ctime>usingnamespaces......