当前位置: 首页 > news >正文

k8s认证

1. 证书介绍

服务端保留公钥和私钥,客户端使用root CA认证服务端的公钥

一共有多少证书:
*Etcd:

  1. Etcd对外提供服务,要有一套etcd server证书
  2. Etcd各节点之间进行通信,要有一套etcd peer证书
  3. Kube-APIserver访问Etcd,要有一套etcd client证书

kubernetes:

  1. Kube-apiserver对外提供服务,要有一套kube-apiserver server证书
  2. kube-scheduler、kube-controller-manager、kube-proxy、kubelet和其他可能用到的组件,需要访问kube-APIserver,要有一套kube-apiserver client证书
  3. kube-controller-manager要生成服务的service account,要有一对用来签署service account的证书(CA证书)
  4. kubelet对外提供服务,要有一套kubelet server证书
  5. 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. 证书介绍 服务端保留公钥和私钥&#xff0c;客户端使用root CA认证服务端的公钥 一共有多少证书&#xff1a; *Etcd&#xff1a; Etcd对外提供服务&#xff0c;要有一套etcd server证书Etcd各节点之间进行通信&#xff0c;要有一套etcd peer证书Kube-APIserver访问Etcd&a…...

基于python开发的IP修改工具

工作中调试设备需要经常修改电脑IP&#xff0c;非常麻烦&#xff0c;这里使用Pythontkinter做了一个IP修改工具 说明: 1.启动程序读取config.json文件2.如果没有该文件则创建&#xff0c;写入当前网卡信息3.通过配置信息进行网卡状态修改4.更新文件状态&#xff0c;删除或修…...

Mybatis源码分析

1. Mybatis整体三层设计 SSM中&#xff0c;Spring、SpringMVC已经在前面文章源码分析总结过了&#xff0c;Mybatis源码相对Spring和SpringMVC而言是的简单的&#xff0c;只有一个项目&#xff0c;项目下分了很多包。从宏观上了解Mybatis的整体框架分为三层&#xff0c;分别是基…...

python树结构包treelib入门及其计算应用

树是计算机科学中重要的数据结构。例如决策树等机器学习算法设计、文件系统索引等。创建treelib包是为了在Python中提供树数据结构的有效实现。 Treelib的主要特点包括&#xff1a; 节点搜索的高效操作。支持常见的树操作&#xff0c;如遍历、插入、删除、节点移动、浅/深复制…...

Rust之自动化测试(三): 测试组合

开发环境 Windows 10Rust 1.73.0 VS Code 1.83.1 项目工程 这里继续沿用上次工程rust-demo 测试组合 正如本章开始时提到的&#xff0c;测试是一个复杂的学科&#xff0c;不同的人使用不同的术语和组织。Rust社区根据两个主要类别来考虑测试:单元测试和集成测试。单元测试很…...

专业管理菜单的增删改、查重

1&#xff0c;点击专业管理菜单------查询所有专业信息列表 ①点击菜单&#xff0c;切换专业组件 ②切换到列表组件后&#xff0c;向后端发送请求到Servlet ③调用DAO层&#xff0c;查询数据库&#xff08;sql&#xff09;&#xff0c;封装查询到的内容 ④从后端向前端做出…...

vue3插件开发,上传npm

创建插件 在vue3工程下&#xff0c;创建组件vue页: toolset.vue。并设置组件名称。注册全局组件。新建index.js文件。内容如下&#xff0c;可在main.js中引入index.js&#xff0c;注册该组件进行测试。![在这里插入图片描述](https://img-blog.csdnimg.cn/a3409d2cbeec41c797d5…...

python【多线程、单线程、异步编程】三个版本--在爬虫中的应用

并发编程在爬虫中的应用 之前的课程&#xff0c;我们已经为大家介绍了 Python 中的多线程、多进程和异步编程&#xff0c;通过这三种手段&#xff0c;我们可以实现并发或并行编程&#xff0c;这一方面可以加速代码的执行&#xff0c;另一方面也可以带来更好的用户体验。爬虫程…...

大模型LLM相关面试题整理-位置编码-tokenizer-激活函数-layernorm

