我的编程空间,编程开发者的网络收藏夹
学习永远不晚

kubernetes中TLS bootstrapping有什么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

kubernetes中TLS bootstrapping有什么用

这篇文章主要介绍了kubernetes中TLS bootstrapping有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一: 前言

当集群开启了 TLS 认证后,每个节点的 kubelet 组件都要使用由 apiserver 使用的 CA 签发的有效证书才能与 apiserver 通讯;此时如果节点多起来,为每个节点单独签署证书将是一件非常繁琐的事情;TLS bootstrapping 功能就是让 kubelet 先使用一个预定的低权限用户连接到 apiserver,然后向 apiserver 申请证书,kubelet 的证书由 apiserver 动态签署;

Bootstrap 是很多系统中都存在的程序,比如 Linux 的bootstrap,bootstrap 一般都是作为预先配置在开启或者系统启动的时候加载,这可以用来生成一个指定环境。Kubernetes 的 kubelet 的启动时同样可以加载一个这样的配置文件,这个文件的内容类似如下形式:
02b50b05283e98dd0fd71db496ef01e8,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

在配合 RBAC 授权模型下的工作流程大致如下:
kubernetes中TLS bootstrapping有什么用

二:TLS bootstrapping 相关术语

1.kubernet相关端口

kubelet 组件在工作时,采用主动的查询机制,即定期请求 apiserver 获取自己所应当处理的任务,如哪些 pod 分配到了自己身上,从而去处理这些任务;同时 kubelet 自己还会暴露出两个本身 api 的端口,用于将自己本身的私有 api 暴露出去,这两个端口分别是 10250 与 10255;对于 10250 端口,kubelet 会在其上采用 TLS 加密以提供适当的鉴权功能;对于 10255 端口,kubelet 会以只读形式暴露组件本身的私有 api,并且不做鉴权处理

就是说 kubelet 上实际上有两个地方用到证书,一个是用于与 API server 通讯所用到的证书,另一个是 kubelet 的 10250 私有 api 端口需要用到的证书

2.CSR请求类型

kubelet 发起的 CSR 请求都是由 controller manager 来做实际签署的,对于 controller manager 来说,TLS bootstrapping 下 kubelet 发起的 CSR 请求大致分为以下三种:
1. nodeclient :用户的客户端认证请求 O=system:nodes ,CN=system:node:(node name) 。
2. selfnodeclient :更新具有相同 O 和 CN 的客户端证书的节点。
3. selfnodeserver :更新服务证书的节点。

nodeclient 类型的 CSR 仅在第一次启动时会产生,selfnodeclient 类型的 CSR 请求实际上就是 kubelet renew 自己作为 client 跟 apiserver 通讯时使用的证书产生的,selfnodeserver 类型的 CSR 请求则是 kubelet 首次申请或后续 renew 自己的 10250 api 端口证书时产生的

三、TLS bootstrapping 具体引导过程

1.TLS 作用
众所周知 TLS 的作用就是对通讯加密,防止中间人窃听;同时如果证书不信任的话根本就无法与 apiserver 建立连接,更不用提有没有权限向 apiserver 请求指定内容。

2.RBAC 作用
当 TLS 解决了通讯问题后,那么权限问题就应由 RBAC 解决(可以使用其他权限模型,如 ABAC);RBAC 中规定了一个用户或者用户组(subject)具有请求哪些 api 的权限;在配合 TLS 加密的时候,实际上 apiserver 读取客户端证书的 CN 字段作为用户名,读取 O 字段作为用户组.

以上说明:第一,想要与 apiserver 通讯就必须采用由 apiserver CA 签发的证书,这样才能形成信任关系,建立 TLS 连接;第二,可以通过证书的 CN、O 字段来提供 RBAC 所需的用户与用户组。

