Argo 的用户帐户文档中提到了该问题:
当您创建本地用户时,这些用户中的每一个都需要设置额外的 RBAC 规则,否则他们将回退到由 argocd-rbac-cm ConfigMap 的 policy.default 字段指定的默认策略。
但是这些额外的 RBAC 规则可以使用 ArgoCDProjects
最简单地设置。有了这样的AppProject
你甚至不需要像tekton
在 ConfigMap 中那样创建用户argocd-cm
。ArgoCD 项目能够定义项目角色:
项目包括一个称为角色的功能,可以自动访问项目的应用程序。这些可用于为 CI 管道提供一组受限的权限。例如,CI 系统可能只能同步单个应用程序(但不能更改其源或目标)。
有两种解决方案如何配置AppProject
角色和权限,包括。角色令牌:
- 使用
argocd
命令行
- 使用清单 YAML 文件
1.) 使用argocd
CLI 创建AppProject
角色和权限,包括。角色令牌
AppProject
因此,让我们动手并使用argocd
名为的 CLI创建 ArgoCD apps2deploy
:
argocd proj create apps2deploy -d https://kubernetes.default.svc,default --src "*"
--src "*"
我们使用git 存储库的通配符创建它(如此处所述)。
现在我们创建一个role
名为的项目create-sync
:
argocd proj role create apps2deploy create-sync --description "project role to create and sync apps from a CI/CD pipeline"
您可以使用 来检查新角色是否已创建argocd proj role list apps2deploy
。
然后我们需要为新的项目角色创建一个令牌create-sync
,可以通过以下方式创建:
argocd proj role create-token apps2deploy create-sync
此令牌需要用于argocd login
我们的 Tekton / CI 管道中的命令。该命令还有一个--token-only
参数,所以我们可以通过
ARGOCD_AUTH_TOKEN=$(argocd proj role create-token apps2deploy create-sync --token-only)
ARGOCD_AUTH_TOKEN
将由 自动使用argo login
。
现在我们需要为该角色授予权限,以便它能够从 Tekton 或任何其他 CI 管道中在 ArgoCD 中创建和同步我们的应用程序。如文档中所述,我们因此使用argocd
CLI 向我们的角色添加策略:
argocd proj role add-policy apps2deploy create-sync --action get --permission allow --object "*"
argocd proj role add-policy apps2deploy create-sync --action create --permission allow --object "*"
argocd proj role add-policy apps2deploy create-sync --action sync --permission allow --object "*"
argocd proj role add-policy apps2deploy create-sync --action update --permission allow --object "*"
argocd proj role add-policy apps2deploy create-sync --action delete --permission allow --object "*"
看一下角色策略argocd proj role get apps2deploy create-sync
,它应该看起来像这样:
$ argocd proj role get apps2deploy create-sync
Role Name: create-sync
Description: project role to create and sync apps from a CI/CD pipeline
Policies:
p, proj:apps2deploy:create-sync, projects, get, apps2deploy, allow
p, proj:apps2deploy:create-sync, applications, get, apps2deploy/*, allow
p, proj:apps2deploy:create-sync, applications, create, apps2deploy/*, allow
p, proj:apps2deploy:create-sync, applications, update, apps2deploy/*, allow
p, proj:apps2deploy:create-sync, applications, delete, apps2deploy/*, allow
p, proj:apps2deploy:create-sync, applications, sync, apps2deploy/*, allow
JWT Tokens:
ID ISSUED-AT EXPIRES-AT
1644166189 2022-02-06T17:49:49+01:00 (2 hours ago) <none>
最后,我们应该已经设置好一切来做一个成功的argocd app create
. 我们需要做的就是添加--project apps2deploy
参数:
argocd app create microservice-api-spring-boot --repo https://gitlab.com/jonashackt/microservice-api-spring-boot-config.git --path deployment --project apps2deploy --dest-server https://kubernetes.default.svc --dest-namespace default --revision argocd --sync-policy auto
2.) 使用 manifest YAML 创建AppProject
,角色和权限,包括。角色令牌
由于解决方案 1.) 中所有这些基于 CLI 的步骤非常多,我们还可以使用清单 YAML 文件。这是一个argocd-appproject-apps2deploy.yml
配置与解决方案 a) 完全相同的示例:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: apps2deploy
namespace: argocd
spec:
destinations:
- namespace: default
server: https://kubernetes.default.svc
sourceRepos:
- '*'
roles:
- description: project role to create and sync apps from a CI/CD pipeline
name: create-sync
policies:
- p, proj:apps2deploy:create-sync, applications, get, apps2deploy/*, allow
- p, proj:apps2deploy:create-sync, applications, create, apps2deploy/*, allow
- p, proj:apps2deploy:create-sync, applications, update, apps2deploy/*, allow
- p, proj:apps2deploy:create-sync, applications, delete, apps2deploy/*, allow
- p, proj:apps2deploy:create-sync, applications, sync, apps2deploy/*, allow
argocd app create
从 Tekton(或其他 CI 管道)中成功完成只剩下 2 个步骤。我们需要apply
清单
kubectl apply -f argocd-appproject-apps2deploy.yml
而且我们需要创建一个角色token,理想情况下直接分配给ARGOCD_AUTH_TOKEN
forargocd login
命令(后面也需要做):
ARGOCD_AUTH_TOKEN=$(argocd proj role create-token apps2deploy create-sync --token-only)
argocd app create
解决方案 1.) 中提到的相同命令现在应该可以工作:
argocd app create microservice-api-spring-boot --repo https://gitlab.com/jonashackt/microservice-api-spring-boot-config.git --path deployment --project apps2deploy --dest-server https://kubernetes.default.svc --dest-namespace default --revision argocd --sync-policy auto