⚡️前言:了解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"
·······
管理用户
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,具体操作如下:
User Settings -->> Applications -->> Save Applications
输入创建的APP name,填写正确Argo CD的callback地址,勾选相应权限,点击保存
保存之后我们可以看到我们创建的对应APP Confidential ,对应的ID和secret要保存好,后面会用到
编辑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。
跳转界面
点击之后,Argo CD会跳转到我们配置的gitlab登录界面,
服务授权
登录成功之后,gitlab会提示让我们为argocd这个应用授予权限,点击授权
登录成功
这里我们发现已经可以正常登录成功
查看用户信息
会发现我们这里的账户是我们gitlab对应的个人账户邮箱,到这里说明我们通过Gitlab进行身份验证已经成功了。
总结
我们了解的ArgoCD的服务用户,添加及设置密码。使用Gitlab来进行身份验证。
参考文献
https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/
https://dexidp.io/docs/connectors/gitlab/