设置舰队级身份验证管理

本文档介绍了集群管理员如何使用舰队设置多个集群,以便通过第三方身份提供方进行身份验证。 Google Cloud 可管理舰队中集群的配置,与设置单个集群相比,设置过程更快、更简单。如需详细了解第三方提供商身份验证流程,请参阅关于使用第三方身份进行身份验证

准备工作

  1. 安装和配置 Google Cloud CLI:

    1. Install the Google Cloud CLI.

    2. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    3. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    4. 初始化 gcloud CLI 后,对其进行更新并安装所需组件:

      gcloud components update
      gcloud components install kubectl
    5. 在 gcloud CLI 中,选择您的舰队宿主项目:
      gcloud config set project FLEET_HOST_PROJECT_ID
      FLEET_HOST_PROJECT_ID 替换为您的舰队宿主项目的 ID。

  2. 启用必需的 API:

    1. 在 Google Cloud 控制台中,前往项目选择器页面:

      转到“项目选择器”

    2. 选择您的舰队宿主项目。

    3. Enable the GKE Hub and Kubernetes Engine APIs.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the APIs

  3. 请确保平台管理员已为您提供所选协议所需的所有提供方信息。有关详情,请参阅以下文档:

所需的角色

如需获得在舰队级层设置集群所需的权限,请让您的管理员为您授予舰队宿主项目的 Fleet Admin (roles/gkehub/admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

启用舰队级 Identity Service 功能

舰队级身份服务功能使用控制器来管理舰队中每个集群的配置。您只需在舰队宿主项目中启用舰队级功能。

如需启用舰队级功能,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,前往 GKE Identity Service 页面。

    前往 Feature Manager

  2. 点击启用 Identity Service

gcloud

启用舰队级身份服务功能:

gcloud container fleet identity-service enable

配置集群

如需配置集群,您必须指定以下信息:

  • 有关身份提供方的信息,例如客户端 ID 和密钥。
  • 有关身份提供方用于身份验证的 JSON Web 令牌 (JWT) 的信息。
  • 特定于身份提供商的任何其他范围或参数。

如需详细了解您需要从平台管理员或组织中管理身份的人员处获取哪些信息,请参阅以下文档:

如果您已有 OIDC 提供方的现有集群级配置,则对集群应用舰队级配置将会覆盖所有现有身份验证规范。此外,如果舰队级配置不支持提供方的现有集群级配置,则此设置将失败。您必须移除现有的提供方配置才能应用舰队级配置。

如需配置集群,请按以下步骤操作:

控制台

  1. 选择要配置的集群:

    1. 在 Google Cloud 控制台中,前往 GKE Identity Service 页面。

      前往 Feature Manager

    2. 选中要配置的集群对应的一个或多个复选框。您可以选择单个集群,也可以指定所有集群都使用相同的身份配置。 如果您已配置舰队级默认设置,则系统会将配置协调回默认设置。

    3. 点击更新配置修改 Identity Service 集群配置窗格随即会打开。

    4. 身份提供方部分中,选择您要如何配置集群。您可以更新现有配置、从其他集群复制配置,也可以创建新配置。如需创建新配置,请点击添加身份提供方。系统会显示新身份提供方部分。

  2. 新的身份提供商部分,设置提供商详细信息:

    OIDC

    1. 选择新建 Open ID Connect,以创建新的 OIDC 配置。
    2. 提供方名称字段中指定要用于识别此配置的名称,通常是身份提供方名称。此名称必须以字母开头,后面最多可跟 39 个小写字母、数字或连字符,但不能以连字符结尾。创建配置后,您将无法修改此名称。
    3. 客户端 ID 字段中指定身份提供方的客户端 ID。
    4. 客户端密钥字段中指定客户端应用和身份提供方之间必须共享的客户端密钥。
    5. 颁发者网址字段中,指定用于向您的身份提供方发出授权请求的 URI。
    6. 点击下一步以设置 OIDC 特性。

    Azure AD

    1. 选择新建 Azure Active Directory,以创建新的 Azure AD 配置。
    2. 提供方名称字段中指定要用于识别此配置的名称,通常是身份提供方名称。此名称必须以字母开头,后面最多可跟 39 个小写字母、数字或连字符,但不能以连字符结尾。创建配置后,您将无法修改此名称。
    3. 客户端 ID 字段中指定身份提供方的客户端 ID。
    4. 客户端密钥字段中指定客户端应用和身份提供方之间必须共享的客户端密钥。
    5. 租户中指定租户,即要进行身份验证的 Azure AD 账号。
    6. 点击下一步以设置 Azure AD 特性。

    LDAP

    1. 选择 LDAP,以创建新的 LDAP 配置。
    2. 提供方名称字段中指定要用于识别此配置的名称,通常是身份提供方名称。此名称必须以字母开头,后面最多可跟 39 个小写字母、数字或连字符,但不能以连字符结尾。创建配置后,您将无法修改此名称。
    3. 点击下一步
    4. 指定 LDAP 服务器的主机名(必填)、LDAP 连接类型和 base64 编码的 CA 证书。
    5. 点击下一步以配置服务器。
    6. 指定用户的标识名、过滤条件、登录属性和标识符属性。
    7. 点击下一步以设置用户详细信息。
    8. 如果您选择使用群组,请指定群组的标识名、过滤条件和标识符属性。
    9. 点击下一步以设置群组详细信息。
    10. 指定服务账号的用户名和密码。
    11. 点击完成以设置服务账号名称。
  3. 点击下一步。系统会打开设置属性部分。

  4. 为身份提供方设置属性。如需查看 OIDC 或 Azure AD 的属性,请选择以下选项之一:

    OIDC

    • kubectl 重定向 URI:gcloud CLI 使用的重定向网址和端口,由平台管理员在注册时指定,通常采用 http://localhost:PORT/callback 形式。
    • 证书授权机构(可选):如果平台管理员提供,则该参数为身份提供方的 PEM 编码证书字符串。
    • 群组声明(可选):提供方用于返回账号的安全群组的 JWT 声明(字段名称)。
    • 群组前缀(可选):如果您有多个身份提供方的配置(通常是提供方名称),则该参数为您要附加到安全群组名称的前缀,以避免与访问权限控制规则中的现有名称冲突。
    • 代理(可选):用于连接到身份提供方的代理服务器地址(如适用)。例如,如果您的集群位于专用网络中并且需要连接到公共身份提供方,则可能需要设置此字段。 例如:http://user:password@10.10.10.10:8888
    • 范围(可选):身份提供方所需的任何其他范围。Microsoft Azure 和 Okta 需要 offline_access 范围。 如有必要,请点击添加范围以添加更多范围。
    • 用户声明(可选):您的提供方用于标识账号的 JWT 声明(字段名称)。如果您未在此处指定值,集群会使用“sub”,这是许多提供方使用的用户 ID 声明。您可以选择其他声明,例如“邮件”或“名称”,具体取决于 OpenID 提供方。“邮件”以外的声明会以颁发者网址作为前缀,以防止命名冲突。
    • 用户前缀(可选):如果您不想使用默认前缀,则该参数为您要附加到用户声明的前缀,以防止与现有名称冲突。
    • 额外参数(可选):配置所需的任何额外参数,指定为参数 KeyValue。如果需要,请点击添加参数添加更多参数。
    • 启用访问令牌(可选):如果启用,则允许为 OIDC 提供方(例如 Okta)提供群组支持。
    • 部署 Google Cloud 控制台代理(可选):如果启用了此代理,则进行部署,以允许 Google Cloud 控制台连接到无法通过互联网公开访问的本地身份提供方。

    Azure AD

    • kubectl 重定向 URI:gcloud CLI 使用的重定向网址和端口,由平台管理员在注册时指定,通常采用 http://localhost:PORT/callback 形式。
    • 用户声明(可选):您的提供方用于标识账号的 JWT 声明(字段名称)。如果您未在此处指定值,则 GKE Identity Service 会依次使用“email”“preferred_username”或“sub”的值,以获取用户详细信息。
    • 代理(可选):用于连接到身份提供方的代理服务器地址(如适用)。例如,如果您的集群位于专用网络中并且需要连接到公共身份提供方,则可能需要设置此字段。 例如:http://user:password@10.10.10.10:8888
  5. 点击完成

  6. 可选:如需向配置中添加更多提供方,请点击添加身份提供方,然后重复上述步骤。

  7. 点击更新配置

这会在必要时安装所有必需的组件,并在所选集群上应用客户端配置。

gcloud

如需使用 gcloud CLI 配置舰队,请创建一个名为 ClientConfig 的 Kubernetes 自定义资源,其中包含集群与身份提供方交互所需的全部信息对应的字段。如需创建和使用 ClientConfig,请按以下步骤操作:

  1. 在名为 auth-config.yaml 的文件中创建 ClientConfig 规范。如需查看 OIDC、SAML 或 LDAP 的配置示例,请选择以下选项之一。如需了解其他身份提供方配置,请参阅提供方专用配置

    OIDC

    以下 ClientConfig 示例同时展示了 oidc 配置和 azuread 配置。如需详细了解何时使用 oidcazuread,请参阅提供方专用配置

    apiVersion: authentication.gke.io/v2alpha1
    kind: ClientConfig
    metadata:
      name: default
      namespace: kube-public
    spec:
      authentication:
      - name: NAME
        proxy: PROXY_URL
        oidc:
          certificateAuthorityData: CERTIFICATE_STRING
          clientID: CLIENT_ID
          clientSecret: CLIENT_SECRET
          deployCloudConsoleProxy: PROXY_BOOLEAN
          extraParams: EXTRA_PARAMS
          groupsClaim: GROUPS_CLAIM
          groupPrefix: GROUP_PREFIX
          issuerURI: ISSUER_URI
          kubectlRedirectURI: http://localhost:PORT/callback
          scopes: SCOPES
          userClaim: USER_CLAIM
          userPrefix: USER_PREFIX
      - name: azure
        azureAD:
          clientID: CLIENT_ID
          clientSecret: CLIENT_SECRET
          tenant: TENANT_UUID
          kubectlRedirectURI: http://localhost:PORT/callback
          groupFormat: GROUP_FORMAT
          userClaim: USER_CLAIM
    

    如需详细了解 oidc 对象中的字段,请参阅 ClientConfig OIDC 字段

    SAML

    以下 ClientConfig 示例展示了 saml 配置:

        apiVersion: authentication.gke.io/v2alpha1
        kind: ClientConfig
        metadata:
          name: default
          namespace: kube-public
        spec:
          authentication:
          - name: NAME
            saml:
              idpEntityID: ENTITY_ID
              idpSingleSignOnURI: SIGN_ON_URI
              idpCertificateDataList: IDP_CA_CERT
              userAttribute: USER_ATTRIBUTE
              groupsAttribute: GROUPS_ATTRIBUTE
              userPrefix: USER_PREFIX
              groupPrefix: GROUP_PREFIX
              attributeMapping:
                ATTRIBUTE_KEY_1 : ATTRIBUTE_CEL_EXPRESSION_1
                ATTRIBUTE_KEY_2 : ATTRIBUTE_CEL_EXPRESSION_2
            certificateAuthorityData: CERTIFICATE_STRING
            preferredAuthentication: PREFERRED_AUTHENTICATION
            server: <>
    

    如需详细了解这些字段,请参阅 ClientConfig SAML 字段

    LDAP

    以下 ClientConfig 示例展示了 ldap 配置:

    apiVersion: authentication.gke.io/v2alpha1
    kind: ClientConfig
    metadata:
      name: default
      namespace: kube-public
    spec:
      authentication:
      - name: ldap
        ldap:
          server:
            host: HOST_NAME
            connectionType: CONNECTION_TYPE
            certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
          user:
            baseDn: BASE_DN
            loginAttribute: LOGIN_ATTRIBUTE
            filter: FILTER
            identifierAttribute: IDENTIFIER_ATTRIBUTE
          group:
            baseDn: BASE_DN
            filter: FILTER
            identifierAttribute: IDENTIFIER_ATTRIBUTE
          serviceAccount:
            simpleBindCredentials:
              dn: DISTINGUISHED_NAME
              password: PASSWORD
    

    如需详细了解这些字段,请参阅 ClientConfig LDAP 字段

    您可以向同一 ClientConfig 添加多个身份提供方配置。集群会按照每项配置的定义顺序依次尝试进行身份验证,并在首次成功完成身份验证后停止尝试。

  2. 将 ClientConfig 应用于集群:

    gcloud container fleet identity-service apply \
        --membership=CLUSTER_NAME \
        --config=auth-config.yaml
    

    CLUSTER_NAME 替换为集群在舰队内的唯一名称。

集群会安装所有必需的组件,并使用您创建的 ClientConfig。舰队级控制器管理集群的配置。控制器会将对集群配置所做的任何本地更改协调为舰队级配置。

对于某些集群版本,默认情况下,应用舰队级层配置也会向集群添加额外的 authentication 配置。这样,集群就可以检索使用 Google ID 登录的用户账号的 Google 群组信息。此配置适用于 Google Distributed Cloud(VMware裸金属)上的集群。如需详细了解 Google 群组功能,请参阅使用 Google 群组设置 Connect 网关

如果您不再希望舰队级控制器管理您的配置(例如,如果您想要使用其他身份验证选项),则可以按照停用舰队级身份管理中的说明停用此功能。

特定于提供方的配置

本部分为 OIDC 提供方(例如 Azure AD 和 Okta)提供配置指南,包括示例配置,您可以复制该示例配置并使用自己的详细信息进行修改。

Azure AD

这是使用 Azure AD 设置身份验证的默认配置。通过使用此配置,集群可以从 Azure AD 获取用户和群组信息,此外,您可以根据群组设置 Kubernetes 基于角色的访问权限控制 (RBAC)。不过,如果使用此配置,对于每位用户,您最多只能检索大约 200 个群组。

如果对于每位用户,您需要检索 200 个以上的群组,请参阅 Azure AD(高级)部分的说明。

...
spec:
  authentication:
  - name: oidc-azuread
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      extraParams: prompt=consent, access_type=offline
      issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: openid,email,offline_access
      userClaim: email

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

Azure AD(高级)

通过 Azure AD 的此可选配置,集群可以使用 Microsoft Graph API 检索用户和群组信息,并且对于可针对每位用户检索的群组数量,没有任何限制。如需了解支持此配置的平台,请参阅身份提供方设置信息

如果需要针对每位用户检索的群组数量少于 200 个,则建议您使用默认配置,即在您的 ClientConfig 中使用一个 oidc 锚标记。如需了解详情,请参阅 Azure AD 的相关说明。

示例配置中的所有字段都是必填字段。

...
spec:
  authentication:
  - name: azure
    azureAD:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      tenant: TENANT_UUID
      kubectlRedirectURI: http://localhost:PORT/callback
      groupFormat: GROUP_FORMAT
      userClaim: USER_CLAIM

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

GROUP_FORMAT 替换为您要用于检索群组信息的格式。此字段可以接受与用户群组的 IDNAME 相对应的值。此设置仅适用于 Google Distributed Cloud(本地)部署中的集群。

Okta

下面向您展示了如何使用用户和群组设置身份验证,并将 Okta 作为您的身份提供方。此配置允许集群使用访问令牌和 Okta 的 userinfo 端点检索用户和群组声明。

...
spec:
  authentication:
  - name: okta
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      enableAccessToken: true
      extraParams: prompt=consent
      groupsClaim: groups
      issuerURI: https://OKTA_ISSUER_URI/
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: offline_access,email,profile,groups
      userClaim: email

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

配置舰队级默认设置

您可以为身份验证指定舰队级默认配置。使用此设置时,您注册到舰队的每个新集群都会自动使用您指定的身份验证配置。

指定舰队级默认配置后,现有舰队成员集群不会自动更新。您可以选择将默认配置应用于这些集群。如需详细了解如何管理舰队级配置,请参阅管理舰队级功能

设置舰队级默认配置后,当舰队控制器将集群与默认配置进行协调时,对各个集群的身份验证配置所做的任何本地更改都会被覆盖。

如需配置舰队级默认配置,请执行以下操作:

  1. 在名为 fleet-default.yaml 的文件中创建 ClientConfig。如需详细了解如何创建该文件,请参阅配置集群部分中的 gcloud CLI 步骤。
  2. 如需应用舰队级默认配置,请运行以下任一命令:

    • 如果未启用舰队级身份服务功能,请启用该功能并指定舰队级默认配置:

      gcloud container fleet identity-service enable --fleet-default-member-config=fleet-default.yaml
    • 如果已启用舰队级身份服务功能,请应用新的舰队级默认配置:

      gcloud container fleet identity-service apply --fleet-default-member-config=default-config.yaml

    您注册到舰队的新集群默认使用此配置。现有舰队成员集群不会自动继承新的默认配置。

  3. 如需将默认配置应用于现有的舰队成员集群,请运行以下命令:

    gcloud container fleet identity-service apply --origin=fleet --membership=CLUSTER_NAME

移除舰队级默认配置

如需移除默认配置,请运行以下命令:

gcloud container fleet identity-service delete --fleet-default-member-config

您注册到舰队的新集群不会自动使用身份验证配置。

验证身份服务配置

完成舰队级设置后,您可以验证舰队中的集群是否已成功配置了您指定的身份服务配置。

控制台

  1. 在 Google Cloud 控制台中,前往 Feature Manager 页面。

    前往 Feature Manager

    所有已启用的功能在其面板中显示为已启用

  2. Identity Service 面板中,点击详细信息。详细信息面板会显示已注册集群的状态。

gcloud

运行以下命令:

gcloud container fleet identity-service describe

后续步骤

配置集群后,请继续设置用户访问权限