关于云计算:使用-GitLab-账号登陆-KubeSphere

58次阅读

共计 6729 个字符,预计需要花费 17 分钟才能阅读完成。

作者:李帅

介绍

KubeSphere 多租户是理论生产应用中十分须要的一个性能,该性能满足不同用户登陆 KubeSphere 平台的需要。比方开发,运维,测试都须要登陆 KubeSphere 平台,并且须要为不同身份的用户配置不同的权限。当公司内须要拜访 KubeSphere 的用户比拟多时,管理员再去手动为用户创立账号就不太灵便了。KubeSphere 蕴含一个内置的 OAuth 服务和帐户零碎,用户通过获取 OAuth 拜访令牌以对 API 进行身份验证,咱们能够通过接入 LDAP 或者 OIDC 来提供身份认证信息。

多租户计划

认证鉴权链路

应用

假如集群内曾经最小化装置 KubeSphere。咱们这里应用 OIDC 身份提供者进行认证,通过 Dex 接入到 GitLab 中,应用 GitLab 中的用户实现认证。

装置 Dex

Dex 是一种身份认证服务,它应用 OpenID Connect 来驱动其余应用程序的身份验证。Dex 通过“connectors”充当其余身份提供商的门户。Dex 能够将身份验证推到 LDAP 服务器、SAML 提供商或已建设的身份提供商(如 GitHub、Gitlab、Google 和 Active Directory 等)。客户端编写身份验证逻辑以与 Dex 交互认证,而后 Dex 通过 connector 转发到后端用户认证方进行认证,并返回给客户端 Oauth2 Token。与其类似的身份认证服务还有 Keycloak,auth0 等。

首先须要在 gitlab 上创立利用,在范畴里勾选这几个 read_user profile email openid,创立后须要记住页面上的应用程序 id 和明码,前面会用失去。

# 增加 dex 的 helm 仓库
root@i-tsfhx8p6:~/qke-k8s/dex# helm repo add dex https://charts.dexidp.io
"dex" has been added to your repositories
#下载 dex 的 chart 文件到本地
root@i-tsfhx8p6:~/qke-k8s/dex# helm pull dex/dex
root@i-tsfhx8p6:~/qke-k8s/dex# ls
dex-0.5.0.tgz
root@i-tsfhx8p6:~/qke-k8s/dex# tar xf dex-0.5.0.tgz 
root@i-tsfhx8p6:~/qke-k8s/dex# ls
dex  dex-0.5.0.tgz
root@i-tsfhx8p6:~/qke-k8s/dex# ls dex
Chart.yaml  LICENSE  README.md  ci  templates  values.yaml

批改 values.yaml 文件


replicaCount: 1

image:
  repository: dexidp/dex
  pullPolicy: IfNotPresent
  tag: "v2.29.0"

imagePullSecrets: []

nameOverride: ""fullnameOverride:""

hostAliases: []

https:
  # -- Enable the HTTPS endpoint.
  enabled: false

grpc:
  # -- Enable the gRPC endpoint.
  # Read more in the [documentation](https://dexidp.io/docs/api/).
  enabled: false

configSecret:
  # -- Enable creating a secret from the values passed to `config`.
  # If set to false, name must point to an existing secret.
  create: true

  # -- The name of the secret to mount as configuration in the pod.
  # If not set and create is true, a name is generated using the fullname template.
  # Must point to secret that contains at least a `config.yaml` key.
  name: ""

