Argocd运维指南之SSH凭证模版示例

832 阅读1分钟

背景

在日常使用argocd时,有比较多项目内容是放在内部的git仓库,使用过程中遇到了一个痛点,每次要新增一个应用在部署前都需要先在argocd里面先把这个仓库地址和凭证信息添加到Repositories, 非常麻烦。
好在argocd考虑到了这种场景,支持使用凭证模版,如果应用仓库的地址能匹配上,会自动使用已添加的凭证模版来连接仓库。
比如我们添加了一个仓库凭证记录的地址是ssh://git@gitlab.mydomain.com:2222, 那后续部署应用(仓库ssh://git@gitlab.mydomain.com:2222/group1/repo1.git)部署时会自动匹配到前面的仓库凭证。

下面我通过一个完整流程给大家展示一下使用SSH凭证模版来部署应用的流程

前提步骤

一、生成用于argocd部署使用的ssh key

ssh-keygen -f /tmp/id_rsa.argocd

二、把公钥信息记录到gitlab用于argocd读取的账号

点击gitlab右上角进入用户信息配置,在SSH KEYS页面添加前面生成公钥

ArgoCD SSH凭证模版配置流程

一、安装argocd cli

参考文档安装argocd提供的命令行工具, mac系统可通过brew install argocd快速安装。

二、登录argocd

$ argocd login  argocd.10.1.250.0.nip.io --insecure --username admin --password yourpassword --grpc-web
'admin:login' logged in successfully
Context 'argocd.10.1.250.0.nip.io' updated

三、记录gitlab的host key

这一步很重要,不然应用会在部署过程中报错UnknowHost xxxx

ssh-keyscan -p 2222 gitlab.mydomain.com  | argocd cert add-ssh --batch

四、添加SSH仓库模版

这里为了后续使用方便,我直接把gitlab仓库的根路径作为模版添加

这种添加方式需要确保关联的gitlab账号有对应仓库的读取权限

$ argocd repocreds add ssh://git@gitlab.mydomain.com:2222 --ssh-private-key-path /tmp/id_rsa.argocd
# 检查是否添加成功
$ argocd repocreds list
URL PATTERN                               USERNAME  SSH_CREDS  TLS_CREDS
ssh://git@gitlab.mydomain.com:2222  -         false      false

五、添加应用

argocd里面的应用添加后其实是CRD(applications.argoproj.io)的一条记录,所以除了通过UI界面来添加应用外,通过yaml文件来添加应用更便于实现自动化。

$ cat argocd-app-ingress.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: ingress-nginx
  namespace: argocd
spec:
  destination:
    namespace: ingress
    server: https://kubernetes.default.svc
  project: default
  source:
    helm:
      valueFiles:
      - ./values-override.yaml
    path: .
    repoURL: ssh://git@gitlab.mydomain.com:2222/devops/ingress-nginx.git
    targetRevision: HEAD

创建argocd的app

$ argocd app create --file argocd-app-ingress.yaml

六、应用部署(sync)

$ argocd app sync ingress-nginx

七、查看应用日志

$ argocd app logs ingress-nginx  --follow