10 LLMs 位置编码篇 10.1.1 什么是位置编码&#xff1f; 位置编码是一种用于在序列数据中为每个位置添加位置信息的技术。在自然语言处理中&#xff0c;位置编码通常用于处理文本序列。由于传统的神经网络无法直接捕捉输入序列中的位置信息&#xff0c;位置编码的引入可以帮助…...

python在nacos注册微服务

安装 首先需要安装python的nacos sdk pip install nacos-sdk-python 注册 注册过程非常简单&#xff0c;需要注意的是&#xff0c;注册完要定时发送心跳&#xff0c;否则服务会被nacos删掉。 import nacos import timeSERVER_ADDRESSES "http://1.2.3.4:8848" …...

tuxera ntfs2024破解版mac电脑磁盘读写软件

大家都知道由于操作系统的原因&#xff0c;在苹果电脑上不能够读写NTFS磁盘&#xff0c;但是&#xff0c;今天小编带来的这款tuxera ntfs 2024 mac版&#xff0c;完美的解决了这个问题。这是一款在macOS平台上使用的磁盘读写软件&#xff0c;能够实现苹果Mac OS X系统读写Micro…...

【源码】C++坦克大战源码

文章目录 题目介绍你收到的所有文件源码效果展示报告内容 题目介绍 代码量&#xff1a;1450 语言&#xff1a;C 你收到的所有文件 其中一个是devc版本&#xff0c;也可以用visual stdio 运行。 源码效果展示 typedef struct //这里的出现次序指的是一个AI_ta…...

AIO开放接口平台免费畅享ChatGPT聊天、联网互动、学术等服务!更有DALL·E 3最强AI绘图功能!

免费畅享&#xff01; AIO平台ChatGPT联网、聊天、学术等服务&#xff01; AIO开放接口平台 | 服务介绍 ALL IN ONE &#xff08;AIO&#xff09;API服务是LLM(大语言模型)开放接口平台&#xff1a;持续接入各种主流的大模型接口&#xff0c;并提供简单、易用、统一的API交互…...

【python】屈小原现在要为学校写校庆贺文(CTGU百年校庆)

题目&#xff1a; """ 题目描述&#xff1a; 屈小原需要为学校的校庆写一篇贺文&#xff0c;共需写下n个字&#xff0c;但他目前只完成了1个字。屈小原可以进行两种操作&#xff1a; 在文档的末尾添加一个字&#xff0c;这样字数就会变为x1。 写下与当前字数相同…...

探索未来的视觉革命:卷积神经网络的崭新时代(二)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

博客后台模块续更(三)

四、后台模块-动态路由 实现了这个动态路由功能之后&#xff0c;就能在浏览器web页面登录进博客管理后台了 1. 接口分析 后台系统需要能实现不同的用户权限可以看到不同的功能&#xff0c;即左侧的导航栏 请求方式 请求地址 请求头 GET /getRouters 需要token请求头 …...

第十二届蓝桥杯模拟赛第三期

A填空题 问题描述 请问在 1 到 2020 中&#xff0c;有多少个数与 2020 互质&#xff0c;即有多少个数与 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天上岸经验分享

时间过得真快&#xff0c;转眼间已经是十月份了。回想起去年这个时候&#xff0c;我还在为考研而感到焦虑不安。然而&#xff0c;如今我已经在浙大MEM项目学习了一个多月的时间了。在这一个月的学习过程中&#xff0c;我不仅学到了许多专业知识&#xff0c;还结识了很多志同道合…...

增加并行度后,发现Flink窗口不会计算的问题。

文章目录 前言一、现象二、结论三、解决 前言 窗口没有关闭计算的问题&#xff0c;一直困扰了很久&#xff0c;经过多次验证&#xff0c;确定了问题的根源。 一、现象 Flink使用了window&#xff0c;同时使用了watermark &#xff0c;并且还设置了较高的并行度。生产是设置了…...

使用 JMeter 和 Docker 进行服务存根

用于性能测试的服务存根&#xff1a;简介 随着测试项目的复杂性不断增加&#xff0c;越来越多的被测系统的测试流程受到依赖系统的影响。当我说“依赖系统”时&#xff0c;我指的是&#xff1a; 不受当前开发影响的遗留系统 属于另一个组织的第三方服务 您的组织开发的系统&am…...