config: 
  issuer: https://dex-qke.lishuai.fun  #批改为你理论的地址
  storage: 
    type: kubernetes
    config:
      inCluster: true
  web:
    http: 0.0.0.0:5556
  telemetry:
    http: 0.0.0.0:5558
  expiry:
    signingKeys: "6h"
    idTokens: "24h"
  logger:
    level: debug
    format: json
  oauth2:
    responseTypes: ["code", "token", "id_token"]
    skipApprovalScreen: true
  connectors:
  - type: gitlab
    id: gitlab
    name: GitLab
    config:
      baseURL: https://gitlab.lishuai.fun  #批改为你理论的 gitlab 地址 
      clientID: ca14d16e376b6f6634*********57378d1267e946e9d3e758e2f0     #批改为你 gitlab 利用的 clientid
      clientSecret: 15dcb3501becd17******1b82b05874e2ef893b7a0888fdaaa37885fd9387  #批改为你 gitlab 利用的 clientsecert
      redirectURI: https://dex-qke.lishuai.fun/callback  #批改为你理论的地址,格局为(dex issuer)/callback
      groups:
      - k8s-auth
      - k8s-auth/dashboard
      - k8s-auth/dashboard/show  ##gitlab 项目组,只容许 dashboard 我的项目组成员拜访
  staticClients:
  - id: dex-k8s-authenticator
    name: dex-k8s-authenticator
    secret: generatedLongRandomPhrase
    redirectURIs:
    - 'http://kubesphere.lishuai.fun/oauth/redirect/dex' #这个是 kubesphere 的回调地址,对于 dex 认证,格局为 kubesphere_url/oauth/redirect/dex

volumes: []

volumeMounts: []

envFrom: []

env: {}

serviceAccount:
  # -- Enable service account creation.
  create: true

  # -- Annotations to be added to the service account.
  annotations: {}

  # -- The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template.
  name: "dex-sa"

rbac:
  create: true

podAnnotations: {}

podDisruptionBudget:
  enabled: false
  minAvailable:
  maxUnavailable:
priorityClassName: ""
podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000

service:
  annotations: {}
  type: ClusterIP

  ports:
    http:
      port: 5556
      nodePort:
    https:
      port: 5554
      nodePort:
    grpc:
      port: 5557
      nodePort:

ingress:
  enabled: true
  className: ""

  annotations: 
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    cert-manager.io/cluster-issuer: tls  #集群内曾经装置了 cert-manager,通过 cert-manager 来进行证书签发

  hosts:
    - host: dex-qke.lishuai.fun
      paths:
        - path: /
          pathType: ImplementationSpecific
  tls: 
  - secretName: dex-tls
    hosts:
      - dex-qke.lishuai.fun

resources: {}
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 100
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80

nodeSelector: {}

tolerations: []

affinity: {}

这里有几点须要留神:

  • Gitlab 配置下的 groups 为项目组,须要依据理论状况填写,此处填写项目组的成员才会容许通过 Dex 进行身份认证
  • 如果集群内没有装置 cert-manager,须要手动创立证书的 secert

执行如下命令进行装置。

root@i-tsfhx8p6:~/qke-k8s/dex# ls
dex  dex-0.5.0.tgz
#在当前目录执行
kubectl create ns dex 
kubectl -n dex install dex dex

root@i-tsfhx8p6:~/qke-k8s/dex# kubectl -n dex get pod 
NAME                                  READY   STATUS    RESTARTS   AGE
dex-d8c5cdfc-577gf                    1/1     Running   0          21h

配置 KubeSphere

装置好 Dex 后须要批改 cluster-configuration.yaml

apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
  name: ks-installer
  namespace: kubesphere-system
  labels:
    version: v3.1.1
spec:
  persistence:
    storageClass: "longhorn"        # If there is no default StorageClass in your cluster, you need to specify an existing StorageClass here.
  authentication:
    jwtSecret: ""
    authenticateRateLimiterMaxTries: 10
    authenticateRateLimiterDuration: 10m0s
    oauthOptions:
      accessTokenMaxAge: 1h
      accessTokenInactivityTimeout: 30m
      identityProviders:
      - name: dex
        type: OIDCIdentityProvider
        mappingMethod: auto
        provider:
          clientID: 'dex-k8s-authenticator'
          clientSecret: 'gener*******ongRandomPhrase'
          issuer: https://dex-qke.lishuai.fun
          redirectURL: http://kubesphere.lishuai.fun/oauth/redirect/dex
          scopes:
          - openid
          - email
