启用已签名的 kubelet 服务证书

2023-10-27

默认情况下,kubeadm 所部署的 kubelet 服务证书是自签名(Self-Signed)。 这意味着从 metrics-server 这类外部服务发起向 kubelet 的链接时无法使用 TLS 来完成保护。

要在新的 kubeadm 集群中配置 kubelet 以使用被正确签名的服务证书, 你必须向 kubeadm init 传递如下最小配置数据:

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
serverTLSBootstrap: true

如果你已经创建了集群,你必须通过执行下面的操作来完成适配:

  • 找到 kube-system 名字空间中名为 kubelet-config-1.25 的 ConfigMap 并编辑之。 在该 ConfigMap 中,kubelet 键下面有一个 KubeletConfiguration 文档作为其取值。编辑该 KubeletConfiguration 文档以设置 serverTLSBootstrap: true
  • 在每个节点上,在 /var/lib/kubelet/config.yaml 文件中添加 serverTLSBootstrap: true 字段,并使用 systemctl restart kubelet 来重启 kubelet。

字段 serverTLSBootstrap 将允许启动引导 kubelet 的服务证书,方式 是从 certificates.k8s.io API 处读取。这种方式的一种局限在于这些 证书的 CSR(证书签名请求)不能被 kube-controller-manager 中默认的 签名组件 kubernetes.io/kubelet-serving 批准。需要用户或者第三方控制器来执行此操作。

可以使用下面的命令来查看 CSR:

kubectl get csr
NAME        AGE     SIGNERNAME                        REQUESTOR                      CONDITION
csr-9wvgt   112s    kubernetes.io/kubelet-serving     system:node:worker-1           Pending
csr-lz97v   1m58s   kubernetes.io/kubelet-serving     system:node:control-plane-1    Pending

你可以执行下面的操作来批准这些请求:

kubectl certificate approve <CSR-名称>

默认情况下,这些服务证书会在一年后过期。 kubeadm 将 KubeletConfiguration 的 rotateCertificates 字段设置为 true;这意味着证书快要过期时,会生成一组针对服务证书的新的 CSR,而 这些 CSR 也要被批准才能完成证书轮换。 要进一步了解这里的细节,可参阅 证书轮换 文档。

如果你在寻找一种能够自动批准这些 CSR 的解决方案,建议你与你的云提供商 联系,询问他们是否有 CSR 签名组件,用来以带外(out-of-band)的方式检查 节点的标识符。

说明: 本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南

也可以使用第三方定制的控制器:

除非既能够验证 CSR 中的 CommonName,也能检查请求的 IP 和域名, 这类控制器还算不得安全的机制。 只有完成彻底的检查,才有可能避免有恶意的、能够访问 kubelet 客户端证书的第三方 为任何 IP 或域名请求服务证书。

类型

CA

CN

认证

描述

官方

Etcd

etcd/ca.crt,key

server.crt,key

server, client

对外提供服务

kube-etcd

peer.crt,key

server, client

节点相互通信的证书

kube-etcd-peer

healthcheck-client.crt,key

client

pod中Liveness探针客户端证书

kube-etcd-healthcheck-client

k8s

ca.crt,key

sa.pub,key

 

服务帐户密钥

 

apiserver.crt,key

server

apiserver 证书

kube-apiserver

apiserver-kubelet-client.crt,key

client

kubelet证书

kube-apiserver-kubelet-client

apiserver-etcd-client.crt,key

client

apiserver访问etcd的证书

kube-apiserver-etcd-client

 front-proxy-ca.crt,key

front-proxy-client.crt,key

client

用于前端代理

front-proxy-client

默认用kubeadm部署的K8S,kubelet默认只有cient端证书的,就是它只是去访问apiserver的证书。

按照官网的文档,需要增加一个kubelet server端证书

具体操作如下

kubectl -n kube-system get configmaps

kubectl -n kube-system edit configmaps kubelet-config-1.23

