删除 Helm 2 、Ksonnet 支持
Argo CD 2.4 删除了 Helm 2 和 Ksonnet 支持。如果您使用 Ksonnet,请将清单转换为受支持的配置管理工具
https://argo-cd.readthedocs.io/en/stable/user-guide/application_sources/
如果您使用 Helm 2,请在升级到 Argo CD 2.4 之前遵循迁移指南
https://helm.sh/docs/topics/v2_v3_migration/
更新 RBAC 以处理 Web 终端
Argo CD 2.4 引入了一个新的 Web 终端功能。该功能使用户在正在运行的应用程序容器中启动 shell。只需使用 Application Details 页面找到所需的 Kubernetes Pod,单击它并选择 Terminal 选项卡。shell 会自动启动,使您能够执行命令,有助于排除应用程序状态的故障。
如果使用 RBAC 通配符,升级到 2.4 时,可能会无意中为不应该访问它的用户启用此特性。
Argo CD RBAC 配置中的第三列是“资源”列。
https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/
如果该列中有通配符*
,则会自动包含exec
资源。例如:
p, role:org-admin, *, create, my-proj/*, allow
要继续允许所有非exec
资源,请枚举它们而不是使用*
. 您可以将上面的示例替换为以下内容:
p, role: org-admin, clusters, create, my-proj/*, allow
p, role: org-admin, projects, create, my-proj/*, allow
p, role: org-admin, applications, create, my-proj/*, allow
p, role: org-admin, repositories, create, my-proj/*, allow
p, role: org-admin, certificates, create, my-proj/*, allow
p, role: org-admin, accounts, create, my-proj/*, allow
p, role: org-admin, gpgkeys, create, my-proj/*, allow
OpenTelemetry Tracing 集成
新功能允许发出更丰富的遥测数据,从而更容易识别性能瓶颈。新功能可用于 argocd-server 和 argocd-repo-server 组件,可以使用 --otlp-address
标志启用。
Power PC 和 IBM Z 支持
支持的架构列表已扩展,现在包括 IBM Z (s390x) 和 PowerPC (ppc64le)。从 v2.4 版本开始,官方 quay.io 存储库将包含 amd64、arm64、ppc64le 和 s390x 架构的镜像。
使用新服务帐户测试存储库服务器
作为一项安全性增强,Argo CD 2.4 的安装清单包括一个用于 repository-server Deployment 的专用 Service Account。
https://argo-cd.readthedocs.io/en/stable/operator-manual/architecture/#repository-server
如果您的设置依赖于使用default
服务帐户的存储库服务器,则升级到 Argo CD 2.4 可能会导致问题。可能需要将default
服务帐户迁移到argocd-repo-server
服务帐户。
更新插件的配置
配置管理插件的引入允许定制 Argo CD!
https://argo-cd.readthedocs.io/en/stable/user-guide/config-management-plugins/
插件系统是为灵活性而设计的,插件必须在 Argo CD 架构中获得一定程度的信任。
https://argo-cd.readthedocs.io/en/stable/operator-manual/architecture/
这也意味着 Argo CD 无法验证或保证外部插件是安全的!仔细设计您的自定义插件,并始终在安装任何第三方插件之前对其进行审核。
2.4 中的以下重大更改旨在帮助插件作者保持其实现的安全。
如果您使用配置管理插件,请务必仔细阅读以下三个部分。
更新插件以使用新前缀的环境变量
配置管理插件接受来自应用程序清单的用户定义变量。例如:
代码语言:javascript复制apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
source:
plugin:
env:
- name: FOO
value: bar
在 2.4 之前,这些环境变量被注入到插件中配置的init
和generate
命令中。由于许多插件使用第三方工具,其行为可通过环境变量(例如git
)进行配置,我们不希望允许用户设置任意环境变量。
从 Argo CD 2.4 开始,所有用户提供的环境变量都在发送到插件命令之前加上ARGOCD_ENV_
前缀。插件作者仍然可以选择删除前缀 ( export FOO=$ARGOCD_ENV_FOO
),必须明确设定。
如果编写了依赖于用户提供环境变量的自定义配置管理插件,请在升级到 2.4 之前更新您的插件逻辑以处理新前缀。
如果使用第三方插件,请确保该插件与 Argo CD 2.4 兼容。如果项目没有明确宣传对 2.4 的支持,请打开一个问题以验证他们是否添加了支持。
注意:如果您不需要新的 2.4 功能,则可以安全地使用 2.3.x 系列,直到您的所有插件都支持 2.4。我们将继续发布 2.3.x 的安全补丁,直到发布 2.6.0。
确认 sidecar 插件环境变量已在 sidecar 容器上设置
如果您使用作为 sidecar 的方式安装插件(而不是在argocd-cm
ConfigMap 中),2.4 中的错误修复可能会阻止插件接收其必需的环境变量。
https://github.com/argoproj/argo-cd/pull/9566
在 2.4 之前,主 repo-server 容器的环境变量被发送到插件的命令,优先于 sidecar 设置的环境变量。
从 2.4 开始,除了标准构建环境变量和用户提供的变量:
https://argo-cd.readthedocs.io/en/stable/user-guide/build-environment/
必须直接在 sidecar 容器上设置,以便被配置的插件命令获取。
在升级到 Argo CD 2.4 之前,请检查 Sidecar 插件的配置以查看它们需要哪些环境变量。如果其中任何一个设置在主 repo-server 容器而不是 sidecar 容器上,您可能还需要在 sidecar 容器上设置环境变量。
替换插件 sidecar 中 /tmp 卷
如果您使用 sidecar 方式安装的插件(而不是在argocd-cm
ConfigMap 中),它会在/tmp
挂载卷。在 2.4 之前,该卷需要与 repo-server 主容器挂载的临时卷相同。
从 Argo CD 2.4 开始,每个 sidecar 插件都应该挂载自己的临时卷。这有助于降低目录遍历攻击的风险。例如:
代码语言:javascript复制apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-repo-server
spec:
template:
spec:
containers:
- name: your-plugin-name
volumeMounts:
- mountPath: /tmp
name: your-plugin-name-tmp
volumes:
# Add this volume.
- name: your-plugin-name-tmp
emptyDir: {}
通过启用日志 RBAC 强制为 2.5 做准备
Argo CD 2.5 将包括更细粒度的 RBAC 日志访问控制。您可以选择在 2.4 中启用日志 RBAC 控制
以使 2.4 到 2.5 的升级过程更快、更容易。
https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/upgrading/2.3-2.4.md#enable-logs-rbac-enforcement
结论
上述变化也列在 2.3 到 2.4 升级指南中。
https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/upgrading/2.3-2.4.md
如果您从旧版本升级,请在跳过版本之前阅读其他升级指南
https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/upgrading/overview.md
按照说明进行操作,升级过程应该会很顺利。
- END -