资讯详情

Argo CD `argocd cert` 命令全解:仓库 TLS 证书与 SSH known hosts 条目管理实战

📅 2026/9/13 23:02:33 | 华诺云谱 👁 阅读
Argo CD `argocd cert` 命令全解:仓库 TLS 证书与 SSH known hosts 条目管理实战
Argo CDargocd cert命令全解仓库 TLS 证书与 SSH known hosts 条目管理实战【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cdargocd cert是 Argo CD CLI 中专门用于管理仓库Repository连接凭证的命令组负责维护两类信任数据用于 HTTPS 仓库的 TLS 证书以及用于 SSH 仓库的 known hosts 主机公钥条目。通过本文你将掌握add-tls、add-ssh、list、rm四个子命令的完整用法与参数细节理解证书在 Argo CD 内部的存储机制ConfigMap、RBAC 权限模型与 gRPC API 调用链能够独立完成仓库证书的添加、查询与安全清理。一、命令总览argocd cert能做什么在 Argo CD 中应用仓库可能是私有 Git 仓库、Helm Chart 仓库等连接方式包括 HTTPS 与 SSH 两种。当仓库服务器使用自签名 TLS 证书或 SSH 主机密钥不在 Argo CD 内置信任列表时就需要通过argocd cert命令组将这些信任数据录入 Argo CD 的证书存储中否则仓库校验会失败。argocd cert顶层命令本身只输出帮助信息并退出源码中Run直接调用c.HelpFunc()后os.Exit(1)见 cert.go真正的工作由四个子命令完成子命令功能对应文档argocd cert add-tls为指定仓库服务器添加 TLS 证书argocd_cert_add-tls.md 同目录下的argocd_cert_add-tls.mdargocd cert add-ssh批量添加 SSH known hosts 条目argocd_cert_add-ssh.mdargocd cert list列出已配置的证书argocd_cert_list.mdargocd cert rm按仓库服务器删除指定类型证书argocd_cert_rm.md这些子命令的注册代码位于 cert.go通过command.AddCommand(...)依次挂载最终由argocd根命令统一调度根命令定义见 root.go。二、顶层命令语法与全局选项基本语法argocd cert [flags]官方示例可直接复制使用# 从文件添加 cd.example.com 的 TLS 证书到 Argo CD 证书库 argocd cert add-tls --from ~/mycert.pem cd.example.com # 通过 stdin 将 TLS 证书添加到 Argo CD cat ~/mycert.pem | argocd cert add-tls cd.example.com # 通过扫描主机为 cd.example.com 添加 SSH known host 条目 ssh-keyscan cd.example.com | argocd cert add-ssh --batch # 列出所有已知的 TLS 证书 argocd cert list --cert-type https # 删除 cd.example.com 的所有 TLS 证书 argocd cert rm --cert-type https cd.example.com # 删除 cd.example.com 的所有证书TLS 与 SSH与 SSH known hosts 条目 argocd cert rm cd.example.com顶层命令选项选项说明--cluster string要使用的 kubeconfig 集群名称--context string要使用的 kubeconfig 上下文名称-h, --help显示 cert 帮助--insecure-skip-tls-verify为 true 时不校验服务器证书有效性会使 HTTPS 连接不安全--kubeconfig stringkube config 路径仅集群外使用时需要-n, --namespace string指定该 CLI 请求的命名空间作用域--password string访问 API 服务器的基础认证密码--proxy-url string通过代理连接时使用的 URL--request-timeout string单个服务器请求的超时时间非零值需带时间单位如 1s、2m、3h0 表示不超时默认0--token string访问 API 服务器的 Bearer token--user string要使用的 kubeconfig 用户名称--username string访问 API 服务器的基础认证用户名从父命令继承的选项所有argocd cert子命令还共享以下全局选项来自argocd根命令选项说明--argocd-context string要使用的 Argo CD 服务器上下文名称--auth-token string认证 token可设置或使用ARGOCD_AUTH_TOKEN环境变量--client-crt string客户端证书文件--client-crt-key string客户端证书私钥文件--config stringArgo CD 配置文件路径默认/home/user/.config/argocd/config--controller-name stringApplication controller 名称当名称标签与默认值不同时如通过 Helm chart 安装需设置或使用ARGOCD_APPLICATION_CONTROLLER_NAME默认argocd-application-controller--core为 true 时 CLI 直接与 Kubernetes 通信而不通过 Argo CD API 服务器--grpc-web启用 gRPC-web 协议当 Argo CD 服务器位于不支持 HTTP2 的代理之后时使用--grpc-web-root-path string启用 gRPC-web 协议并设置 web root-H, --header strings为所有请求附加额外 header可重复指定多个也支持逗号分隔--http-retry-max int与 Argo CD 服务器建立 HTTP 连接的最大重试次数--insecure跳过服务器证书与域名验证--kube-context string指定命令使用的 kube-context--logformat string日志格式json或text默认json--loglevel string日志级别debug、info、warn、error默认info--plaintext禁用 TLS--port-forward通过端口转发连接到一个随机的 argocd-server 端口--port-forward-namespace string端口转发使用的命名空间--prompts-enabled强制启用或禁用可选的交互式提示覆盖本地配置未指定时使用本地配置值默认 false--redis-compress string当 application controller 配置了 redis 压缩时启用可选值gzip、none默认gzip--redis-haproxy-name stringRedis HA Proxy 名称默认argocd-redis-ha-haproxy可用ARGOCD_REDIS_HAPROXY_NAME覆盖--redis-name stringRedis deployment 名称默认argocd-redis可用ARGOCD_REDIS_NAME覆盖--repo-server-name stringRepo server 名称默认argocd-repo-server可用ARGOCD_REPO_SERVER_NAME覆盖--server stringArgo CD 服务器地址--server-crt string服务器证书文件--server-name stringArgo CD API 服务器名称默认argocd-server可用ARGOCD_SERVER_NAME覆盖三、添加 TLS 证书argocd cert add-tls当仓库通过 HTTPS 提供服务且使用了自签名或非公共 CA 签发的证书时用该命令将 PEM 格式证书录入 Argo CD。语法与选项argocd cert add-tls SERVERNAME [flags]选项说明--from string从文件读取 TLS 证书数据默认从 stdin 读取--upsert输入中的证书与现有证书不同时替换已有 TLS 证书-h, --help显示 add-tls 帮助注意SERVERNAME是必填位置参数源码中len(args) ! 1时会打印帮助并以退出码 1 结束cert.go。典型用法# 从文件读取文件可包含多张证书 argocd cert add-tls --from ~/mycert.pem cd.example.com # 从 stdin 管道输入 cat ~/mycert.pem | argocd cert add-tls cd.example.com # 覆盖更新已有条目 argocd cert add-tls --from ~/mycert.pem --upsert cd.example.com源码级原理从源码 cert.go 可以看到完整的处理链路读取输入指定--from时调用certutil.ParseTLSCertificatesFromPath否则从 stdin 调用certutil.ParseTLSCertificatesFromStream读取 PEM 数据。解析与限制解析逻辑位于 util/cert/cert.go流式扫描-----BEGIN CERTIFICATE-----/-----END CERTIFICATE-----标记。单张证书超过CertificateMaxLines128 行会报错单次输入超过CertificateMaxEntriesPerStream256 条会返回limit exceeded。去重CLI 通过deduplicatePEMCertificatescert.go计算每张证书的 SHA256 指纹certFingerprintSHA256重复证书会被跳过并打印 WARNING保证录入的每条记录都是唯一证书。构造请求生成一个appsv1.RepositoryCertificate对象类型定义见 repository_types.go其中ServerName取位置参数CertType固定为httpsCertData为多张唯一 PEM 证书以换行连接后的字节序列。调用 gRPC API通过NewCertClientOrDieWithContext建立到 Argo CD API 服务器的连接调用certIf.CreateCertificate(ctx, RepositoryCertificateCreateRequest{Certificates: ..., Upsert: upsert})。成功后会输出形如Created/updated TLS certificate entry for repository server cd.example.com with N unique PEM certificates的确认信息。四、添加 SSH known hostsargocd cert add-sshSSH 方式连接 Git 仓库时Argo CD 依赖 known hosts 数据校验服务器主机密钥。该命令批量录入这些条目。语法与选项argocd cert add-ssh --batch [flags]选项说明--batch批量处理读取 SSH known hosts 数据强制标志--from string从文件读取 SSH known hosts 数据默认从 stdin 读取--upsert输入中的公钥与现有密钥不同时替换 SSH 服务器公钥-h, --help显示 add-ssh 帮助典型用法# 扫描主机公钥并批量录入最常用 ssh-keyscan cd.example.com | argocd cert add-ssh --batch # 从本地 known_hosts 文件读取 argocd cert add-ssh --batch --from ~/.ssh/known_hosts # 覆盖更新已有条目 ssh-keyscan cd.example.com | argocd cert add-ssh --batch --upsert源码级原理从 cert.go 可以看出几个关键设计--batch是强制性的虽然它被实现为布尔标志但未指定时命令会直接报错you need to specify --batch or specify --help for usage instructions源码注释也明确写着 --batchis a flag, but it is mandatory for now。数据校验读取到的每一行会先经过certutil.ParseSSHKnownHostsFromStream过滤util/cert/cert.go空行与以#开头的注释行会被忽略合法的 known hosts 行必须恰好包含主机名、密钥类型、密钥数据三个字段IsValidSSHKnownHostsEntry。一行多主机拆分known hosts 文件允许一行密钥对应多个主机名。代码通过certutil.KnownHostsLineToPublicKey内部使用ssh.ParseKnownHosts解析出该密钥适用的全部主机名列表然后为每个主机名各生成一条RepositoryCertificate记录CertType: sshCertSubType为密钥类型如ssh-rsa、ecdsa-sha2-nistp256等。批量写入最终将所有记录封装为RepositoryCertificateList一次性调用CreateCertificate成功后输出Successfully created N SSH known host entries。五、列出证书argocd cert list查看 Argo CD 当前信任的全部仓库证书。语法与选项argocd cert list [flags]选项说明--cert-type string只列出指定类型的证书合法值ssh、https--hostname-pattern string只列出主机名匹配给定 glob 模式的证书-o, --output string输出格式json、yaml或wide默认wide--sort string设置 wide 输出格式的排序方式hostname或type-h, --help显示 list 帮助典型用法# 只列出 TLS 证书 argocd cert list --cert-type https # 按 glob 模式过滤主机 argocd cert list --hostname-pattern *.example.com # JSON 输出便于脚本处理 argocd cert list --cert-type ssh -o json # 按类型排序 argocd cert list --sort type源码级原理类型校验--cert-type只接受ssh或https其他值会打印cert-type must be either ssh or https并退出cert.go。输出格式yaml/json走PrintResourceListwide或空值走printCertTablecert.go以表格形式输出HOSTNAME、TYPE、SUBTYPE、INFO四列。--sort hostname按ServerName排序--sort type按CertType排序默认按主机名。INFO 列的内容来自服务端填充的CertInfo字段。数据库层实现在 util/db/certificate.goSSH 密钥显示SHA256:前缀的指纹TLS 证书显示 X.509 的 SubjectDN 表示法CertSubType为公钥算法名的小写形式。值得注意的是列表接口不会返回CertData出于安全考虑只返回元数据。glob 匹配--hostname-pattern使用文件系统 glob 语义filepath.Match而非完整正则且会先转义方括号字符MatchHostName见 util/cert/cert.go匹配成本更低、对用户更友好。六、删除证书argocd cert rm安全地移除仓库服务器对应的信任条目。语法与选项argocd cert rm REPOSERVER [flags]选项说明--cert-type string只删除指定类型的证书ssh、https--cert-sub-type string只删除指定子类型的证书仅对 ssh 有效-h, --help显示 rm 帮助典型用法# 删除 cd.example.com 的全部 TLS 证书 argocd cert rm --cert-type https cd.example.com # 只删除指定子类型的 SSH 密钥如 ssh-rsa argocd cert rm --cert-type ssh --cert-sub-type ssh-rsa cd.example.com # 删除该主机的所有证书与 known hosts 条目 argocd cert rm cd.example.com源码级原理与安全设计从 cert.go 可见通配符保护REPOSERVER参数传入时会先判断若值恰好为*则直接报错A single wildcard is not allowed as REPOSERVER name.——源码注释解释这是预防性措施避免用户误删全部证书虽然?*等模式理论上仍可达到同样效果但不易被误触发。交互确认命令执行前会弹出Are you sure you want to remove all certificates for xxx? [y/n]确认提示通过utils.NewPrompt(clientOpts.PromptsEnabled)确认后才会构造RepositoryCertificateQuery{HostNamePattern, CertType, CertSubType}调用DeleteCertificate。执行结果反馈每个被删除的条目会打印Removed cert for xxx of type xxx (subtype xxx)若无匹配条目则提示No certificates were removed (none matched the given pattern)用户选择否时提示命令已取消。七、底层存储证书存放在哪里argocd cert系列命令最终通过 gRPC 与 Argo CD API 服务器交互服务端实现位于 server/certificate/certificate.goproto 定义见 certificate.proto三个 RPCListCertificates、CreateCertificate、DeleteCertificate。服务端将数据持久化到两个 ConfigMap常量定义见 common/common.goConfigMap用途数据键argocd-ssh-known-hosts-cmSSH known hosts 数据ArgoCDKnownHostsConfigMapNamessh_known_hosts每行一条密钥argocd-tls-certs-cmTLS 证书数据ArgoCDTLSCertsConfigMapName以证书 Subject主机名为 key、PEM 数据为 value读写逻辑见 util/db/certificate.gogetSSHKnownHostsDataL449-L482读取ssh_known_hosts键并逐行解析为结构化条目getTLSCertificateDataL434-L445遍历 ConfigMap 全部键值对解析 TLS 证书。删除操作RemoveRepoCertificates则是重新过滤剩余条目后再写回 ConfigMap见 L396-L408。这两个 ConfigMap 会被以卷volume方式挂载到相关 Pod 中TLS 证书默认挂载到/app/config/tlsDefaultPathTLSConfigSSH known hosts 默认位于/app/config/ssh/ssh_known_hostsDefaultPathSSHConfigDefaultSSHKnownHostsName见 util/cert/cert.go。如果部署环境需要自定义路径可通过环境变量ARGOCD_TLS_DATA_PATH与ARGOCD_SSH_DATA_PATH覆盖定义见 common/common.go。八、权限控制谁可以管理证书证书操作受 Argo CD RBAC 管控服务端每个 RPC 都会执行权限校验server/certificate/certificate.goListCertificates→ 校验certificates, getCreateCertificate→ 校验certificates, createDeleteCertificate→ 校验certificates, delete内置策略assets/builtin-policy.csv中的对应规则p, role:readonly, certificates, get, *, allow p, role:admin, certificates, create, *, allow p, role:admin, certificates, update, *, allow p, role:admin, certificates, delete, *, allow即readonly角色可以列出证书admin角色可以创建、更新与删除。需要注意源码注释明确指出当前证书操作的 RBAC 是全有或全无all-or-nothing的粗粒度控制——没有针对单个主机或证书类型的细粒度权限有权限即可操作全部证书。九、安全注意事项与最佳实践证书输入来源--from与 stdin 两种方式等价优先使用文件方式便于审计管道方式如ssh-keyscan ... | argocd cert add-ssh --batch适合临时批量录入。不要滥用--insecure-skip-tls-verify与--insecure前者会让 CLI 与 API 服务器之间的 HTTPS 连接不校验证书后者跳过服务器证书与域名验证。正确做法是让仓库服务器使用受信任证书或在证书库中显式登记自签名证书。删除操作的双保险argocd cert rm既有通配符保护又有交互确认在自动化脚本中如需跳过交互可结合--prompts-enabled全局选项控制提示行为默认本地配置为 false即不启用提示此时删除命令会直接取消需显式开启才会弹出确认。批量上限单次输入最多接受 256 条证书/密钥条目CertificateMaxEntriesPerStream单张 PEM 证书最多 128 行CertificateMaxLines超限会报错大仓库请分批录入。十、与相关文档的衔接命令组完整索引见 argocd 命令参考其中argocd cert是仓库管理能力的一部分与之并列的还有argocd repo仓库注册、argocd repocreds仓库凭据等命令。证书的解析工具函数与单元测试位于 util/cert/cert.go 与 util/cert/cert_test.go其中测试用例使用了 test/certificates/ssh_known_hosts 等真实样例数据CLI 层的集成测试见 cmd/argocd/commands/cert_test.go。若不希望通过 CLI 管理证书也可以直接编辑前述两个 ConfigMapargocd-ssh-known-hosts-cm、argocd-tls-certs-cm效果与 CLI 一致但 CLI 会额外完成格式校验、去重与指纹/Subject 信息生成推荐优先使用命令方式。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。