尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Argo CD 测试证书体系:E2E 测试用 TLS/mTLS 证书的设计、应用与再生成方法
Argo CD 测试证书体系E2E 测试用 TLS/mTLS 证书的设计、应用与再生成方法【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd在 Argo CD 的 E2E 测试中Git 仓库通过 HTTPS、客户端证书认证mTLS和 SSH 等多种协议访问而支撑这些测试的是一整套位于test/fixture/certs/目录下的测试用 TLS 证书。本篇技术文章围绕该目录的官方说明文档 test/fixture/certs/README.md 展开完整继承其中的证书文件清单、用途划分与 OpenSSL 再生成步骤并结合 E2E 测试框架、远端测试容器与 Nginx 配置等仓库源码讲清这些证书如何被argocd-server和argocd-repo-server在真实测试链路中消费。读完本文你可以掌握 Argo CD 测试 CA 的签发结构、本地与远端两种 E2E 模式下的证书注入机制以及按新 TLS 标准重新生成全套证书并校验证书链的完整操作流程。一、测试证书体系总览test/fixture/certs/目录包含 Argo CD 所有测试含 E2E 测试使用的 TLS 证书其中也包含用于签发这些证书的 CA 证书和私钥。官方文档对该目录的文件定义如下文件用途argocd-test-ca.crt 与 argocd-test-ca.key测试 CA 的证书与私钥argocd-test-client.crt 与 argocd-test-client.key用于 mTLS 测试的客户端证书/密钥对argocd-test-server.crt 与 argocd-test-server.key服务器证书/密钥对CNlocalhostSAN 包含 localhost、argocd-e2e-server、127.0.0.1argocd-e2e-server.crt 与 argocd-e2e-server.key远端 E2E 测试使用的服务器证书CNargocd-e2e-server所有私钥均无口令passphrase所有证书的有效期为 100 年36500 天。官方文档同时给出了明确的安全警示这套证书只允许用于 Argo CD 测试禁止用于任何生产或测试之外的用途。从源码结构看这套证书的设计对应 E2E 测试的两种运行形态本地模式localGit 仓库以localhost形式暴露服务器证书 CN 为localhostSAN 覆盖localhost、argocd-e2e-server、127.0.0.1因此同一张证书既能满足本地回环访问也能在需要时匹配远端主机名远端模式remote仓库容器部署在真实集群中以主机名argocd-e2e-server暴露因此单独签发了一张 CN 为argocd-e2e-server的服务器证书。二、证书在 E2E 测试中的实际消费链路2.1 E2E 测试框架注入测试 CAtest/e2e/fixture/certs/certs.go 中的AddCustomCACert函数是测试 CA 进入被测 Argo CD 实例的核心入口。它的逻辑分为两条分支caCertPath, err : filepath.Abs(../fixture/certs/argocd-test-ca.crt) // ... if fixture.IsLocal() { args : []string{cert, add-tls, localhost, --upsert, --from, caCertPath} // ... args []string{cert, add-tls, 127.0.0.1, --upsert, --from, caCertPath} // 同时将证书内容写入 fixture.TmpDir()/app/config/tls/localhost 与 .../127.0.0.1 } else { args : []string{cert, add-tls, argocd-e2e-server, --upsert, --from, caCertPath} // 追加后重启 argocd-server 与 argocd-repo-server 使配置生效 }也就是说本地模式下测试 CA 会分别注册到主机名localhost和127.0.0.1上并直接写入本地 Argo CD 的 TLS 数据目录app/config/tls/下——这个目录由 Makefile 的start-e2e-local目标通过ARGOCD_TLS_DATA_PATH$(ARGOCD_E2E_DIR)/app/config/tls指定。远端模式下则注册到argocd-e2e-server主机名并重启 API Server 和 Repo Server。函数注释还指出该操作影响的是全局 controller 状态后续应迁移到EnsureCleanState关联上游 issue #24307。2.2 远端 E2E 容器Nginx 直接加载服务器证书在远端 E2E 场景中承载 Git/Helm 仓库的容器镜像 test/remote/Dockerfile 将证书烘焙进镜像# These are required for running end-to-end tests COPY ./test/fixture/certs/argocd-e2e-server.crt /etc/certs/argocd-test-server.crt COPY ./test/fixture/certs/argocd-e2e-server.key /etc/certs/argocd-test-server.key COPY ./test/fixture/certs/argocd-test-ca.crt /etc/certs/argocd-test-ca.crt注意这里的映射细节镜像内的 Nginx 配置统一按argocd-test-server.crt/key的命名读取证书但实际内容来自argocd-e2e-server这对证书因为远端访问时客户端校验的主机名是argocd-e2e-server。Nginx 的站点配置 test/fixture/testrepos/nginx.conf 中有两个 TLS 监听端点9443端口普通 HTTPS 仓库访问9444端口启用客户端证书认证的 HTTPSmTLS仓库访问。两者均加载同一对argocd-test-server.crt/key。而 test/remote/run-e2e-remote.sh 则通过环境变量把仓库地址指向这些端点例如ARGOCD_E2E_REPO_HTTPShttps://argocd-e2e-server:9443/argo-e2e/testdata.git和ARGOCD_E2E_REPO_HTTPS_CLIENT_CERThttps://argocd-e2e-server:9444/argo-e2e/testdata.git后者即走 mTLS 通道。配套的AddHTTPSCredentialsTLSClientCert等函数定义在 test/e2e/fixture/repos/repos.go 中负责把 HTTPS/客户端证书仓库凭据添加到 E2E 测试上下文。2.3 本地模式下的端口转发约定在远端模式下仓库服务通常通过kubectl -n argocd-e2e port-forward service/argocd-e2e-server 9081:9081转发到本地见 test/remote/README.md这也是 test/e2e/fixture/certs/certs.go 中“本地仓库可用 localhost 访问、远端仓库可用 argocd-e2e-server 访问”这一 TLS 区分设计的直接来源同一个测试代码需要同时兼容主机名为localhost和argocd-e2e-server两种 TLS 校验场景服务器证书的 SAN 列表同时覆盖两者正是为此服务。三、再生成全套测试证书当需要按照更新的 TLS 标准重新生成证书时官方文档要求进入test/fixture/certs/目录后按以下顺序执行。以下命令完整继承自 test/fixture/certs/README.md。3.1 生成 CA 证书openssl genrsa -out argocd-test-ca.key 4096 openssl req -new -x509 -days 36500 -key argocd-test-ca.key \ -out argocd-test-ca.crt \ -subj /CNArgoCD Test CA \ -addext basicConstraintscritical,CA:TRUE \ -addext keyUsagecritical,keyCertSign,cRLSign参数说明openssl genrsa -out argocd-test-ca.key 4096生成 4096 位 RSA 私钥-days 36500有效期 100 年与现有证书保持一致-subj /CNArgoCD Test CACA 的 Common NamebasicConstraintscritical,CA:TRUE标记为关键扩展声明该证书是 CAkeyUsagecritical,keyCertSign,cRLSign限定 CA 只能用于签发证书和 CRL。3.2 生成服务器证书localhost 测试用openssl genrsa -out argocd-test-server.key 4096 openssl req -new -key argocd-test-server.key \ -out argocd-test-server.csr \ -subj /CNlocalhost cat server_ext.cnf EOF basicConstraintsCA:FALSE keyUsagecritical,digitalSignature,keyEncipherment extendedKeyUsageserverAuth subjectAltNameDNS:localhost,DNS:argocd-e2e-server,IP:127.0.0.1 EOF openssl x509 -req -in argocd-test-server.csr \ -CA argocd-test-ca.crt -CAkey argocd-test-ca.key \ -CAcreateserial -out argocd-test-server.crt \ -days 36500 -sha256 \ -extfile server_ext.cnf rm -f server_ext.cnf argocd-test-server.csr argocd-test-ca.srl关键扩展字段解读extendedKeyUsageserverAuth限定该证书只能用作 TLS 服务端身份subjectAltNameDNS:localhost,DNS:argocd-e2e-server,IP:127.0.0.1这一 SAN 列表必须完整保留因为 E2E 测试的本地模式与远端模式都依赖它见 2.1、2.3 节。如果重新生成时遗漏argocd-e2e-server远端 E2E 场景下argocd-repo-server访问 9443/9444 端点时的 TLS 主机名校验会失败-extfile server_ext.cnf方式传入扩展比-addext更适合多行 SAN 配置。3.3 生成客户端证书mTLS 测试用openssl genrsa -out argocd-test-client.key 4096 openssl req -new -key argocd-test-client.key \ -out argocd-test-client.csr \ -subj /CNArgoCD Test Client cat client_ext.cnf EOF basicConstraintsCA:FALSE keyUsagecritical,digitalSignature,keyEncipherment extendedKeyUsageclientAuth EOF openssl x509 -req -in argocd-test-client.csr \ -CA argocd-test-ca.crt -CAkey argocd-test-ca.key \ -CAcreateserial -out argocd-test-client.crt \ -days 36500 -sha256 \ -extfile client_ext.cnf rm -f client_ext.cnf argocd-test-client.csr argocd-test-ca.srl客户端证书与服务端证书的差异在于extendedKeyUsageclientAuth且无 SAN它对应 Nginx 9444 端点的客户端证书认证链路argocd-repo-server以该证书作为 mTLS 客户端证书访问ARGOCD_E2E_REPO_HTTPS_CLIENT_CERT仓库。3.4 生成 E2E 服务器证书远端测试用openssl genrsa -out argocd-e2e-server.key 4096 openssl req -new -key argocd-e2e-server.key \ -out argocd-e2e-server.csr \ -subj /CNargocd-e2e-server cat e2e_server_ext.cnf EOF basicConstraintsCA:FALSE keyUsagecritical,digitalSignature,keyEncipherment extendedKeyUsageserverAuth subjectAltNameDNS:argocd-e2e-server,DNS:localhost,IP:127.0.0.1 EOF openssl x509 -req -in argocd-e2e-server.csr \ -CA argocd-test-ca.crt -CAkey argocd-test-ca.key \ -CAcreateserial -out argocd-e2e-server.crt \ -days 36500 -sha256 \ -extfile e2e_server_ext.cnf rm -f e2e_server_ext.cnf argocd-e2e-server.csr argocd-test-ca.srl这张证书的 SAN 顺序与 3.2 节略有不同argocd-e2e-server在前但覆盖的主机名集合一致确保无论客户端以哪个名称访问都能通过校验。3.5 校验证书链重新生成后用测试 CA 逐一校验三张叶子证书的签发链openssl verify -CAfile argocd-test-ca.crt argocd-test-server.crt openssl verify -CAfile argocd-test-ca.crt argocd-test-client.crt openssl verify -CAfile argocd-test-ca.crt argocd-e2e-server.crt三条命令均应返回对应的: OK。校验通过后还需注意两个同步要求远端 E2E 镜像按 test/remote/Dockerfile 将test/fixture/certs/下的文件烘焙进镜像因此更新证书后需要重新构建并推送argocd-e2e-cluster镜像make image make image-push见 test/remote/README.md由于所有密钥无口令且属于测试用途重新生成后的文件应仅提交/保留在测试代码仓库内绝不用于生产组件。四、设计要点小结从上述文档与源码可以归纳出这套测试证书体系的三个设计要点单 CA 统一管理服务器、客户端、远端服务器三类叶子证书全部由ArgoCD Test CA签发argocd cert add-tls只需注册一张 CA 即可让argocd-server、argocd-repo-server信任全部测试仓库端点SAN 双主机名覆盖服务器证书同时覆盖localhost与argocd-e2e-server使同一套 E2E 用例如 test/e2e/diff_test.go 中对远端仓库数据的引用能在本地与远端两种部署形态下复用密钥无口令换取自动化测试框架goreman启动的本地进程、远端 Nginx 容器需要在无人值守情况下加载私钥因此私钥不带 passphrase代价是这些文件必须严格限定在测试场景使用。掌握以上内容后你既能按官方文档完成测试证书的再生成与校验也能在排查 E2E 测试中 HTTPS 仓库拉取失败、mTLS 认证错误等问题时准确定位到argocd cert add-tls注册、Nginxssl_certificate配置或镜像内证书烘焙这三类环节中的具体一环。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

