云原生 | kubernetes - Argo CD Gitlab身份验证及SSO单点登录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生 | kubernetes - Argo CD Gitlab身份验证及SSO单点登录相关的知识,希望对你有一定的参考价值。

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

OAuth协议

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

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

本地用户

本地用户的主要用例:

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

:zap: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 提供了一组命令来设置用户密码和生成令牌。

  • 登录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

单点登录

单点登录,简称为 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/

以上是关于云原生 | kubernetes - Argo CD Gitlab身份验证及SSO单点登录的主要内容,如果未能解决你的问题,请参考以下文章

Argo 项目加入 CNCF 孵化器 | 云原生生态周报 Vol. 45

云原生渐进式交付,刷 Argo CD 技术文档之 Understand The Basics & Core Concepts 篇

云原生时代的流水线框架 Argo

云原生初识 Kubernetes — pod 的前世今生

云原生Kubernetes系列第五篇kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)

云原生 · Kubernetes部署zookeeper