jon*_*ckt 2 continuous-deployment kubernetes gitops tekton argocd
从我们的 Tekton 管道中,我们希望使用 ArgoCD CLI 来动态argocd app create地argocd app sync基于所构建的应用程序。我们通过向ConfigMap添加 a 来创建一个新用户,如文档中所述:accounts.tekton: apiKeyargocd-cm
kubectl patch configmap argocd-cm -n argocd -p '{"data": {"accounts.tekton": "apiKey"}}'
Run Code Online (Sandbox Code Playgroud)
然后我们为tekton用户创建了一个令牌:
argocd account generate-token --account tekton
Run Code Online (Sandbox Code Playgroud)
将此令牌作为 the password,username tekton我们做了argocd login类似的事情
argocd login $(kubectl get service argocd-server -n argocd --output=jsonpath='{.status.loadBalancer.ingress[0].hostname}') --username=tekton --password="$TOKEN";
Run Code Online (Sandbox Code Playgroud)
现在,在我们的 Tekton 管道中(但我们猜测,考虑到非管理员用户的使用,这对于所有其他 CI 来说都是相同的),如果我们运行,我们会收到以下错误argocd app create:
$ argocd app create microservice-api-spring-boot --repo https://gitlab.com/jonashackt/microservice-api-spring-boot-config.git --path deployment --dest-server https://kubernetes.default.svc --dest-namespace default --revision argocd --sync-policy auto
error rpc error: code = PermissionDenied desc = permission denied: applications, create, default/microservice-api-spring-boot, sub: tekton, iat: 2022-02-03T16:36:48Z
Run Code Online (Sandbox Code Playgroud)
Argo 的 useraccounts 文档中提到了这个问题:
创建本地用户时,每个用户都需要设置额外的 RBAC 规则,否则他们将回退到 argocd-rbac-cm ConfigMap 的 policy.default 字段指定的默认策略。
但这些额外的 RBAC 规则可以使用 ArgoCDProjects最简单地设置。有了这样的用户,AppProject您甚至不需要像tektonConfigMap 那样创建用户argocd-cm。ArgoCD 项目能够定义项目角色:
项目包括一个称为角色的功能,可以自动访问项目的应用程序。这些可用于为 CI 管道提供一组受限的权限。例如,CI 系统可能只能同步单个应用程序(但不能更改其源或目标)。
有两种解决方案如何配置AppProject角色和权限,包括。角色令牌:
argocdCLIargocdCLI 创建AppProject角色和权限,包括。角色令牌因此,让我们亲自动手并AppProject使用argocd名为的 CLI创建一个 ArgoCD apps2deploy:
argocd proj create apps2deploy -d https://kubernetes.default.svc,default --src "*"
Run Code Online (Sandbox Code Playgroud)
我们使用 来创建它--src "*"作为任何 git 存储库的通配符(如此处所述)。
现在我们创建一个role名为create-syncvia的项目:
argocd proj role create apps2deploy create-sync --description "project role to create and sync apps from a CI/CD pipeline"
Run Code Online (Sandbox Code Playgroud)
您可以使用 查看已创建的新角色argocd proj role list apps2deploy。
然后我们需要为新的项目角色创建一个令牌create-sync,可以通过以下方式创建:
argocd proj role create-token apps2deploy create-sync
Run Code Online (Sandbox Code Playgroud)
该令牌需要用于argocd login我们的 Tekton / CI 管道内的命令。--token-only该命令还有一个参数,因此我们可以通过以下方式创建环境变量
ARGOCD_AUTH_TOKEN=$(argocd proj role create-token apps2deploy create-sync --token-only)
Run Code Online (Sandbox Code Playgroud)
将ARGOCD_AUTH_TOKEN被自动使用argo login。
现在我们需要向该角色授予权限,以便它能够从 Tekton 或任何其他 CI 管道中在 ArgoCD 中创建和同步我们的应用程序。因此,如文档中所述,我们使用argocdCLI 将策略添加到我们的角色中:
argocd proj create apps2deploy -d https://kubernetes.default.svc,default --src "*"
Run Code Online (Sandbox Code Playgroud)
查看 的角色策略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>
Run Code Online (Sandbox Code Playgroud)
最后,我们应该已经设置好一切以实现成功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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
只需 2 个步骤即可在 Tekton(或其他 CI 管道)内成功完成此操作argocd app create。我们需要apply清单
kubectl apply -f argocd-appproject-apps2deploy.yml
Run Code Online (Sandbox Code Playgroud)
我们需要创建一个角色令牌,最好将其直接分配给ARGOCD_AUTH_TOKEN命令argocd login(这也需要在之后完成):
ARGOCD_AUTH_TOKEN=$(argocd proj role create-token apps2deploy create-sync --token-only)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7970 次 |
| 最近记录: |