kubesphere对接LDAP

步骤

官方文档:https://www.kubesphere.io/zh/docs/v3.3/access-control-and-account-management/external-authentication/use-an-ldap-service/

kubesphere不像rancher在web页面上有配置LDAP的地方,只能通过修改ClusterConfiguration,ks-installer这个CRD来对接LDAP。

file

file

修改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用户。

file

再对其进行授权即可。

遇到的报错

1.

LDAP Result Code 49 "Invalid Credentials": 80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 52e, v3839

file

这个报错的意思是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]]

file

file

报错的意思是kubesphere无法更新ks-console svc的name和nodePort字段,得手动修改。可以改为下面的name和port(不一样就行)

file

更新完成后,ks-console类型会变为NodePort。

file

手动修改为LoadBalancer,并删除30881这个svc。

file

验证可以正常登录。

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x