3.kubelet 首次启动流程
既然 TLS bootstrapping 功能是让 kubelet 组件去 apiserver 申请证书,然后用于连接 apiserver;那么第一次启动时没有证书如何连接 apiserver ?
kubernetes中TLS bootstrapping有什么用
在 apiserver 配置中指定了一个 token.csv 文件,该文件中是一个预设的用户配置;同时该用户的 Token 和 apiserver 的 CA 证书被写入了 kubelet 所使用的 bootstrap.kubeconfig 配置文件中;这样在首次请求时,kubelet 使用 bootstrap.kubeconfig 中的 apiserver CA 证书来与 apiserver 建立 TLS 通讯,使用 bootstrap.kubeconfig 中的用户 Token 来向 apiserver 声明自己的 RBAC 授权身份.

首次启动时,可能与遇到 kubelet 报 401 无权访问 apiserver 的错误;这是因为在默认情况下,kubelet 通过 bootstrap.kubeconfig 中的预设用户 Token 声明了自己的身份,然后创建 CSR 请求;但是不要忘记这个用户在我们不处理的情况下他没任何权限的,包括创建 CSR 请求;所以需要如下命令创建一个 ClusterRoleBinding,将预设用户 kubelet-bootstrap 与内置的 ClusterRole system:node-bootstrapper 绑定到一起,使其能够发起 CSR 请求

点击(此处)折叠或打开

  1. cd /etc/kubernetes

  2. export KUBE_APISERVER="https://x.x.x.x:6443"

  3. # 设置集群参数

  4. kubectl config set-cluster kubernetes \

  5. --certificate-authority=/etc/kubernetes/ssl/ca.pem \

  6. --embed-certs=true \

  7. --server=${KUBE_APISERVER} \

  8. --kubeconfig=bootstrap.kubeconfig

  9. # 设置客户端认证参数
    kubectl config set-credentials kubelet-bootstrap \
    --token=${BOOTSTRAP_TOKEN} \
    --kubeconfig=bootstrap.kubeconfig
    # 设置上下文参数
    kubectl config set-context default \
    --cluster=kubernetes \
    --user=kubelet-bootstrap \
    --kubeconfig=bootstrap.kubeconfig
    # 设置默认上下?
    kubectl config use-context default --kubeconfig=bootstrap.kubeco
    nfig

4.手动签发证书
在 kubelet 首次启动后,如果用户 Token 没问题,并且 RBAC 也做了相应的设置,那么此时在集群内应该能看到 kubelet 发起的 CSR 请求:
kubernetes中TLS bootstrapping有什么用
出现 CSR 请求后,可以使用 kubectl 手动签发(允许) kubelet 的证书
kubectl certificate approve node-csr-ICyEqgl55a222oGUbA3U5CE22roAKo6AoGT6Eff_ehY

当成功签发证书后,目标节点的 kubelet 会将证书写入到 --cert-dir= 选项指定的目录中
kubernetes中TLS bootstrapping有什么用而 kubelet 与 apiserver 通讯所使用的证书为 kubelet-client.crt,剩下的 kubelet.crt 将会被用于 kubelet server(10250) 做鉴权使用;注意,此时 kubelet.crt 这个证书是个独立于 apiserver CA 的自签 CA,并且删除后 kubelet 组件会重新生成它

四:证书及配置文件

1.token.csv
该文件为一个用户的描述文件,基本格式为 Token,用户名,UID,用户组;这个文件在 apiserver 启动时被 apiserver 加载,然后就相当于在集群内创建了一个这个用户;接下来就可以用 RBAC 给他授权;持有这个用户 Token 的组件访问 apiserver 的时候,apiserver 根据 RBAC 定义的该用户应当具有的权限来处理相应请求

2.bootstarp.kubeconfig
该文件中内置了 token.csv 中用户的 Token,以及 apiserver CA 证书;kubelet 首次启动会加载此文件,使用 apiserver CA 证书建立与 apiserver 的 TLS 通讯,使用其中的用户 Token 作为身份标识像 apiserver 发起 CSR 请求

