Calico FV 测试证书体系全解析:从 cfssl 生成到 k8s 测试基础设施挂载
网络云原生网络安全【免费下载链接】calicoCloud native networking and network security项目地址https://gitcode.com/gh_mirrors/cal/calico点击查看免费下载本文围绕 Calico 仓库中 hack/test/certs/README.md 所描述的 FVFeature Validation测试证书目录展开系统讲解这套仅用于测试环境的 Kubernetes PKI 证书体系——包括根 CA、admin 客户端证书、API Server 证书与 Service Account 密钥的生成逻辑regenerate.sh、cfssl 签名配置、两类 kubeconfig 的差异以及证书最终如何被挂载进 Felix FV 测试中临时启动的 kube-apiserver 容器。读完本文你将掌握 Calico FV 测试 TLS 基础设施的完整链路并能在本地复现证书再生成流程。FV 证书的作用与适用场景根据 hack/test/certs/README.md 的说明该目录下的全部密钥与证书仅在当前仓库的 FV 测试中使用并且是按照开源社区广泛流传的 Kubernetes the Hard Way 教程的步骤生成的。这意味着它并非生产环境制品而是一套为测试用例临时拉起真实 kube-apiserver 而准备的信任链。FV 测试之所以需要完整 PKI是因为 Felix 的数据面测试见 felix/fv/infrastructure/infra_k8s.go会在容器内启动一个真实的 kube-apiserver 与 kube-controller-manager用于验证 Calico 与 Kubernetes 的集成行为。API Server 需要 TLS 证书对外提供 HTTPS 服务控制器需要 Service Account 密钥完成 SA Token 签发客户端则需要合法证书访问 API——目录中每一份材料都对应测试链路上的一个角色。目录完整内容如下文件角色ca.pem/ca-key.pem根 CA 证书与私钥签发链的信任锚点ca-config.json/ca-csr.jsoncfssl 的签名策略配置与 CA 证书签名请求admin.pem/admin-key.pemadmin 客户端证书Osystem:masterskubernetes.pem/kubernetes-key.pemAPI Server 服务端证书含 SANservice-account.pem/service-account-key.pemService Account 签名密钥对admin-csr.json/kubernetes-csr.json/service-account-csr.json各证书的 CSR 定义kubeconfigadmin 用户访问测试 API Server 的客户端配置kube-controller-manager.kubeconfig控制器访问 API Server 的配置证书内嵌regenerate.sh一键再生成全部密钥与证书的脚本证书信任链架构一个 CA 派生全部凭证从目录中四组 CSR 与证书可以清晰看出整套体系采用单一根 CA 多角色证书的经典结构根 CACNKubernetes由ca-csr.json定义regenerate.sh通过cfssl gencert -initca初始化是所有下级证书的签发者admin 客户端证书CNadminadmin-csr.json中Osystem:masters使该证书具备集群管理员权限用于 FV 测试中 kubectl 对 API Server 的读写操作kubernetes 服务端证书CNkubernetes同时充当 API Server 的服务端证书其 SAN 覆盖10.96.0.1集群 Service IP、127.0.0.1及一组kubernetes.default域名确保容器内外的多种访问方式都能通过 TLS 校验service-account 密钥对CNservice-accounts用于 kube-controller-manager 签发/校验 ServiceAccount Token是测试集群内 Pod 身份认证的基础。其中kubernetes-csr.json的 CN 与 SAN 设计值得注意KUBERNETES_HOSTNAMES变量见 regenerate.sh覆盖了kubernetes、kubernetes.default、kubernetes.default.svc、kubernetes.default.svc.cluster与kubernetes.svc.cluster.local五个主机名这些正是 kube-apiserver 以 Service 形式暴露时客户端可能使用的 DNS 名称。cfssl 签名策略与 CSR 配置逐项解析签名策略ca-config.json{ signing: { default: { expiry: 87600h }, profiles: { kubernetes: { usages: [signing, key encipherment, server auth, client auth], expiry: 87600h } } } }该配置定义了一个名为kubernetes的签名 profile核心参数含义expiry: 87600h证书有效期 10 年87600 小时测试证书无需频繁轮换usages同时包含server auth与client auth使同一把kubernetes证书既能充当服务端证书也能作为客户端证书复用这是测试环境的务实做法signing与key encipherment允许证书用于签名与密钥封装满足 API Server 的 TLS 握手需求。CSR 公共字段四份 CSRca-csr.json、admin-csr.json、kubernetes-csr.json、service-account-csr.json的密钥参数一致rsa算法、2048位长度组织信息统一为CUS, LPortland, STOregon, OKubernetes, OUCAadmin 证书的 OU 为Kubernetes The Hard Way。差异集中在CN与OCSRCNO组织用途ca-csr.jsonKubernetesKubernetes根 CA 自身admin-csr.jsonadminsystem:masters管理员客户端kubernetes-csr.jsonkubernetesKubernetesAPI Server 服务端service-account-csr.jsonservice-accountsKubernetesSA Token 签名admin证书的Osystem:masters是关键设计kube-apiserver 默认将system:masters组映射为超级管理员测试中的 kubectl 操作因此无需额外 RBAC 配置。一键再生成regenerate.sh 完整流程README 明确指出要重新生成证书运行./regenerate.sh该脚本会彻底删除并重建全部密钥与证书包括根 CA。完整脚本内容如下regenerate.sh#!/bin/bash set -xe rm -f *.pem *.key *.csr cfssl gencert -initca ca-csr.json | cfssljson -bare ca cfssl gencert \ -caca.pem \ -ca-keyca-key.pem \ -configca-config.json \ -profilekubernetes \ admin-csr.json | cfssljson -bare admin KUBERNETES_HOSTNAMESkubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.svc.cluster.local cfssl gencert \ -caca.pem \ -ca-keyca-key.pem \ -configca-config.json \ -hostname10.96.0.1,127.0.0.1,${KUBERNETES_HOSTNAMES} \ -profilekubernetes \ kubernetes-csr.json | cfssljson -bare kubernetes cfssl gencert \ -caca.pem \ -ca-keyca-key.pem \ -configca-config.json \ -profilekubernetes \ service-account-csr.json | cfssljson -bare service-account kubectl config set-credentials system:kube-controller-manager \ --client-certificateadmin.pem \ --client-keyadmin-key.pem \ --embed-certstrue \ --kubeconfigkube-controller-manager.kubeconfig rm *.csr脚本执行顺序与关键点清场rm -f *.pem *.key *.csr删除当前目录全部旧制品保证每次再生成都是全新信任链根 CA 也会重建因此旧证书立即全部失效生成根 CAcfssl gencert -initca ca-csr.json | cfssljson -bare ca产出ca.pem与ca-key.pem签发 admin 证书使用-profilekubernetes签名策略产出admin.pem与admin-key.pem签发 kubernetes 证书这是唯一带-hostname参数的一步SAN 列表由10.96.0.1,127.0.0.1与KUBERNETES_HOSTNAMES拼接而成10.96.0.1对应 kube-apiserver 的 ClusterIP 段127.0.0.1对应本地回环访问签发 service-account 证书与 admin 相同仅用 CSR 与 profile生成控制器 kubeconfig用kubectl config set-credentials将 admin 证书内嵌--embed-certstrue写入kube-controller-manager.kubeconfigsystem:kube-controller-manager是 Kubernetes 内置的系统用户名收尾删除所有中间.csr文件。环境依赖方面脚本依赖cfssl/cfssljson与kubectl两个命令行工具且默认假设在hack/test/certs目录内执行set -xe保证出错即停、输出执行过程。执行后再生成时只要测试基础设施按同一路径挂载新证书见下文FV 测试即可继续工作。两类 kubeconfig 的差异与设计意图目录中的两份 kubeconfig 形态完全不同值得对比理解。admin 版 kubeconfigkubeconfigapiVersion: v1 clusters: - cluster: insecure-skip-tls-verify: true server: https://127.0.0.1:6443 name: test-apiserver contexts: - context: cluster: test-apiserver user: admin name: admin current-context: admin kind: Config users: - name: admin user: # The tests which use this kubeconfig are run in a container # and expect these files to be mounted at this location. client-certificate: /home/user/certs/admin.pem client-key: /home/user/certs/admin-key.pem要点server: https://127.0.0.1:6443指向测试容器内 kube-apiserver 的标准监听地址证书以文件路径引用方式配置且注释明确指出使用该 kubeconfig 的测试运行在容器中期望证书被挂载到/home/user/certs这一固定位置开启insecure-skip-tls-verify: true因为测试环境为临时集群跳过对 API Server 证书链的校验可简化故障排查。控制器版 kubeconfigkube-controller-manager.kubeconfig与 admin 版不同这份 kubeconfig 通过kubectl config set-credentials --embed-certstrue生成client-certificate-data与client-key-data两个字段中直接内嵌了 Base64 编码的证书与私钥无需外部文件server字段为空字符串实际访问地址由测试基础设施在启动控制器时另行指定。两种形态对应两种使用环境admin kubeconfig 供测试容器内手动执行的 kubectl 命令使用文件挂载即可控制器 kubeconfig 则因 kube-controller-manager 由测试框架以容器参数方式拉起内嵌证书可避免额外的挂载编排。证书在 FV 测试中的实际挂载链路证书最终价值的体现点在 felix/fv/infrastructure/infra_k8s.go该文件是 Felix FV 测试的 Kubernetes 基础设施封装从源码结构可以看到完整的挂载与消费关系统一挂载点通过-v $CERTS_PATH:/home/user/certsCERTS_PATH为环境变量将证书目录整体挂载进 kube-apiserver、kube-controller-manager 与客户端容器与 kubeconfig 中的/home/user/certs路径一一对应API Server 消费--service-account-key-file/home/user/certs/service-account.pem、--service-account-signing-key-file/home/user/certs/service-account-key.pem、--client-ca-file/home/user/certs/ca.pem、--tls-cert-file/home/user/certs/kubernetes.pem、--tls-private-key-file/home/user/certs/kubernetes-key.pem——即用kubernetes.pem对外提供 TLS 服务、用ca.pem校验客户端证书、用service-account密钥对完成 SA Token 的签发kube-controller-manager 消费--kubeconfig/home/user/certs/kube-controller-manager.kubeconfig与--root-ca-file/home/user/certs/ca.pem、--service-account-private-key-file/home/user/certs/service-account-key.pem控制器据此访问 API Server 并签发 SA Token客户端消费测试中的 kubectl 通过--kubeconfig/home/user/certs/kubeconfig apply -f /crds/等命令应用 CRD 清单其身份凭证正是admin.pem与admin-key.pemTLS 校验方向kubernetes.pem还会被复制进客户端容器kubernetes.pem作为 CA 信任链上传确保客户端到 API Server 的 HTTPS 连接可完成证书链验证。由此可以完整还原测试链路根 CA 签发三张证书 → 证书以目录挂载形式进入各测试容器 → kube-apiserver 用 kubernetes 证书对外服务、用 ca.pem 校验 admin 客户端 → admin 证书驱动 kubectl 操作 → service-account 密钥对支撑控制器签发 SA Token四个角色各司其职、缺一不可。再生成时的注意事项运行./regenerate.sh会连同根 CA 一起删除重建因此这是推倒重来式的操作而不是增量轮换再生成后所有依赖旧证书的已运行容器需重新拉起脚本使用set -xe任何一步失败都会立即终止可通过执行日志快速定位是 cfssl 配置问题还是工具缺失再生成后需确保$CERTS_PATH指向新证书目录且挂载路径仍为/home/user/certs否则 kubeconfig 中引用的绝对路径将失效由于ca-config.json中expiry长达 87600 小时10 年日常开发中该目录极少需要再生成README 提供该脚本的意义更多在于保证证书来源可追溯、可重建避免仓库内长期滞留无法再生的测试密钥。综上Calico 的 FV 证书目录是一个小而完整的 PKI 实践样本它用 cfssl 完成单 CA 多角色证书的标准化签发用两种 kubeconfig 适配容器化测试的两种消费方式并在infra_k8s.go中形成了目录挂载 启动参数的确定性交付链路。理解这套体系不仅能看懂 Calico FV 测试的 TLS 握手过程也能为其他需要自建测试集群 PKI 的项目提供直接可复用的参考模板。赞分享网络云原生网络安全【免费下载链接】calicoCloud native networking and network security项目地址https://gitcode.com/gh_mirrors/cal/calico点击查看免费下载相关推荐EMQX 测试基础设施中的 TLS 证书体系docker-compose 测试服务证书的生成、命名与维护EMQX 测试基础设施中的 TLS 证书体系docker compose 测试服务证书的生成、命名与维护 本篇技术指南聚焦 EMQX 开源仓库中为 docke后端物联网消息队列通信Lore 服务端 mTLS 测试证书体系test_data 目录与 QUIC 安全测试基础设施Lore 服务端 mTLS 测试证书体系test_data 目录与 QUIC 安全测试基础设施 本文围绕 Lore 仓库中的测试证书目录 lore serve版本控制后端Recommenders 测试体系深度解析从 PR Gate 到 Nightly Build 的 MLOps 测试基础设施Recommenders 测试体系深度解析从 PR Gate 到 Nightly Build 的 MLOps 测试基础设施 Recommenders 是微软开人工智能机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MATLAB向量完全指南:从创建、索引到运算与排错