OrcaTerm深度体验:2026年AI终端如何重塑命令行工作流

OrcaTerm深度体验:2026年AI终端如何重塑命令行工作流

如果你问我2026年哪个AI终端最值得体验,我会毫不犹豫地说是OrcaTerm。这段时间我把它当主力终端用了几个星期,甚至把之前一直舍不得换下的Tabby和iTerm2都晾在了一边。OrcaTerm不是那种把AI聊天窗口塞进终端里的花架子,它的AI能力都顺着终端本…

📅 2026/9/14 15:37:55
手把手实现中文Transformer对话系统:从词表构建到推理部署

手把手实现中文Transformer对话系统:从词表构建到推理部署

简介:这是一份基于Transformer架构实现的单轮中文对话聊天机器人完整项目资源,面向计算机、人工智能、自动化等专业的在校学生、教师及初学者,适用于课程设计、毕业设计、项目演示或自然语言处理入门实践。资源包共13个文件,含6个…

📅 2026/9/14 15:37:55
CCF-GESP C++四级真题复盘:结构体排序与二分查找实战解析

CCF-GESP C++四级真题复盘:结构体排序与二分查找实战解析

每年6月那场CCF-GESP编程能力等级认证,C四级都是一道分水岭。我周围不少带学生考级的教练朋友,都会把四级当作“算法入门”的真正起点——前面的级别考的是语法和基础逻辑,四级开始上强度,数组、字符串、结构体、排序和二分这些硬…