3.kubelet-client.crt
该文件在 kubelet 完成 TLS bootstrapping 后生成,此证书是由 controller manager 签署的,此后 kubelet 将会加载该证书,用于与 apiserver 建立 TLS 通讯,同时使用该证书的 CN 字段作为用户名,O 字段作为用户组向 apiserver 发起其他请求

4.kubelet.crt
该文件在 kubelet 完成 TLS bootstrapping 后并且没有配置 --feature-gates=RotateKubeletServerCertificate=true 时才会生成;这种情况下该文件为一个独立于 apiserver CA 的自签 CA 证书,有效期为 1 年;被用作 kubelet 10250 api 端口

5.apiserver配置文件

点击(此处)折叠或打开

  1. ###

  2. ## kubernetes system config

  3. ##

  4. ## The following values are used to configure the kube-apiserver

  5. ##

  6. #

  7. ## The address on the local server to listen to.

  8. KUBE_API_ADDRESS="--advertise-address=10.116.137.196 --bind-address=10.116.137.196 --insecure-bind-address=10.116.137.196"

  9. #

  10. ## The port on the local server to listen on.

  11. #KUBE_API_PORT="--port=8080"

  12. #

  13. ## Port minions listen on

  14. #KUBELET_PORT="--kubelet-port=10250"

  15. #

  16. ## Comma separated list of nodes in the etcd cluster

  17. KUBE_ETCD_SERVERS="--etcd-servers=https://10.116.137.196:2379,https://10.116.82.28:2379,https://10.116.36.57:2379"

  18. #

  19. ## Address range to use for services

  20. KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

  21. #

  22. ## default admission control policies

  23. KUBE_ADMISSION_CONTROL="--admission-control=ServiceAccount,NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"

  24. #

  25. ## Add your own!

  26. KUBE_API_ARGS="--authorization-mode=RBAC --runtime-config=rbac.authorization.k8s.io/v1beta1 --kubelet-https=true --experimental-bootstrap-token-auth --token-auth-file=/etc/kubernetes/token.csv --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kubernetes.pem --tls-private-key-file=/etc/kubernetes/ssl/kubernetes-key.pem --client-ca-file=/etc/kubernetes/ssl/ca.pem --service-account-key-file=/etc/kubernetes/ssl/ca-key.pem --etcd-cafile=/etc/kubernetes/ssl/ca.pem --etcd-certfile=/etc/kubernetes/ssl/kubernetes.pem --etcd-keyfile=/etc/kubernetes/ssl/kubernetes-key.pem --enable-swagger-ui=true --apiserver-count=1 --audit-log-maxage=30 --audit-log-maxbackup=3 --audit-log-maxsize=100 --audit-log-path=/var/lib/audit.log --event-ttl=1h"

6.kubelet配置文件

点击(此处)折叠或打开

  1. ## kubelet (minion) config

  2. #

  3. ## The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)

  4. KUBELET_ADDRESS="--address=10.116.82.28"

  5. #

  6. ## The port for the info server to serve on

  7. #KUBELET_PORT="--port=10250"

  8. #

  9. ## You may leave this blank to use the actual hostname

  10. KUBELET_HOSTNAME="--hostname-override=10.116.82.28"

  11. #

  12. ## location of the api-server

  13. #KUBELET_API_SERVER="--api-servers=http://10.116.137.196:8080"

  14. #

  15. ## pod infrastructure container

  16. #KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=sz-pg-oam-docker-hub-001.tendcloud.com/library/pod-infrastructure:rhel7"

  17. KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure"

  18. #

  19. ## Add your own!

  20. KUBELET_ARGS="--cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local. --hairpin-mode promiscuous-bridge --serialize-image-pulls=false --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"

感谢你能够认真阅读完这篇文章,希望小编分享的“kubernetes中TLS bootstrapping有什么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

kubernetes中TLS bootstrapping有什么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

kubernetes中TLS bootstrapping有什么用