MATLAB向量完全指南:从创建、索引到运算与排错

这期继续更MATLAB基础学习笔记,主题是向量。前两篇分别把基本操作和矩阵、数组的概念理了一遍,这次专门把向量单独拎出来聊,原因是很多初学者在真正动手写脚本时,第一个卡住的地方往往不是矩阵操作,而是“向量到底该怎…

2026/10/10 22:42:25 阅读更多 →
WMS系统架构与高并发库存一致性实战指南

WMS系统架构与高并发库存一致性实战指南

简介:本资源是一份面向制造业企业IT部门、物流系统实施顾问及WMS项目管理人员的《WMS数字化仓储物流(成品库)建设方案》完整PPT汇报材料,聚焦解决传统成品库设备陈旧、信息化水平低、人工成本高等核心痛点。方案覆盖项目背景与目标…

2026/10/10 22:42:25 阅读更多 →
深入拆解ThreadLocal:线程隔离、弱引用、内存泄漏与OOM排查

深入拆解ThreadLocal:线程隔离、弱引用、内存泄漏与OOM排查

并发编程系列写到这一篇,前面的内容基本都在围绕一个词打转:共享。锁、原子类、并发容器,本质上都是想让多个线程更安全、更高效地协作同一份数据。而ThreadLocal的思路是反着来的——既然共享这么容易出问题,那干脆每个线程各存一…