......

参数释意:

  • authenticateRateLimiterMaxTries: authenticateLimiterDuration 指定的期间内容许的最大间断登录失败次数。如果用户间断登录失败次数达到限度,则该用户将被封禁。
  • authenticateRateLimiterDuration: 作用于 authenticateRateLimiterMaxTries
  • loginHistoryRetentionPeriod: 用户登录记录保留期限,过期条目将被主动删除。
  • maximumClockSkew: 管制执行对工夫敏感的操作(例如验证用户令牌的过期工夫)时容许的最大时钟偏移,默认值为 10 秒。
  • multipleLogin: 容许多个用户同时从不同地位登录,默认值为 true
  • jwtSecret: 签发用户令牌的密钥,最小长度为 32 个字符。多集群环境须要留神的事项。

oauthOptions: OAuth 设置

  • accessTokenMaxAge: 拜访令牌有效期。对于多集群环境中的成员集群,默认值为 0h,这意味着拜访令牌永不过期。对于其余集群,默认值为 2h
  • accessTokenInactivityTimeout: 令牌闲暇超时工夫。该值示意令牌过期后,刷新用户令牌最大的间隔时间,如果不在此工夫窗口内刷新用户身份令牌,用户将须要从新登录以取得拜访权。
  • identityProviders:身份提供者设置

    • name: 身份提供者的名称。
    • type: 身份提供者的类型。
    • mappingMethod: 帐户映射形式. 值能够是 auto 或者 lookup
    • 默认值为 auto, 通过第三方帐户登录时会主动创立关联帐户。
    • 如果值为 lookup, 你须要手动关联第三方帐户与 KubeSphere 帐户。
    • provider: Identity provider 配置,此局部中的字段依据身份提供的类型而异

provider:

  • ​ clientID: OAuth2 客户端 ID
  • ​ clientSecret: OAuth2 客户端 secert
  • ​ issuer:dex 的地址
  • ​ redirectURL:重定向到 ks-console 的 URL,留神这个地址要在 dex 里也配置

批改完后执行 kubectl apply -f cluster-configuration.yaml

也能够通过以下命令批改认证配置:

kubectl -n kubesphere-system edit cc ks-installer

配置示例:

apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
  name: ks-installer
spec:
  authentication:
    jwtSecret: ********************************
    authenticateRateLimiterMaxTries: 10
    authenticateRateLimiterDuration: 10m
    oauthOptions:
      accessTokenInactivityTimeout: 30m
      accessTokenMaxAge: 1h
      identityProviders:
      - mappingMethod: auto
        name: github
        type: GitHubIdentityProvider
        provider:
...

当批改上述配置后,须要期待配置失效,能够通过以下命令查看相干进度及日志:

 kubectl -n kubesphere-system logs -l app=ks-installer -f

从新利用后关上登录页面会发现登录页面多了 通过 dex 登陆 的按钮。

点击后会主动跳转到 Gitlab 进行认证,第一次登陆须要受权利用能够拜访,这里要留神容许拜访的 KubeSphere 的 Gitlab 用户为 Dex 服务中定义的 Gitlab 项目组中的用户,理论中咱们能够设置特定特定的项目组,将用户增加到项目组中来实现用户登陆的限度。

点击 authorize 容许后,KubeSphere 会让咱们确认账户信息, 此时须要正当批改用户名。

设定实现后,就能够进入 KubeSphere 了,此时该用户是没有任何拜访权限的,还须要管理员对该用户进行受权能力失常进行应用,心愿前期 KubeSphere 能够反对在用户登陆前能够对用户组进行受权,或者事后通过邮箱对用户进行收钱,防止用户登陆后,管理员还须要手动去创立权限。

本文由博客一文多发平台 OpenWrite 公布!

正文完
 0