背景
argocd默认是通过修改argocd-cm来添加账户的,添加完账户后,还需要使用argocd客户端命令去给账户设置密码,这肯定是比较麻烦的,为了方便使用,我们可以接入ldap认证或者gitea的oauth2认证。
这里我们主要写ldap认证,因为gitea没有提供组信息给dex,而ldap能返回组信息
关键词:argocd ldap dex
看图讲故事
根据上面的图,我们可以看到,主要是通过配置argocd-cm和argocd-rbac-cm两个配置文件来生效的
下面我们来详细讲讲配置文件如何编写,关于gitea,ldap的安装这里就不再描述了,简单提一句argocd的安装
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
接入LDAP的配置
编写一个ldap-patch-dex.yaml
注意:这里有一个坑爹的地方,DN居然要大写才能使用,官网文档没有说要大写
apiVersion: v1 data: dex.config: | connectors: - type: ldap name: 统一账户中心 id: ldap config: # Ldap server address host: ${LDAP地址}:${LDAP端口} insecureNoSSL: true insecureSkipVerify: true # Variable name stores ldap bindDN in argocd-secret bindDN: "$dex.ldap.bindDN" # Variable name stores ldap bind password in argocd-secret bindPW: "$dex.ldap.bindPW" usernamePrompt: 用户名 # Ldap user serch attributes userSearch: baseDN: "ou=XXXX,dc=XXX,dc=com" filter: "(objectClass=person)" username: uid idAttr: uid emailAttr: mail nameAttr: cn # Ldap group serch attributes groupSearch: baseDN: "dc=XXX,dc=com" filter: "(objectClass=groupOfUniqueNames)" userAttr: DN groupAttr: uniqueMember nameAttr: cn
kubectl -n argocd patch configmaps argocd-cm --patch "$(cat ldap-patch-dex.yaml)"
上面的 bindPW 和 bindDN 我们放一个只读权限的账户到secret里,设置方法如下
kubectl -n argocd patch secrets argocd-secret --patch "{\"data\":{\"dex.ldap.bindPW\":\"$(echo my-password | base64 -w 0)\"}}" kubectl -n argocd patch secrets argocd-secret --patch "{\"data\":{\"dex.ldap.bindDN\":\"$(echo CN=ldapuser,OU=Service Accounts,OU=Resource,DC=mydomain,DC=local | base64 -w 0)\"}}"
设置grooup权限(只有ldap能分组,gitea接入不能获取分组)
编辑argocd-rbac-cm 文件,这里举例设置 “administrators “组为管理员
kubectl edit configmaps -n argocd argocd-rbac-cm
apiVersion: v1 data: policy.csv: | g, administrators, role:admin policy.default: role:readonly
编辑完成之后,需要重启argocd和dex
kubectl delete pod -n argocd argocd-dex-server-7857b96dbb-s596m
kubectl delete pod -n argocd argocd-server-559f498454-fl5d2
效果演示
不推荐使用(接入gitea oauth2认证)
这个 接入gitea oauth2 认证我不推荐,因为没有办法设置“组”,所有用户通过这种方式登录进来的都是 policy.default 对应的权限,也许以后会有,但是笔者写这篇文章的时候是没有办法获取“组”的。
1,在gitea里输入重定向URI创建oauth2认证,获得clientID和clientSecret。
注意:argocd的重定向地址是固定后缀/api/dex/callback
2.创建一个gitea-patch-dex.yaml 内容如下
apiVersion: v1 data: accounts.drone: apiKey,login dex.config: |- connectors: - type: gitea name: Gitea id: gitea config: baseURL: https://gitea域名 redirectURI: https://argocd域名/api/dex/callback clientID: 上一步获取的clientID clientSecret: 上一步获取的clientSecret
3.生效配置文件,重启dex
kubectl -n argocd patch configmaps argocd-cm --patch "$(cat ldap-patch-dex.yaml)" kubectl delete pod -n argocd argocd-dex-server-7857b96dbb-s596m