2026/10/10 22:42:25 阅读更多 →

最新新闻

在 Turborepo 与 Yarn Berry 中开发 Next.js 应用:with-berry 示例 Web 应用实战指南

在 Turborepo 与 Yarn Berry 中开发 Next.js 应用:with-berry 示例 Web 应用实战指南

构建工具开发工具CLI 【免费下载链接】turbo Build system optimized for JavaScript and TypeScript, written in Rust 项目地址: https://gitcode.com/gh_mirrors/tu/turbo 点击查看 免费下载 本篇指南以 Turborepo 仓库中 with-berry 示例的 apps/web 应用 READ…

2026/10/10 23:30:04 阅读更多 →
Serverless 冷启动 + Orleans 虚拟 Actor:Agent Substrate 的架构血统考

Serverless 冷启动 + Orleans 虚拟 Actor:Agent Substrate 的架构血统考

Serverless 冷启动 Orleans 虚拟 Actor:Agent Substrate 的架构血统考 【免费下载链接】substrate Agent Substrate: the core system 项目地址: https://gitcode.com/GitHub_Trending/substrate7/substrate 一个看似矛盾的事实正在改写云原生的资源模型&am…

2026/10/10 23:30:04 阅读更多 →
300 轮长会话实测:哪些内容会被 fast-jev-compaction 的「二元删除决策」误伤?