这篇文章主要介绍了kubernetes中TLS bootstrapping有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一: 前言当集群开启了 TLS 认证后,每个节
2023-06-04

kubernetes中NetworkPolicy有什么用

小编给大家分享一下kubernetes中NetworkPolicy有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一: 简介 1.Kubernetes的一个重要特性就是要把不同node节点的pod连接起来,无视物理节
2023-06-04

kubernetes中Harbor有什么用

这篇文章主要介绍了kubernetes中Harbor有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:简介Harbor是一个用于存储和分发Docker镜像的企业级Re
2023-06-04

Kubernetes中yaml文件有什么用

小编给大家分享一下Kubernetes中yaml文件有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!YAML 基础YAML(Yet Another Mark
2023-06-19

Kubernetes Scheduler有什么用

这篇文章给大家分享的是有关Kubernetes Scheduler有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先来过一下KubernetesScheduler的基本功能KubernetesSchedul
2023-06-03

SSL和TLS之间有什么区别

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用于加密和保护网络通信的协议。它们之间的主要区别在于SSL是TLS的前身。SSL首次发布于1995年,随后发展成为SSL 3.
SSL和TLS之间有什么区别
2024-04-17

docker和kubernetes有什么区别

Docker和Kubernetes都是用于容器化应用程序的工具,但是它们有不同的功能和用途。Docker是一种容器化引擎,用于创建、打包和运行容器化应用程序。它提供了一种轻量级、快速部署的方式,使开发人员可以更容易地构建和部署应用程序。
docker和kubernetes有什么区别
2024-04-08

kubernetes中Pod是什么

这篇文章主要介绍kubernetes中Pod是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一:Pod 是什么Pod是Kubernetes的最重要最基本的概念。它是能够被创建,调度和管理的最小部署单元。一个Pod
2023-06-04

kubernetes中Service是什么

这篇文章主要为大家展示了“kubernetes中Service是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“kubernetes中Service是什么”这篇文章吧。一:Service概念K
2023-06-04

kubernetes中API是什么

这篇文章给大家分享的是有关kubernetes中API是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一:体系结构二:说明Kubernetes API是集群系统中的重要组成部分,Kubernetes中各种资源
2023-06-04

kubernetes中什么是Service Mesh

这篇文章主要为大家展示了“kubernetes中什么是Service Mesh”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“kubernetes中什么是Service Mesh”这篇文章吧。一:
2023-06-04

kubernetes中kube-dns是什么

这篇文章将为大家详细讲解有关kubernetes中kube-dns是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:前言kube-dns是Kubernetes中的一个内置插件,目前作为一个独立的开源
2023-06-04

Kubernetes pod里的pause-amd64容器有什么用

这篇文章主要介绍“Kubernetes pod里的pause-amd64容器有什么用”,在日常操作中,相信很多人在Kubernetes pod里的pause-amd64容器有什么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-06-04

Kubernetes中EFK怎么用

这篇文章给大家分享的是有关Kubernetes中EFK怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一:前言1.在安装Kubernetes集群的时候我们有下载过压缩包https://dl.k8s.io/v1
2023-06-04

kubernetes中实现Istio流量管理有什么好处

小编给大家分享一下kubernetes中实现Istio流量管理有什么好处,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:简介Istio流量管理的核心组件是Pil
2023-06-04

kubernetes中Label和Label Selector是什么

小编给大家分享一下kubernetes中Label和Label Selector是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:什么是LabelLabel
2023-06-04

Kubernetes特别属性的标签Label有什么作用

今天小编给大家分享一下Kubernetes特别属性的标签Label有什么作用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前
2023-06-29

PureFTPd中防火墙和SSL/TLS怎么用

小编给大家分享一下PureFTPd中防火墙和SSL/TLS怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!我的客户端在一个做应用过滤的stateful防火墙(例如加了ip_conntrack_ftp或 者ip_nat_
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录