拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Argo CD `argocd gpg list` 命令详解:查询已配置的 GPG 公钥

Argo CDargocd gpg list命令详解查询已配置的 GPG 公钥【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cdargocd gpg list是 Argo CD CLI 中用于列出服务器上已配置 GPG 公钥的子命令属于argocd gpg命令族用于管理签名验证所用的 GPG 密钥。本文以该命令的官方参考文档为主体结合仓库内 CLI 与服务端源码、测试用例讲解其语法、输出格式、底层调用链以及它在 Argo CD Git 提交签名验证工作流中的实际定位与使用注意事项。读完本文你将能熟练使用该命令完成密钥清单查询并理解其返回字段的语义与来源。命令概览argocd gpg list用于列出 Argo CD 服务器上已配置的全部 GPG 公钥。所谓已配置指的是已导入 Argo CD GnuPG 密钥环keyring并被信任的公钥——这些公钥随后会被用于校验 Git 仓库中的提交签名。该命令是argocd gpg命令族父命令见 argocd gpg的四个子命令之一与 argocd gpg add导入公钥、argocd gpg get按 KeyID 查询单把公钥、argocd gpg rm删除公钥共同构成密钥环管理的完整闭环。argocd gpg list [flags]使用示例原文档提供了三种典型的调用方式分别对应默认表格输出、JSON 输出与 YAML 输出# 以 wide 格式默认列出所有已配置的 GPG 公钥。 argocd gpg list # 以 JSON 格式列出所有已配置的 GPG 公钥。 argocd gpg list -o json # 以 YAML 格式列出所有已配置的 GPG 公钥。 argocd gpg list -o yaml三种输出方式覆盖了从人眼快速浏览到脚本/工具消费结构化数据的全部场景表格适合日常巡检JSON/YAML 适合与jq、yq等工具链结合做自动化处理。输出格式详解wide 表格格式默认不带-o参数时命令通过tabwriter输出一张对齐的表格表头固定为三列列名含义数据来源字段KEYID公钥的 Key ID十六进制字符串GnuPGPublicKey.KeyIDTYPE密钥子类型如RSA4096、ED25519输出时统一转为大写GnuPGPublicKey.SubTypeIDENTITY密钥持有者标识通常为姓名 邮箱形式GnuPGPublicKey.Owner对应的实现位于 cmd/argocd/commands/gpg.go 的printKeyTable函数func printKeyTable(keys []appsv1.GnuPGPublicKey) { w : tabwriter.NewWriter(os.Stdout, 0, 0, 2, , 0) fmt.Fprint(w, KEYID\tTYPE\tIDENTITY\n) for _, k : range keys { fmt.Fprintf(w, %s\t%s\t%s\n, k.KeyID, strings.ToUpper(k.SubType), k.Owner) } _ w.Flush() }SubType字段在输出前会被strings.ToUpper统一转为大写如rsa4096显示为RSA4096该行为在 cmd/argocd/commands/gpg_test.go 的Test_printKeyTable_*系列测试中有明确断言assert.Equal(t, RSA4096, row[1]) // subtype upper-cased。测试同时覆盖了空列表仅输出表头与多密钥场景。JSON / YAML 格式指定-o json或-o yaml时命令对GnuPGPublicKeyList.Items调用PrintResourceList进行序列化输出。与表格格式不同结构化输出会携带密钥对象的完整字段。GnuPGPublicKey的类型定义位于 pkg/apis/application/v1alpha1/repository_types.go// GnuPGPublicKey is a representation of a GnuPG public key type GnuPGPublicKey struct { // KeyID specifies the key ID, in hexadecimal string format KeyID string json:keyID protobuf:bytes,1,opt,namekeyID // Fingerprint is the fingerprint of the key Fingerprint string json:fingerprint,omitempty protobuf:bytes,2,opt,namefingerprint // Owner holds the owner identification, e.g. a name and e-mail address Owner string json:owner,omitempty protobuf:bytes,3,opt,nameowner // Trust holds the level of trust assigned to this key Trust string json:trust,omitempty protobuf:bytes,4,opt,nametrust // SubType holds the keys subtype (e.g. rsa4096) SubType string json:subType,omitempty protobuf:bytes,5,opt,namesubType // KeyData holds the raw key data, in base64 encoded format KeyData string json:keyData,omitempty protobuf:bytes,6,opt,namekeyData }各字段语义keyID密钥 ID十六进制字符串即公钥 Key ID。fingerprint密钥的完整指纹。owner密钥所有者标识如姓名与邮箱。trust分配给该密钥的信任级别unknown/never/marginal/full/ultimate对应常量定义见 util/sourceintegrity/gpg.go。subType密钥子类型如rsa4096。keyData原始密钥数据base64 编码。需要注意argocd gpg list的列表响应中keyData字段会被服务端主动置空——这是服务端为节省响应体积而做的裁剪详见下文底层调用链一节。若需要查看密钥的完整数据请改用argocd gpg get KEYID。非法输出格式的处理CLI 实现中对-o参数做了白名单校验见 cmd/argocd/commands/gpg.goswitch output { case yaml, json: err : PrintResourceList(keys.Items, output, false) errors.CheckError(err) case wide, : printKeyTable(keys.Items) default: errors.CheckError(fmt.Errorf(unknown output format: %s, output)) }传入json|yaml|wide之外的取值会直接报错unknown output format: value并以非零状态退出这有助于在 CI 脚本中尽早发现拼写错误。参数详解list 子命令专属选项选项简写类型默认值说明--output-ostringwide输出格式取值仅限json、yaml、wide三者之一--help-h--显示 list 子命令的帮助信息该选项在源码中通过command.Flags().StringVarP(output, output, o, wide, Output format. One of: json|yaml|wide)注册默认值wide与文档描述一致。从父命令继承的全局选项argocd gpg list完整继承自argocd根命令及argocd gpg父命令的全局参数。下面按用途分类说明连接与认证相关选项说明--server stringArgo CD 服务器地址--argocd-context string要使用的 Argo CD 服务器上下文名称对应本地配置中的 context--auth-token string认证令牌设置该选项或ARGOCD_AUTH_TOKEN环境变量--core若为 true则 CLI 直接与 Kubernetes 通信而不经过 Argo CD API 服务器本地直连模式--insecure跳过服务器证书与域名校验--plaintext禁用 TLS即使用非加密连接--grpc-web启用 gRPC-web 协议当 Argo CD 服务器位于不支持 HTTP2 的代理之后时有用--grpc-web-root-path string启用 gRPC-web 协议并设置 web root-H, --header strings为 Argo CD CLI 发出的所有请求附加额外请求头可多次指定以添加多个也支持逗号分隔--http-retry-max int建立与 Argo CD 服务器的 HTTP 连接时的最大重试次数--client-crt string/--client-crt-key string/--server-crt string客户端证书文件、客户端证书密钥文件、服务器证书文件--port-forward通过端口转发连接到一个随机 argocd-server 端口--port-forward-namespace string端口转发使用的命名空间--kube-context string将命令定向到给定的 kube-context--prompts-enabled强制启用/禁用可选交互式提示覆盖本地配置本地配置默认为 false组件名称覆盖Helm Chart 安装时当组件通过 Helm Chart 部署且名称标签与默认值不同时可通过以下选项或对应环境变量覆盖选项默认值对应环境变量--controller-name stringargocd-application-controllerARGOCD_APPLICATION_CONTROLLER_NAME--redis-name stringargocd-redisARGOCD_REDIS_NAME--redis-haproxy-name stringargocd-redis-ha-haproxyARGOCD_REDIS_HAPROXY_NAME--repo-server-name stringargocd-repo-serverARGOCD_REPO_SERVER_NAME--server-name stringargocd-serverARGOCD_SERVER_NAME其他选项说明--config stringArgo CD 配置文件路径默认/home/user/.config/argocd/config--redis-compress string应用控制器启用 Redis 压缩时的取值可选值gzip、none默认gzip--logformat string日志格式json或text默认json--loglevel string日志级别debug、info、warn、error默认info此外argocd gpg父命令还提供 kubeconfig 相关选项--cluster、--context、--kubeconfig、-n/--namespace、--user、认证选项--username、--password、--token、网络选项--proxy-url、--request-timeout、--insecure-skip-tls-verify完整清单见 argocd gpg。底层调用链从 CLI 到服务器argocd gpg list的执行路径清晰地体现了 Argo CD 客户端/服务器Client-Server架构建立 gRPC 连接CLI 通过headless.NewClientOrDie(clientOpts, c).NewGPGKeyClientOrDieWithContext(ctx)创建到 API 服务器的 GPGKey 服务客户端详见 cmd/argocd/commands/gpg.go。发起 List 请求客户端调用gpgIf.List(ctx, gpgkeypkg.GnuPGPublicKeyQuery{})请求类型GnuPGPublicKeyQuery定义于 pkg/apiclient/gpgkey/gpgkey.pb.go其中KeyID字段留空即表示列出全部密钥。服务端响应服务端实现位于 server/gpgkey/gpgkey.go// List a list of GnuPG public keys in the configuration func (s *Server) List(ctx context.Context, _ *gpgkeypkg.GnuPGPublicKeyQuery) (*appsv1.GnuPGPublicKeyList, error) { if err : s.enf.EnforceErr(ctx.Value(claims), rbac.ResourceGPGKeys, rbac.ActionGet, ); err ! nil { return nil, err } keys, err : s.db.ListConfiguredGPGPublicKeys(ctx) if err ! nil { return nil, err } keyList : appsv1.GnuPGPublicKeyList{} for _, v : range keys { // Remove keys data from list result to save some bytes v.KeyData keyList.Items append(keyList.Items, *v) } return keyList, nil }从上述实现可以看到两个关键事实RBAC 鉴权每次list都要求调用方具备gpgkeys资源上的get权限。该命令的 RBAC 资源名称为gpgkeys动作action为get。要在自定义角色role:myrole上放开该权限需在 RBAC policy CSV 中配置p, role:myrole, gpgkeys, get, *, allow详见 source-integrity-git-gpg.md 的Keyring RBAC rules一节。列表响应精简服务端在返回列表前将每把密钥的KeyData原始密钥数据置空以节省响应体积因此list输出中不包含完整密钥内容查看完整密钥请使用argocd gpg get KEYID。本地渲染CLI 根据-o参数选择printKeyTable或PrintResourceList渲染输出。值得一提的是argocd gpg get服务端实现会先通过 util/sourceintegrity/gpg.go 的KeyID()工具函数对参数做合法性校验——支持 16 位短 Key ID 与 40 位长 Key ID完整指纹非法值会返回value is not a valid GnuPG key ID错误。与argocd gpg其他子命令配合使用argocd gpg list通常与命令族的其他成员配合完成密钥生命周期管理导入密钥argocd gpg add --from /path/to/keyfile支持二进制或 ASCII-armored 格式的公钥文件见 argocd gpg add。导入时若密钥已存在服务端会跳过重复项CLI 会输出Created N key(s) from input file, and M key(s) were skipped because they exist already.之类的汇总信息。查询单个密钥argocd gpg get KEYID输出该密钥的 Key ID、指纹、子类型、所有者及完整密钥数据见 argocd gpg get。列出全部密钥argocd gpg list本文主角用于整体巡检与核对。删除密钥argocd gpg rm KEYID删除前会有Are you sure you want to remove KEYID? [y/n]的交互确认见 argocd gpg rm。典型巡检示例——用 JSON 输出配合jq只提取 KeyID 列表argocd gpg list -o json | jq -r .items[].keyID在签名验证工作流中的定位Argo CD 使用 GnuPG 校验 Git 仓库提交签名只有使用密钥环中受信任公钥签名的提交才会被允许同步。argocd gpg list的价值在于对服务器信任了哪些公钥提供全局可见性是排查提交已签名却无法同步类问题的第一步。需要特别注意的是版本与配置形态的演进依据 source-integrity-git-gpg.md 与 gpg-verification.md旧版自 Argo CD v1.7 起通过 AppProject 的.spec.signatureKeys配置项目级签名密钥约束新版自 Argo CD 3.5 起支持通过.spec.sourceIntegrity.git.policies配置更灵活的源码完整性Source Integrity策略其中gpg.mode支持none、head、strict三档验证强度官方已声明旧的 GPG 签名验证机制将被废弃并在下一个大版本移除见 gpg-verification.md 的告警signatureKeys与sourceIntegrity不能同时使用无论采用哪种策略形态受信任公钥本身都统一维护在 Argo CD 的 GnuPG 密钥环中argocd gpg list查询的正是这一密钥环。因此使用argocd gpg list时请结合自身版本确认其服务对象旧式signatureKeys或新式sourceIntegrity并在条件允许时规划向 Source Integrity Verification 迁移。使用注意事项密钥传播延迟导入新密钥后密钥在集群内的传播可能需要一些时间即使argocd gpg list已显示该密钥已配置签名提交仍可能暂时无法同步。若持续无法同步参见 source-integrity-git-gpg.md 的故障排查章节。密钥环的实际载体密钥环由argocd-repo-server的 Pod 维护并与argocd-gpg-keys-cmConfigMap以密钥 ID 为 key、ASCII-armored 密钥数据为 value保持同步Pod 内的密钥环是瞬态的重启时会从配置重建切勿在 Pod 内手工增删密钥。权限要求执行list需要gpgkeys资源的get权限RBAC 规则形如p, role:myrole, gpgkeys, get, *, allow无权限时服务端会返回鉴权错误。功能开关可通过将ARGOCD_GPG_ENABLEDfalse环境变量设置到argocd-server、argocd-repo-server、argocd-application-controller、argocd-applicationset-controller的 Pod 模板来整体禁用 GnuPG 功能禁用后相关命令将不再可用。信任模型Argo CD 采用极简信任模型——密钥一旦导入即被信任不支持 Web of Trust 等复杂信任链也无需也不可能对导入的公钥进行签名见 source-integrity-git-gpg.md。关联文档与源码索引命令参考本文主体docs/user-guide/commands/argocd_gpg_list.md父命令与兄弟命令argocd gpg、argocd gpg add、argocd gpg get、argocd gpg rmCLI 实现与测试cmd/argocd/commands/gpg.go、cmd/argocd/commands/gpg_test.go服务端实现server/gpgkey/gpgkey.goAPI 类型定义pkg/apis/application/v1alpha1/repository_types.go、pkg/apiclient/gpgkey/gpgkey.pb.goKeyID 校验与信任级别常量util/sourceintegrity/gpg.go签名验证功能上下文source-integrity-git-gpg.md、source-integrity.md、gpg-verification.md【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门