k8s认证
1. 证书介绍
服务端保留公钥和私钥,客户端使用root CA认证服务端的公钥
一共有多少证书:
*Etcd:
- Etcd对外提供服务,要有一套etcd server证书
- Etcd各节点之间进行通信,要有一套etcd peer证书
- Kube-APIserver访问Etcd,要有一套etcd client证书
kubernetes:
- Kube-apiserver对外提供服务,要有一套kube-apiserver server证书
- kube-scheduler、kube-controller-manager、kube-proxy、kubelet和其他可能用到的组件,需要访问kube-APIserver,要有一套kube-apiserver client证书
- kube-controller-manager要生成服务的service account,要有一对用来签署service account的证书(CA证书)
- kubelet对外提供服务,要有一套kubelet server证书
- kube-apiserver需要访问kubelet,要有一套kubelet client证书
2. openssl制作证书
所需证书如下:

制作api-server client证书:
# ${tmpdir}为生成的临时文件夹
# tmpdir=$(mktemp -d)# 生成证书私钥
openssl genrsa -out ${tmpdir}/server-key.pem 2048# 生成csr签名文件,CN设定为域名/机器名/或者IP名称
openssl req -new -key ${tmpdir}/server-key.pem -subj "/CN=${service}.${namespace}.svc" -out ${tmpdir}/server.csr -config# 根据csr签名文件创建csr
kubectl create -f *.yaml# approve and fetch the signed certificate
kubectl certificate approve ${csrName}# 生成server-cert.pem证书文件
serverCert=$(kubectl get csr ${csrName} -o jsonpath='{.status.certificate}')
echo ${serverCert} | openssl base64 -d -A -out ${tmpdir}/server-cert.pem# 使用server-key.pem和server-cert.pem进行认证
server-key.pem
server-cert.pem
制作脚本如下:
#!/bin/bashset -e
set -xusage() {cat <<EOF
Generate certificate suitable for use with an sidecar-injector webhook service.This script uses k8s' CertificateSigningRequest API to a generate a
certificate signed by k8s CA suitable for use with sidecar-injector webhook
services. This requires permissions to create and approve CSR. See
https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster for
detailed explantion and additional instructions.The server key/cert k8s CA cert are stored in a k8s secret.usage: ${0} [OPTIONS]The following flags are required.--service Service name of webhook.--namespace Namespace where webhook service and secret reside.--secret Secret name for CA certificate and server certificate/key pair.
EOFexit 1
}while [[ $# -gt 0 ]]; docase ${1} in--service)service="$2"shift;;--secret)secret="$2"shiftdo;;--namespace)namespace="$2"shift;;*)usage;;esacshift
done[ -z ${service} ] && service=logsidecar-injector-admission
[ -z ${secret} ] && secret=logsidecar-injector-admission-certs
[ -z ${namespace} ] && namespace=kubesphere-logging-systemif [ ! -x "$(command -v openssl)" ]; thenecho "openssl not found"exit 1
ficsrName=${service}.${namespace}
tmpdir=$(mktemp -d)
echo "creating certs in tmpdir ${tmpdir} "cat <<EOF >> ${tmpdir}/csr.conf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${service}
DNS.2 = ${service}.${namespace}
DNS.3 = ${service}.${namespace}.svc
EOFopenssl genrsa -out ${tmpdir}/server-key.pem 2048
openssl req -new -key ${tmpdir}/server-key.pem -subj "/CN=${service}.${namespace}.svc" -out ${tmpdir}/server.csr -config ${tmpdir}/csr.conf# clean-up any previously created CSR for our service. Ignore errors if not present.
kubectl delete csr ${csrName} 2>/dev/null || true# create server cert/key CSR and send to k8s API
cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:name: ${csrName}
spec:groups:- system:authenticatedrequest: $(cat ${tmpdir}/server.csr | base64 | tr -d '\n')usages:- digital signature- key encipherment- server auth
EOF# verify CSR has been created
while true; dokubectl get csr ${csrName}if [ "$?" -eq 0 ]; thenbreakfi
done# approve and fetch the signed certificate
kubectl certificate approve ${csrName}
# verify certificate has been signed
for x in $(seq 10); doserverCert=$(kubectl get csr ${csrName} -o jsonpath='{.status.certificate}')if [[ ${serverCert} != '' ]]; thenbreakfisleep 1
done
if [[ ${serverCert} == '' ]]; thenecho "ERROR: After approving csr ${csrName}, the signed certificate did not appear on the resource. Giving up after 10 attempts." >&2exit 1
fi
echo ${serverCert} | openssl base64 -d -A -out ${tmpdir}/server-cert.pem# create the secret with CA cert and server cert/key
kubectl create secret generic ${secret} \--from-file=key.pem=${tmpdir}/server-key.pem \--from-file=cert.pem=${tmpdir}/server-cert.pem \--dry-run -o yaml |kubectl -n ${namespace} apply -f -
相关文章:
k8s认证
1. 证书介绍 服务端保留公钥和私钥,客户端使用root CA认证服务端的公钥 一共有多少证书: *Etcd: Etcd对外提供服务,要有一套etcd server证书Etcd各节点之间进行通信,要有一套etcd peer证书Kube-APIserver访问Etcd&a…...
基于python开发的IP修改工具
工作中调试设备需要经常修改电脑IP,非常麻烦,这里使用Pythontkinter做了一个IP修改工具 说明: 1.启动程序读取config.json文件2.如果没有该文件则创建,写入当前网卡信息3.通过配置信息进行网卡状态修改4.更新文件状态,删除或修…...
Mybatis源码分析
1. Mybatis整体三层设计 SSM中,Spring、SpringMVC已经在前面文章源码分析总结过了,Mybatis源码相对Spring和SpringMVC而言是的简单的,只有一个项目,项目下分了很多包。从宏观上了解Mybatis的整体框架分为三层,分别是基…...
python树结构包treelib入门及其计算应用
树是计算机科学中重要的数据结构。例如决策树等机器学习算法设计、文件系统索引等。创建treelib包是为了在Python中提供树数据结构的有效实现。 Treelib的主要特点包括: 节点搜索的高效操作。支持常见的树操作,如遍历、插入、删除、节点移动、浅/深复制…...
Rust之自动化测试(三): 测试组合
开发环境 Windows 10Rust 1.73.0 VS Code 1.83.1 项目工程 这里继续沿用上次工程rust-demo 测试组合 正如本章开始时提到的,测试是一个复杂的学科,不同的人使用不同的术语和组织。Rust社区根据两个主要类别来考虑测试:单元测试和集成测试。单元测试很…...
专业管理菜单的增删改、查重
1,点击专业管理菜单------查询所有专业信息列表 ①点击菜单,切换专业组件 ②切换到列表组件后,向后端发送请求到Servlet ③调用DAO层,查询数据库(sql),封装查询到的内容 ④从后端向前端做出…...
vue3插件开发,上传npm
创建插件 在vue3工程下,创建组件vue页: toolset.vue。并设置组件名称。注册全局组件。新建index.js文件。内容如下,可在main.js中引入index.js,注册该组件进行测试。API服务是LLM(大语言模型)开放接口平台:持续接入各种主流的大模型接口,并提供简单、易用、统一的API交互…...
【python】屈小原现在要为学校写校庆贺文(CTGU百年校庆)
题目: """ 题目描述: 屈小原需要为学校的校庆写一篇贺文,共需写下n个字,但他目前只完成了1个字。屈小原可以进行两种操作: 在文档的末尾添加一个字,这样字数就会变为x1。 写下与当前字数相同…...
探索未来的视觉革命:卷积神经网络的崭新时代(二)
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
博客后台模块续更(三)
四、后台模块-动态路由 实现了这个动态路由功能之后,就能在浏览器web页面登录进博客管理后台了 1. 接口分析 后台系统需要能实现不同的用户权限可以看到不同的功能,即左侧的导航栏 请求方式 请求地址 请求头 GET /getRouters 需要token请求头 …...
第十二届蓝桥杯模拟赛第三期
A填空题 问题描述 请问在 1 到 2020 中,有多少个数与 2020 互质,即有多少个数与 2020 的最大公约数为 1。 参考答案 800 public class Main {public static void main(String[] args) {int ans0;for(int i1;i<2020;i) {if(gcd(2020,i)1) {ans;}}…...
2023年浙大MEM考前80天上岸经验分享
时间过得真快,转眼间已经是十月份了。回想起去年这个时候,我还在为考研而感到焦虑不安。然而,如今我已经在浙大MEM项目学习了一个多月的时间了。在这一个月的学习过程中,我不仅学到了许多专业知识,还结识了很多志同道合…...
增加并行度后,发现Flink窗口不会计算的问题。
文章目录 前言一、现象二、结论三、解决 前言 窗口没有关闭计算的问题,一直困扰了很久,经过多次验证,确定了问题的根源。 一、现象 Flink使用了window,同时使用了watermark ,并且还设置了较高的并行度。生产是设置了…...
使用 JMeter 和 Docker 进行服务存根
用于性能测试的服务存根:简介 随着测试项目的复杂性不断增加,越来越多的被测系统的测试流程受到依赖系统的影响。当我说“依赖系统”时,我指的是: 不受当前开发影响的遗留系统 属于另一个组织的第三方服务 您的组织开发的系统&am…...
语音转文字神器FunASR体验:支持中英日韩多语言,识别效果惊艳
语音转文字神器FunASR体验:支持中英日韩多语言,识别效果惊艳 1. 为什么选择FunASR语音识别 在日常工作和生活中,我们经常需要将语音内容转换为文字。无论是会议记录、采访整理,还是视频字幕制作,传统的手工转录方式既…...
Pixel Fashion Atelier部署教程:Mac M2/M3芯片通过MLX适配Stable Diffusion方案
Pixel Fashion Atelier部署教程:Mac M2/M3芯片通过MLX适配Stable Diffusion方案 1. 项目介绍 Pixel Fashion Atelier是一款专为时尚设计打造的AI图像生成工具,基于Stable Diffusion与Anything-v5模型构建。它采用独特的像素艺术风格界面,将…...
告别光电编码器?聊聊MT6835磁编码器在直流无刷电机控制中的实战应用
告别光电编码器?MT6835磁编码器在直流无刷电机控制中的实战解析 在工业自动化与精密控制领域,电机位置反馈元件的选择往往直接影响系统性能和可靠性。传统光电编码器虽占据主流市场多年,但其对灰尘敏感、机械安装精度要求高等痛点始终困扰着工…...
算法实战:巧用连通块思想求解闭合区域面积
1. 连通块算法:从抽象概念到实际问题 第一次接触连通块算法时,我完全被这个抽象的概念搞懵了。直到有一天在玩扫雷游戏,突然意识到:那些被数字包围的空白区域,不就是典型的连通块吗?这个顿悟让我彻底理解了…...
Shared Control【共享控制】- 基于隐式动作学习的辅助机器人直觉化操控
1. 从游戏手柄到机械臂:为什么我们需要共享控制? 想象一下用游戏手柄操控一台工业机械臂的场景。手柄只有两个摇杆和几个按钮,而机械臂可能有7个自由度甚至更多。这种维度不匹配就像让只会说"左转""右转"的人去指挥一个能…...
别再到处找脚本了!Windows 11家庭版一键解锁组策略(gpedit.msc)的保姆级教程
Windows 11家庭版解锁组策略的终极指南:告别复杂脚本,三步搞定系统隐藏功能 每次在Windows 11家庭版上输入gpedit.msc却看到"找不到文件"的提示时,那种挫败感我太熟悉了。作为一名长期使用家庭版系统的技术爱好者,我完全…...
air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属…...
终极指南:Mononoki编程字体特性详解 - 分数、上下标、连字功能实战教程
终极指南:Mononoki编程字体特性详解 - 分数、上下标、连字功能实战教程 【免费下载链接】mononoki a programming typeface 项目地址: https://gitcode.com/gh_mirrors/mo/mononoki Mononoki是一款专为程序员打造的等宽编程字体,以其清晰的字符区…...
一文讲清,排班管理方案是什么意思?如何制定有效的排班管理方案?
排班管理方案是企业依据业务需求、法律法规及员工技能,对人力资源进行时间与岗位分配的系统性规划,旨在实现降本增效与合规经营。制定一套科学的排班管理方案,不仅能解决“闲时人多、忙时人少”的运营痛点,还能通过公平的轮班机制…...
内容即世界,世界即产品:HappyOyster。即将开启创作者经济新范式
4月16日,阿里 ATH 创新事业部的 HappyOyster 正式开放内测[1]。这不是一款普通的产品升级——它把"建造一个世界"这件事,第一次放进了普通创作者的能力范围[2] [3]。一个根本性的问题随之浮现:如果每一个创作者都能建造自己的世界&…...