300 轮长会话实测:哪些内容会被 fast-jev-compaction 的「二元删除决策」误伤?

300 轮长会话实测:哪些内容会被 fast-jev-compaction 的「二元删除决策」误伤? 【免费下载链接】fast-jev-compaction Claude Code plugin that replaces the compaction summary with Jev decisions: every tool call and result is scored in one fast…

2026/10/10 23:30:04 阅读更多 →
FireRedTTS3架构剖析:Qwen3 LLM + DiT流匹配如何实现patch级扩散自回归TTS

FireRedTTS3架构剖析:Qwen3 LLM + DiT流匹配如何实现patch级扩散自回归TTS

【免费下载链接】FireRedTTS3 FireRedTTS3: Multilingual and Multi-Dialect Voice Cloning with Instruction-Guided Voice Design and Speech Editing 项目地址: https://gitcode.com/gh_mirrors/fi/FireRedTTS3 点击查看 免费下载 FireRedTTS3 是一个统一的多语…

2026/10/10 23:30:04 阅读更多 →
Selenium自动化测试:抽奖系统概率、库存与UI回归实战

Selenium自动化测试:抽奖系统概率、库存与UI回归实战

抽奖系统的测试,最让人心里没底的从来不是某个按钮能不能点,而是那些肉眼看不透的规则到底有没有在线上环境按预期跑。“中奖概率偏差了零点几”、“库存多扣了一次”、“连续快速点击会不会发出两条抽奖请求”,这类问题在演示环境里靠手工点…

2026/10/10 23:30:04 阅读更多 →
BFO-XGBoost超参数优化:Matlab实现与避坑指南

BFO-XGBoost超参数优化:Matlab实现与避坑指南

简介:本资源面向计算机、电子信息工程、数学等专业的大学生及算法初学者,提供一套基于鳑鲏鱼优化算法(BFO)优化XGBoost的分类预测完整方案,可用于课程设计、期末大作业或毕业设计。压缩包共18个文件,约53.6…

2026/10/10 23:29:04 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →