背景
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