📅 2026/9/14 15:37:55
MORE NEWS

更多资讯

📰

MCP Toolbox for Databases 的 Couchbase 数据源配置详解:从连接串到参数化 SQL 工具

MCP Toolbox for Databases 的 Couchbase 数据源配置详解:从连接串到参数化 SQL 工具 【免费下载链接】mcp-toolbox MCP Toolbox for Databases is an open source MCP server for databases. 项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox …

📰

Argo CD 测试证书体系:E2E 测试用 TLS/mTLS 证书的设计、应用与再生成方法

Argo CD 测试证书体系:E2E 测试用 TLS/mTLS 证书的设计、应用与再生成方法 【免费下载链接】argo-cd Declarative Continuous Deployment for Kubernetes 项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd 在 Argo CD 的 E2E 测试中,Gi…

📰

OrcaTerm深度体验:2026年AI终端如何重塑命令行工作流

如果你问我2026年哪个AI终端最值得体验,我会毫不犹豫地说是OrcaTerm。这段时间我把它当主力终端用了几个星期,甚至把之前一直舍不得换下的Tabby和iTerm2都晾在了一边。OrcaTerm不是那种把AI聊天窗口塞进终端里的花架子,它的AI能力都顺着终端本…

📰

手把手实现中文Transformer对话系统:从词表构建到推理部署

简介:这是一份基于Transformer架构实现的单轮中文对话聊天机器人完整项目资源,面向计算机、人工智能、自动化等专业的在校学生、教师及初学者,适用于课程设计、毕业设计、项目演示或自然语言处理入门实践。资源包共13个文件,含6个…

📰

CCF-GESP C++四级真题复盘:结构体排序与二分查找实战解析

每年6月那场CCF-GESP编程能力等级认证,C四级都是一道分水岭。我周围不少带学生考级的教练朋友,都会把四级当作“算法入门”的真正起点——前面的级别考的是语法和基础逻辑,四级开始上强度,数组、字符串、结构体、排序和二分这些硬…

📰

AI开题报告生成工具:技术原理与应用实践

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

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