语音转文字神器FunASR体验:支持中英日韩多语言,识别效果惊艳

语音转文字神器FunASR体验&#xff1a;支持中英日韩多语言&#xff0c;识别效果惊艳 1. 为什么选择FunASR语音识别 在日常工作和生活中&#xff0c;我们经常需要将语音内容转换为文字。无论是会议记录、采访整理&#xff0c;还是视频字幕制作&#xff0c;传统的手工转录方式既…...

Pixel Fashion Atelier部署教程:Mac M2/M3芯片通过MLX适配Stable Diffusion方案

Pixel Fashion Atelier部署教程&#xff1a;Mac M2/M3芯片通过MLX适配Stable Diffusion方案 1. 项目介绍 Pixel Fashion Atelier是一款专为时尚设计打造的AI图像生成工具&#xff0c;基于Stable Diffusion与Anything-v5模型构建。它采用独特的像素艺术风格界面&#xff0c;将…...

告别光电编码器?聊聊MT6835磁编码器在直流无刷电机控制中的实战应用

告别光电编码器&#xff1f;MT6835磁编码器在直流无刷电机控制中的实战解析 在工业自动化与精密控制领域&#xff0c;电机位置反馈元件的选择往往直接影响系统性能和可靠性。传统光电编码器虽占据主流市场多年&#xff0c;但其对灰尘敏感、机械安装精度要求高等痛点始终困扰着工…...

算法实战:巧用连通块思想求解闭合区域面积

1. 连通块算法&#xff1a;从抽象概念到实际问题 第一次接触连通块算法时&#xff0c;我完全被这个抽象的概念搞懵了。直到有一天在玩扫雷游戏&#xff0c;突然意识到&#xff1a;那些被数字包围的空白区域&#xff0c;不就是典型的连通块吗&#xff1f;这个顿悟让我彻底理解了…...

Shared Control【共享控制】- 基于隐式动作学习的辅助机器人直觉化操控

1. 从游戏手柄到机械臂&#xff1a;为什么我们需要共享控制&#xff1f; 想象一下用游戏手柄操控一台工业机械臂的场景。手柄只有两个摇杆和几个按钮&#xff0c;而机械臂可能有7个自由度甚至更多。这种维度不匹配就像让只会说"左转""右转"的人去指挥一个能…...

别再到处找脚本了!Windows 11家庭版一键解锁组策略(gpedit.msc)的保姆级教程

Windows 11家庭版解锁组策略的终极指南&#xff1a;告别复杂脚本&#xff0c;三步搞定系统隐藏功能 每次在Windows 11家庭版上输入gpedit.msc却看到"找不到文件"的提示时&#xff0c;那种挫败感我太熟悉了。作为一名长期使用家庭版系统的技术爱好者&#xff0c;我完全…...

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属…...

终极指南:Mononoki编程字体特性详解 - 分数、上下标、连字功能实战教程

终极指南&#xff1a;Mononoki编程字体特性详解 - 分数、上下标、连字功能实战教程 【免费下载链接】mononoki a programming typeface 项目地址: https://gitcode.com/gh_mirrors/mo/mononoki Mononoki是一款专为程序员打造的等宽编程字体&#xff0c;以其清晰的字符区…...

一文讲清,排班管理方案是什么意思?如何制定有效的排班管理方案?

排班管理方案是企业依据业务需求、法律法规及员工技能&#xff0c;对人力资源进行时间与岗位分配的系统性规划&#xff0c;旨在实现降本增效与合规经营。制定一套科学的排班管理方案&#xff0c;不仅能解决“闲时人多、忙时人少”的运营痛点&#xff0c;还能通过公平的轮班机制…...

内容即世界,世界即产品:HappyOyster。即将开启创作者经济新范式

4月16日&#xff0c;阿里 ATH 创新事业部的 HappyOyster 正式开放内测[1]。这不是一款普通的产品升级——它把"建造一个世界"这件事&#xff0c;第一次放进了普通创作者的能力范围[2] [3]。一个根本性的问题随之浮现&#xff1a;如果每一个创作者都能建造自己的世界&…...