⚡️前言:了解OAuth协议。OAuth是一种授权协议,它可以用来保证第三方只有当获得授权的时候,才能访问授权者的权限

我们之前文章已经大概了解了Argo CD的作用和一些用法。在通过web访问时,我们用的是ArgoCD内置的admin用户,该用户拥有绝对权限,生产中权限把控是十分重要的。官方建议admin仅使用用户进行初始配置,然后切换到本地用户或配置 SSO 集成。

OAuth协议

OAuth支持多种不同的授权方式,我们这里主要使用的是使用客户端凭证的方式来进行授权。

我们会使用客户端提供的id和secret来进行认证。

本地用户

本地用户的主要用例:

  • 通过创建普通用户分配对不同应用和项目的权限
  • 使用SSO单点登录,会降低维护,无需每次都创建用户,对应的账户对自己所创建的应用拥有相对权限

⚡️admin用户拥有绝对权限

创建用户

修改argocd-cm配置,添加data字段内容,我这里添加的是ycloud用户。

---
[root@ycloud ~]# kubectl edit cm argocd-cm -n argocd
apiVersion: v1
kind: ConfigMap
data:    
  accounts.ycloud: apiKey,login
metadata:                                              
  annotations:                                                                                               kubectl.kubernetes.io/last-applied-configuration: |                                                         {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-cm","namespace":"argocd"}}
  creationTimestamp: "2022-10-26T01:48:29Z"
  labels:                            
    app.kubernetes.io/name: argocd-cm
    app.kubernetes.io/part-of: argocd
  name: argocd-cm          
  namespace: argocd                        
  resourceVersion: "144257"                
  uid: 2d45d88e-9233-4b16-9a1c-4e4b2a59801f
  • apiKey - 允许为 API 访问生成身份验证令牌
  • login - 允许使用 UI 登录

禁用管理员用户

创建了本地用户,建议禁用掉admin用户

---
data:    
  accounts.ycloud: apiKey,login
  admin.enabled: "false"
·······

gitlab二次开发登录_kubernetes

管理用户

Argo CD CLI 提供了一组命令来设置用户密码和生成令牌。

CLI安装 https://argoproj.github.io/argo-cd/cli_installation/

  • 登录ArgoCD服务
[root@ycloud ~]# argocd login 10.10.10.1:31167
WARNING: server is not configured with TLS. Proceed (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context '10.10.10.1:31005' updated

输入自己的用户名和密码,我们可以看到已经登录

  • 获取用户列表
[root@ycloud ~]# argocd account list
NAME   ENABLED  CAPABILITIES
admin  true     login
ycloud  true     apiKey, login

可以看到我们刚刚添加的ycloud用户和对应的权限

  • 设置用户名密码
[root@ycloud ~]# argocd account update-password   --account ycloud   --current-password zF1XEslAKfaQRqcC   --new-password 123123123
Password updated

–account 指定用户; --current-password 使用admin配置密码; --new-password 配置用户密码

单点登录

单点登录,简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

采用gitlab来对我们的服务进行SSO操作

当客户端通过dex兑换刷新token时,dex会重新查询GitLab更新ID Token中的用户信息。为此,**dex 在其后备数据存储中存储了一个只读的 GitLab 访问令牌。**通过 GitLab 拒绝 dex 访问的用户也将撤销所有通过 GitLab 对其进行身份验证的 dex 客户端。

ArgoCD 配置SSO

首先我们在git仓库中创建一个app token,具体操作如下:

gitlab二次开发登录_客户端_02

User Settings -->> Applications -->> Save Applications

输入创建的APP name,填写正确Argo CD的callback地址,勾选相应权限,点击保存

保存之后我们可以看到我们创建的对应APP Confidential ,对应的ID和secret要保存好,后面会用到

gitlab二次开发登录_git_03

编辑argocd-cm
[root@ycloud ~]# kubectl edit cm argocd-cm -n argo-cd

url:填写的是ArgoCD的服务地址

dex.config: 将github连接器添加到connectors子字段。

data:    
  accounts.ycloud: apiKey,login
  dex.config: "connectors:\n- type: gitlab\n  id: gitlab\n  name: GitLab\n  config:\n
    \   clientID: 24668fff1b56d1d30caacf4126bc905ba6a2cf4632dad3c45b044db483155adc
    \n    clientSecret: c8c7acce4a5b38a779fdc1e86331601a992ad1300b93b0363d613cfa222db403
    \n    baseURL: https://yourgitlab.com/ \n    redirectURI: 10.10.10.1:31005/api/dex/callback "
  url: https://10.10.10.1:31005
  • type: 连接器类型
  • id:连接器的id
  • name: 连接器的名称
  • clientID:这里是我们创建APP对应的 ID,在gitlab上找到并正确填写
  • clientSecret: 和ID一致
  • baseURL: git私有代码仓库地址
  • redirectURL:对应我们创建APP时的callback
保存argocd-cm

修改好之后保存,cm无需手动重启服务,会自动热加载配置,这时候让我们重新登录ArgoCD,我们可以看到有一个LOGIN GITLAB。

gitlab二次开发登录_云原生_04

跳转界面

点击之后,Argo CD会跳转到我们配置的gitlab登录界面,

gitlab二次开发登录_gitlab二次开发登录_05

服务授权

登录成功之后,gitlab会提示让我们为argocd这个应用授予权限,点击授权

gitlab二次开发登录_云原生_06

登录成功

这里我们发现已经可以正常登录成功

gitlab二次开发登录_git_07

查看用户信息

gitlab二次开发登录_云原生_08

会发现我们这里的账户是我们gitlab对应的个人账户邮箱,到这里说明我们通过Gitlab进行身份验证已经成功了。

总结

我们了解的ArgoCD的服务用户,添加及设置密码。使用Gitlab来进行身份验证。

参考文献

https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/

https://dexidp.io/docs/connectors/gitlab/