TLS 配置¶
Argo CD 提供三个可配置的入站 TLS 端点:
- argocd-server "工作负载面向用户的端点,为用户界面和应用程序接口提供服务
- argocd-repo-server "的端点,由 "argocd-server "和 "argocd-application-controller "工作负载访问,以请求存储库操作。
- argocd-dex-server "的端点,由 "argocd-server "访问,以处理 OIDC 验证。
默认情况下,无需进一步配置,这些端点将被设置为使用自动生成的自签名证书。 不过,大多数用户都希望为这些 TLS 端点明确配置证书,可以使用自动方法(如 "cert-manager")或使用自己的专用证书颁发机构。
为 argocd-server 配置 TLS¶
argocd-server 的入站 TLS 选项¶
通过设置命令行参数,可以为 argocd-server 工作负载配置某些 TLS 选项。 以下是可用参数:
|参数|默认值|描述| |---------|-------|-----------| |--insecure|false| 完全禁用 TLS| |--tlsminversion|1.2| 向客户提供的最小 TLS 版本| |--tlsmaxversion|1.3| 向客户提供的最大 TLS 版本| |--tlsciphers|TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384| 向客户提供的 TLS 密码套件的冒号分隔列表
argocd-server 被引用的 TLS 证书¶
有两种方法可以配置 argocd-server 被引用的 TLS 证书:
- 设置
argocd-server-tlssecret 中的tls.crt和tls.key密钥,以保存证书的 PEM 数据和相应的私钥。argocd-server-tlssecret 可以是tls` 类型,但并非必须如此。 - 设置
argocd-secretsecret 中的tls.crt和tls.key密钥,以保存证书的 PEM 数据和相应的私钥。此方法已被弃用,仅用于向后兼容。不应再使用更改argocd-secret来覆盖 TLS 证书。
Argo CD 决定为 argocd-server 的端点使用哪种 TLS 证书的方法如下:
- 如果
argocd-server-tlssecret 存在,并且在tls.crt和tls.key密钥中包含有效的密钥对,这将被引用为argocd-server端点的证书。 - 否则,如果
argocd-secretsecret 中的
tls.crt "和 "tls.key "密钥,这将被引用为 argocd-server 端点的证书。
- 如果在上述两个秘密中都没有找到
tls.crt和tls.key密钥,Argo CD 将生成一个自签名证书,并将其保存在argocd-secret秘密中。
argocd-server-tls "秘密只包含 TLS 配置信息,供 "argocd-server "使用,可通过第三方工具(如 "cert-manager "或 "SealedSecrets")安全管理。
要从现有的密钥对中手动创建该秘密,可以使用 kubectl:
kubectl create -n argocd secret tls argocd-server-tls \
--cert=/path/to/cert.pem \
--key=/path/to/key.pem
Argo CD 会自动被引用 "argocd-server-tls "secret 的更改,无需重启 pod 以使用更新的证书。
为 argocd-repo-server 配置入站 TLS¶
argocd-repo-server 的入站 TLS 选项¶
通过设置命令行参数,可以为 argocd-repo-server 工作负载配置某些 TLS 选项。 下列参数可用:
| Parameter | Default | Description |
|---|---|---|
--disable-tls |
false |
Disables TLS completely |
--tlsminversion |
1.2 |
The minimum TLS version to be offered to clients |
--tlsmaxversion |
1.3 |
The maximum TLS version to be offered to clients |
--tlsciphers |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_GCM_SHA384 |
A colon separated list of TLS cipher suites to be offered to clients |
argocd-repo-server 被引用的入站 TLS 证书¶
要配置 argocd-repo-server 工作负载使用的 TLS 证书,请在运行 Argo CD 的 namespace 中创建名为 argocd-repo-server-tls 的秘密,证书的密钥对存储在 tls.crt 和 tls.key 密钥中。 如果该秘密不存在,argocd-repo-server 将生成并使用自签名证书。
要创建此秘密,可以使用 kubectl:
kubectl create -n argocd secret tls argocd-repo-server-tls \
--cert=/path/to/cert.pem \
--key=/path/to/key.pem
如果证书是自签名的,还需要在秘密中添加 ca.crt 和 CA 证书的内容。
请注意,与 argocd-server 不同的是,argocd-repo-server 无法自动获取对该秘密的更改。 如果创建(或更新)了该秘密,则需要重新启动argocd-repo-server pod。
还需注意的是,签发证书时应为 argocd-repo-server 添加正确的 SAN 条目,至少包含 DNS:argocd-repo-server 和 DNS:argocd-repo-server.argo-cd.svc 条目,具体取决于工作负载连接版本库服务器的方式。
为 argocd-dex-server 配置入站 TLS¶
argocd-dex-server 的入站 TLS 选项¶
通过设置命令行参数,可以为 argocd-dex-server 工作负载配置某些 TLS 选项。 以下是可用参数:
|参数|默认值|描述| |---------|-------|-----------| |--disable-tls|false| 完全禁用 TLS
argocd-dex-server 被引用的入站 TLS 证书¶
要配置 argocd-dex-server 工作负载使用的 TLS 证书,请在 Argo CD 运行所在的 namespace 中创建名为 argocd-dex-server-tls 的秘密,并将证书的密钥对存储在 tls.crt 和 tls.key 密钥中。 如果该秘密不存在,argocd-dex-server 将生成并使用自签名证书。
要创建此秘密,可以使用 kubectl:
kubectl create -n argocd secret tls argocd-dex-server-tls \
--cert=/path/to/cert.pem \
--key=/path/to/key.pem
如果证书是自签名的,还需要在秘密中添加 ca.crt 和 CA 证书的内容。
请注意,相对于 argocd-server 而言,argocd-dex-server 无法自动接收对该秘密的更改。 如果创建(或更新)了该秘密,则需要重新启动argocd-dex-server pod。
还要注意的是,证书应为 argocd-dex-server 分配正确的 SAN 条目,至少包含 DNS:argocd-dex-server 和 DNS:argocd-dex-server.argo-cd.svc 条目,具体取决于工作负载连接到版本库服务器的方式。
在 Argo CD 组件之间配置 TLS¶
为 argocd-repo-server 配置 TLS¶
argocd-server "和 "argocd-application-controller "都使用通过 TLS 的 gRPC API 与 "argocd-repo-server "通信。 默认情况下,"argocd-repo-server "会生成一个非持久、自签名的证书,在启动时用于其 gRPC 端点。 由于 "argocd-repo-server "无法连接到 k8s 控制平面 API,因此外部用户无法使用该证书进行验证。 出于这个原因,"argocd-server "和 "argocd-application-server "都将使用与 "argocd-repo-server "的非验证连接。
要改变这种行为,让 argocd-server 和 argocd-application-controller 验证 argocd-repo-server 端点的 TLS 证书,使其更加安全,需要执行以下步骤:
- 创建持久 TLS 证书供
argocd-repo-server使用,如上所示 - 重启
argocd-repo-serverpod - 修改
argocd-server和argocd-application-controller的 pod 启动参数,加入--repo-server-strict-tls参数。
现在,"argocd-server "和 "argocd-application-controller "工作负载将通过使用存储在 "argocd-repo-server-tls "secret 中的证书来验证 "argocd-repo-server "的 TLS 证书。
注意 "证书过期" 请确保证书有适当的有效期。 请记住,当您必须更换证书时,所有工作负载都必须重新启动才能再次正常工作。
为 argocd-dex-server 配置 TLS¶
argocd-server "使用通过 TLS 的 HTTPS API 与 "argocd-dex-server "通信。 默认情况下,"argocd-dex-server "会生成一个非持久、自签名的证书,以便在启动时用于其 HTTPS 端点。 由于 "argocd-dex-server "无法连接到 k8s 控制平面 API,因此外部用户无法使用该证书进行验证。 为此,"argocd-server "将使用一个非验证连接连接到 "argocd-dex-server"。
要改变这种行为,让 argocd-server 验证 argocd-dex-server 端点的 TLS 证书,使其更加安全,需要执行以下步骤:
- 创建持久 TLS 证书供
argocd-dex-server使用,如上所示 - 重启
argocd-dex-serverpod - 修改
argocd-server的 pod 启动参数,以包含
--dex-server-strict-tls 参数。
现在,"argocd-server "工作负载将通过使用存储在 "argocd-dex-server-tls "存储秘密中的证书来验证 "argocd-dex-server "的 TLS 证书。
注意 "证书过期" 请确保证书有适当的有效期。 请记住,当您必须更换证书时,所有工作负载都必须重新启动才能再次正常工作。
停用连接 argocd-repo-server 的 TLS¶
在某些涉及通过侧车代理使用 mTLS 的情况下(例如在服务网格中),您可能希望将 argocd-server 和 argocd-application-controller 到 argocd-repo-server 之间的连接配置为完全不使用 TLS。
在这种情况下,您需要
- 在配置
argocd-repo-server时,通过在 pod 容器的启动参数中指定--disable-tls参数,禁用 gRPC API 上的 TLS。此外,还可考虑通过指定--listen 127.0.0.1参数,将监听地址限制为环回接口,这样不安全的端点就不会暴露在 pod 的网络接口上,但仍可供侧车容器使用。 - 通过在 pod 容器的启动参数中指定参数
--repo-server-plaintext,配置argocd-server和argocd-application-controller在连接到argocd-repo-server时不使用 TLS。 - 配置
argocd-server和argocd-application-controller连接到侧车,而不是直接连接到argocd-repo-server服务,方法是通过--repo-server<address>参数指定其地址。
更改后,"argocd-server "和 "argocd-application-controller "将使用纯文本连接到侧车代理,该代理将处理与 "argocd-repo-server "的 TLS 侧车代理之间的所有 TLS 事宜。
停用连接 argocd-dex-server 的 TLS¶
在某些涉及通过侧车代理使用 mTLS 的情况下(例如在服务网格中),您可能希望将 argocd-server 与 argocd-dex-server 之间的连接配置为完全不使用 TLS。
在这种情况下,您需要
- 通过在 pod 容器的启动参数中指定
--disable-tls参数,配置argocd-dex-server禁用 HTTPS API 上的 TLS - 通过在 pod 容器的启动参数中指定
--dex-server-plaintext参数,将argocd-server配置为不使用 TLS 连接到argocd-dex-server。 - 配置
argocd-server以连接到边车,而不是直接连接到argocd-dex-server服务,方法是通过--dex-server<address>参数指定其地址
更改后,"argocd-server "将使用纯文本连接到侧车代理,它将处理到 "argocd-dex-server "的 TLS 侧车代理的所有方面。