添加serverTLSBootstrap: true这一行

    imageMinimumGCAge: 0s

    kind: KubeletConfiguration

    serverTLSBootstrap: true

    logging:

在每个节点上,在 /var/lib/kubelet/config.yaml 文件中添加 serverTLSBootstrap: true 字段,并使用 systemctl restart kubelet 来重启 kubelet。

vi /var/lib/kubelet/config.yaml

在所有的K8S节点上添加如下行

serverTLSBootstrap: true

所有节点都重启kubelet服务

systemctl restart kubelet.service

使用下面的命令来查看 CSR:

kubectl get csr

执行下面的操作来批准这些请求:

kubectl certificate approve <CSR-名称>

默认情况下,这些服务证书会在一年后过期。 kubeadm 将 KubeletConfiguration 的 rotateCertificates 字段设置为 true;这意味着证书快要过期时,会生成一组针对服务证书的新的 CSR,而 这些 CSR 也要被批准才能完成证书轮换。 要进一步了解这里的细节,可参阅 证书轮换 文档。

如果你在寻找一种能够自动批准这些 CSR 的解决方案,建议你与你的云提供商 联系,询问他们是否有 CSR 签名组件,用来以带外(out-of-band)的方式检查 节点的标识符。

官方网址

使用 kubeadm 进行证书管理 | Kubernetes

K8S各种各样的证书介绍

K8S各种各样的证书介绍_一往无前,未来可期的博客-CSDN博客_k8s证书

kubernetes 证书详解

kubernetes 证书详解_Kry1702的博客-CSDN博客_kubernetes证书

Kubernetes Kubeadm Kubelet 证书自动续签

Kubernetes Kubeadm Kubelet 证书自动续签_富士康质检员张全蛋的博客-CSDN博客_kubelet 证书

使用 kubeadm 进行证书管理

使用 kubeadm 进行证书管理 | Kubernetes

