步骤
kubesphere不像rancher在web页面上有配置LDAP的地方,只能通过修改ClusterConfiguration,ks-installer这个CRD来对接LDAP。
修改ClusterConfiguration(cc)
可以通过kubectl命令,也可以直接在web页面上编辑。
kubectl -n kubesphere-system edit cc ks-installer
配置如下:
spec:
authentication:
jwtSecret: xxxx
maximumClockSkew: 10s
multipleLogin: true
oauthOptions:
accessTokenInactivityTimeout: 30m
accessTokenMaxAge: 2h
identityProviders:
- mappingMethod: auto
name: LDAP
provider:
host: 'ip:port'
loginAttribute: sAMAccountName
mailAttribute: mail
managerDN: 'CN=kubesphere,CN=users,DC=nas'
managerPassword: xxxxxxx
userSearchBase: 'CN=Users,DC=nas'
type: LDAPIdentityProvider
字段解释
- jwtSecret:签发用户令牌的密钥。在多集群环境下,所有的集群必须使用相同的密钥。必须要写,不然会报错。
- authenticateRateLimiterMaxTries:authenticateLimiterDuration 指定的期间内允许的最大连续登录失败次数。如果用户连续登录失败次数达到限制,则该用户将被封禁。
- authenticateRateLimiterDuration:authenticateRateLimiterMaxTries 适用的时间段。
- loginHistoryRetentionPeriod:用户登录记录保留期限,过期的登录记录将被自动删除。
- maximumClockSkew:时间敏感操作(例如验证用户令牌的过期时间)的最大时钟偏差,默认值为10秒。
- multipleLogin:是否允许多个用户同时从不同位置登录,默认值为 true。
- oauthOptions:
- accessTokenMaxAge:访问令牌有效期。对于多集群环境中的成员集群,默认值为 0h,这意味着访问令牌永不过期。对于其他集群,默认值为 2h。
- accessTokenInactivityTimeout:令牌空闲超时时间。该值表示令牌过期后,刷新用户令牌最大的间隔时间,如果不在此时间窗口内刷新用户身份令牌,用户将需要重新登录以获得访问权。
- identityProviders:
- name:身份提供者的名称。
- type:身份提供者的类型。
- mappingMethod:帐户映射方式,值可以是 auto 或者 lookup。
- 如果值为 auto(默认),需要指定新的用户名。通过第三方帐户登录时,KubeSphere 会根据用户名自动创建关联帐户。
- 如果值为 lookup,需要执行步骤 3 以手动关联第三方帐户与 KubeSphere 帐户。
- provider:身份提供者信息。此部分中的字段根据身份提供者的类型而异。
字段配置完成后,保存修改,然后等待 ks-installer 重启完成。可以通过下面的命令查看日志输出:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
然后还需要重启ks-apiserver:
kubectl rollout restart -n kubesphere-system deployment ks-apiserver
使用LDAP账号登录。登录成功后,在另一个浏览器使用admin用户登录,可以看到自动生成了LDAP用户。
再对其进行授权即可。
遇到的报错
1.
LDAP Result Code 49 "Invalid Credentials": 80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 52e, v3839
这个报错的意思是oauth协议,获取token的时候失败。即kubesphere连接ldap时就报错了,还没到验证用户名密码这一步。
经过验证是我的ldap配置中DN写错了,改成正确的即可。要和LDAP中的用户目录结构一致。
2.
如果是云上的kubesphere,并且ks-console绑定了LoadBalancer,在更新ks-installer时可能会报错:Error: UPGRADE FAILED: cannot patch ks-console with kind Service: Service ks-console is invalid: [spec.ports[1].name: Duplicate value: nginx , spec.ports[1].nodePort: Duplicate value: 30880]]
报错的意思是kubesphere无法更新ks-console svc的name和nodePort字段,得手动修改。可以改为下面的name和port(不一样就行)
更新完成后,ks-console类型会变为NodePort。
手动修改为LoadBalancer,并删除30881这个svc。
验证可以正常登录。