ArgoCD 使用 GitLab 和 Dex 实现单点登录

ArgoCD 初始仅提供 admin 账号,用于首次部署和配置;为安全与协作,后续应启用本地用户或接入 SSO,避免长期使用超级管理员账号。

1. 概述

ArgoCD 以“开箱即用”的方式内置了 Dex(一个轻量级 OIDC 代理)。Dex 的职责只有一个:把企业里各式各样的身份源(SAML、LDAP、GitHub、GitLab …)统一翻译成 ArgoCD 能消费的 OIDC 令牌,从而把 ArgoCD SSO 落地成两行配置。下文以 GitLab OAuth2 为样本,演示如何修改 argocd-cm ConfigMap 完成连接器编排,并给出可直接粘贴的 GitLab-Dex 最小 YAML 模板。

2. 整体流程

  1. GitLab: 注册 OAuth2 Application → 获取 Client ID/Secret
  2. ArgoCD: 修改 argocd-cm 注入 dex gitlab 连接器
  3. ArgoCD: 修改 argocd-rbac-cm 把 GitLab Group 映射成 ArgoCD 角色

3. GitLab 配置

argocd_gitlab_sso

  1. 打开 Admin Area → Applications → New Application
  2. 填写关键点
  3. 保存后记录 ClientID 和 ClientSecret

4. ArgoCD 接入 Dex(GitLab 连接器)

kubectl edit cm argocd-cm -n argocd

新增以下内容:

data:
url: https://argocd.blazehu.com # 对外访问地址
dex.config: |
connectors:
- type: gitlab
id: gitlab
name: GitLab
config:
baseURL: https://gitlab.example.com # 自建 GitLab 填域名
clientID: XXXX...
clientSecret: XXXX...
redirectURI: https://argocd.blazehu.com/api/dex/callback
url: https://argocd.blazehu.com
users.anonymous.enabled: "false"

如果登录提示:Failed to query provider “https://argocd.blazehu.com/api/dex “: Get “https://argocd-dex-server:5556/api/dex/.well-known/openid-configuration": http: server gave HTTP response to HTTPS client。这是由于协议对不上,首先检查证书是否合法,另外检查 argocd-cmd-params-cm 配置文件的 dex server 相关参数。

5. RBAC:GitLab Group 映射成角色

编辑 argocd-rbac-cm:

data:
policy.default: role:readonly
policy.csv: |
p, role:devops, applications, *, */*, allow
p, role:devops, clusters, get, *, allow
g, devops, role:devops

6. 重启与验证

kubectl rollout restart deployment/argocd-dex-server -n argocd

重启后点击快速登录:
argocd_gitlab_sso_login

7. 参考