转载至https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#kubelet-serving-certs

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启用已签名的 kubelet 服务证书 的相关文章

  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐

  • ElasticSearch安装与整合

    1 wget https artifacts elastic co downloads elasticsearch elasticsearch 6 2 4 tar gz 下载es 环境要求 2 启动elasticsearch 使用 sh b
  • 1、图解Oracle Logminer配置使用

    LogMiner配置使用手册 1 Logminer简介 1 1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具 使用该工具可以轻松获得Oracle 在线 归档日志文件中
  • PostgreSQL 备份与恢复

    http www wohedb com db html doc administrator guide adm 9 backup and restore htm www wohedb com 中文数据库 第九章 备份与恢复 PostgreS
  • LeetCode题目笔记——463. 岛屿的周长,/C++

    文章目录 题目描述 题目难度 简单 方法一 迭代 代码 方法二 深度优先遍历DFS 代码 总结 题目描述 给定一个 row x col 的二维网格地图 grid 其中 grid i j 1 表示陆地 grid i j 0 表示水域 网格中的
  • 通过jr-qrcode生成二维码并下载到客户端本地(Vue)

    生成二维码 首先生成二维码图片的地址 引入jr qrcode import jrQrcode from jr qrcode 生成二维码图片的地址 生成二维码地址 getQRCodeUrl spreadUrl const QRCodeUrl
  • 修改环境变量引起的bash 出错 解决方案

    来自 http www iteye com wiki blog 1244124 打开ubuntu 发现了 bash 的出错信息 如下 上网检索了一下 发现是环境变量有错误 找了多种方法 下面的方法是有效的一种 错误信息 Command le
  • C++函数

    C 函数 函数是一组一起执行一个任务的语句 与C程序类似 每个 C 程序都至少有一个函数 即主函数 main 通过函数 还可以把一个复杂任务分解成为若干个易于解决的小任务 充分体现结构化程序设计由粗到精 逐步细化的设计思想 即将任务合理划分
  • VR开发中的人物传送——Vive-Teleporter

    这是一个易于使用的传送系统 适用于VR开发和 Unity 游戏引擎 我这里用的PicoVR一体机 这是Unity 生成的 Navigation Mesh 作为玩家可以传送到的边界 因为这个过程是捎带Unity的工作 它是稳定的 可以在大多数
  • 服务器虚拟化 —— 集群服务器 —— 分布式 —— 云服务

    一 服务器虚拟化技术 是下面集群服务器 云服务的技术基石 将服务器的物理资源抽象成逻辑资源 让一台服务器变成几台甚至上百台 很少见啊 相互隔离的虚拟服务器 我们不再受限于物理上的界限 而是让CPU 内存 磁盘 I O等硬件变成可以动态管理的
  • 顺序表,你真的知道吗[SQL]

    好看的目录 前言 一 顺序表是什么 概念及结构 二 顺序表的实现 顺序表的缺点 几道练手题 总结 前言 线性表是n个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使用的数据结构 常见的线性表 顺序表 链表 栈 队列 字符串 线性
  • 实现弧形切角两种方式

    1 css 的 radial gradient
  • springboot服务端接口外网远程调试,并实现HTTP服务监听 - 内网穿透

    文章目录 前言 1 本地环境搭建 1 1 环境参数 1 2 搭建springboot服务项目 2 内网穿透 2 1 安装配置cpolar内网穿透 2 1 1 windows系统 2 1 2 linux系统 2 2 创建隧道映射本地端口 2
  • C语言版通讯录操作系统

    通讯录操作系统 目录 通讯录操作系统 一 通讯录的简介 三 各部分代码实现 1 首先在主函数中编写项目的整体框架 2 优化菜单界面 menu函数 3 封装属性 4 创建通讯录的结构变量 在main函数中 5 函数声明 头文件中实现 6 函数
  • Effective C++学习笔记——宁以传引用替换传值

    目录 一 传值效率可能会很低 二 传值可能发生割裂问题 三 适用于传值的情况和注意事项 相关博客 C 引用知识归纳 一 传值效率可能会很低 我们假设有这样两个类 class Human public string name string s
  • ajax中包含哪些技术,AJAX是什么?都包含那些技术?

    AJAX全称为 Asynchronous JavaScript and XML 异步JavaScript和XML 是指一种创建交互式网页应用的网页开发技术 主要包含了以下几种技术 Ajax Asynchronous JavaScript X
  • Apinto 网关: Go语言实现 HTTP 转 gRPC

    gRPC 是由 Google 开发的一个高性能 通用的开源RPC框架 主要面向移动应用开发且基于 HTTP 2 协议标准而设计 同时支持大多数流行的编程语言 gRPC 基于 HTTP 2 协议传输 HTTP 2 相比 HTTP1 x有以下优
  • 麦克风阵列原理

    1 麦克风阵列 麦克风阵列 是一组位于空间不同位置的全向麦克风按一定的形状规则布置形成的阵列 是对空间传播声音信号进行空间采样的一种装置 采集到的信号包含了其空间位置信息 根据声源和麦克风阵列之间距离的远近 可将阵列分为近场模型和远场模型
  • 【平衡车】TB6612+编码器电机的使用

    一 编码器电机的使用 1 电线 电机 用于控制电机正 反转 2 编码器5V GND 使编码器工作 3 编码器A B相 连接在单片机 用于反馈电机运动状态 用于输出角度 速度数据 stm32的定时器有具备输入捕获功能 从而读取脉冲 获得速度值
  • selenium对元素进行操作(二):点击&输入

    1分钟了解一个测开小知识 selenium对元素进行操作 二 其他常规操作 鼠标单击 click 在定位的元素后 使用增加 click 即对该元素进行点击操作 例如 driver find element by Xpath id s xma
  • 启用已签名的 kubelet 服务证书

    默认情况下 kubeadm 所部署的 kubelet 服务证书是自签名 Self Signed 这意味着从 metrics server 这类外部服务发起向 kubelet 的链接时无法使用 TLS 来完成保护 要在新的 kubeadm 集