本文档介绍了集群管理员如何使用舰队设置多个集群,以便通过第三方身份提供方进行身份验证。 Google Cloud 可管理舰队中集群的配置,与设置单个集群相比,设置过程更快、更简单。如需详细了解第三方提供商身份验证流程,请参阅关于使用第三方身份进行身份验证。
准备工作
安装和配置 Google Cloud CLI:
-
Install the Google Cloud CLI.
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
初始化 gcloud CLI 后,对其进行更新并安装所需组件:
gcloud components update gcloud components install kubectl
- 在 gcloud CLI 中,选择您的舰队宿主项目:
将gcloud config set project FLEET_HOST_PROJECT_ID
FLEET_HOST_PROJECT_ID替换为您的舰队宿主项目的 ID。
-
启用必需的 API:
在 Google Cloud 控制台中,前往项目选择器页面:
选择您的舰队宿主项目。
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 theserviceusage.services.enablepermission. Learn how to grant roles.
请确保平台管理员已为您提供所选协议所需的所有提供方信息。有关详情,请参阅以下文档:
所需的角色
如需获得在舰队级层设置集群所需的权限,请让您的管理员为您授予舰队宿主项目的 Fleet Admin (roles/gkehub/admin) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
启用舰队级 Identity Service 功能
舰队级身份服务功能使用控制器来管理舰队中每个集群的配置。您只需在舰队宿主项目中启用舰队级功能。
如需启用舰队级功能,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往 GKE Identity Service 页面。
点击启用 Identity Service。
gcloud
启用舰队级身份服务功能:
gcloud container fleet identity-service enable
配置集群
如需配置集群,您必须指定以下信息:
- 有关身份提供方的信息,例如客户端 ID 和密钥。
- 有关身份提供方用于身份验证的 JSON Web 令牌 (JWT) 的信息。
- 特定于身份提供商的任何其他范围或参数。
如需详细了解您需要从平台管理员或组织中管理身份的人员处获取哪些信息,请参阅以下文档:
如果您已有 OIDC 提供方的现有集群级配置,则对集群应用舰队级配置将会覆盖所有现有身份验证规范。此外,如果舰队级配置不支持提供方的现有集群级配置,则此设置将失败。您必须移除现有的提供方配置才能应用舰队级配置。
如需配置集群,请按以下步骤操作:
控制台
选择要配置的集群:
在 Google Cloud 控制台中,前往 GKE Identity Service 页面。
选中要配置的集群对应的一个或多个复选框。您可以选择单个集群,也可以指定所有集群都使用相同的身份配置。 如果您已配置舰队级默认设置,则系统会将配置协调回默认设置。
点击更新配置。修改 Identity Service 集群配置窗格随即会打开。
在身份提供方部分中,选择您要如何配置集群。您可以更新现有配置、从其他集群复制配置,也可以创建新配置。如需创建新配置,请点击添加身份提供方。系统会显示新身份提供方部分。
在新的身份提供商部分,设置提供商详细信息:
OIDC
- 选择新建 Open ID Connect,以创建新的 OIDC 配置。
- 在提供方名称字段中指定要用于识别此配置的名称,通常是身份提供方名称。此名称必须以字母开头,后面最多可跟 39 个小写字母、数字或连字符,但不能以连字符结尾。创建配置后,您将无法修改此名称。
- 在客户端 ID 字段中指定身份提供方的客户端 ID。
- 在客户端密钥字段中指定客户端应用和身份提供方之间必须共享的客户端密钥。
- 在颁发者网址字段中,指定用于向您的身份提供方发出授权请求的 URI。
- 点击下一步以设置 OIDC 特性。
Azure AD
- 选择新建 Azure Active Directory,以创建新的 Azure AD 配置。
- 在提供方名称字段中指定要用于识别此配置的名称,通常是身份提供方名称。此名称必须以字母开头,后面最多可跟 39 个小写字母、数字或连字符,但不能以连字符结尾。创建配置后,您将无法修改此名称。
- 在客户端 ID 字段中指定身份提供方的客户端 ID。
- 在客户端密钥字段中指定客户端应用和身份提供方之间必须共享的客户端密钥。
- 在租户中指定租户,即要进行身份验证的 Azure AD 账号。
- 点击下一步以设置 Azure AD 特性。
LDAP
- 选择 LDAP,以创建新的 LDAP 配置。
- 在提供方名称字段中指定要用于识别此配置的名称,通常是身份提供方名称。此名称必须以字母开头,后面最多可跟 39 个小写字母、数字或连字符,但不能以连字符结尾。创建配置后,您将无法修改此名称。
- 点击下一步。
- 指定 LDAP 服务器的主机名(必填)、LDAP 连接类型和 base64 编码的 CA 证书。
- 点击下一步以配置服务器。
- 指定用户的标识名、过滤条件、登录属性和标识符属性。
- 点击下一步以设置用户详细信息。
- 如果您选择使用群组,请指定群组的标识名、过滤条件和标识符属性。
- 点击下一步以设置群组详细信息。
- 指定服务账号的用户名和密码。
- 点击完成以设置服务账号名称。
点击下一步。系统会打开设置属性部分。
为身份提供方设置属性。如需查看 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 提供方。“邮件”以外的声明会以颁发者网址作为前缀,以防止命名冲突。
- 用户前缀(可选):如果您不想使用默认前缀,则该参数为您要附加到用户声明的前缀,以防止与现有名称冲突。
- 额外参数(可选):配置所需的任何额外参数,指定为参数 Key 和 Value。如果需要,请点击添加参数添加更多参数。
- 启用访问令牌(可选):如果启用,则允许为 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。
点击完成。
可选:如需向配置中添加更多提供方,请点击添加身份提供方,然后重复上述步骤。
点击更新配置。
这会在必要时安装所有必需的组件,并在所选集群上应用客户端配置。
gcloud
如需使用 gcloud CLI 配置舰队,请创建一个名为 ClientConfig 的 Kubernetes 自定义资源,其中包含集群与身份提供方交互所需的全部信息对应的字段。如需创建和使用 ClientConfig,请按以下步骤操作:
在名为
auth-config.yaml的文件中创建 ClientConfig 规范。如需查看 OIDC、SAML 或 LDAP 的配置示例,请选择以下选项之一。如需了解其他身份提供方配置,请参阅提供方专用配置。OIDC
以下 ClientConfig 示例同时展示了
oidc配置和azuread配置。如需详细了解何时使用oidc或azuread,请参阅提供方专用配置。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 添加多个身份提供方配置。集群会按照每项配置的定义顺序依次尝试进行身份验证,并在首次成功完成身份验证后停止尝试。
将 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 替换为您要用于检索群组信息的格式。此字段可以接受与用户群组的 ID 或 NAME 相对应的值。此设置仅适用于 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.
...
配置舰队级默认设置
您可以为身份验证指定舰队级默认配置。使用此设置时,您注册到舰队的每个新集群都会自动使用您指定的身份验证配置。
指定舰队级默认配置后,现有舰队成员集群不会自动更新。您可以选择将默认配置应用于这些集群。如需详细了解如何管理舰队级配置,请参阅管理舰队级功能。
设置舰队级默认配置后,当舰队控制器将集群与默认配置进行协调时,对各个集群的身份验证配置所做的任何本地更改都会被覆盖。
如需配置舰队级默认配置,请执行以下操作:
- 在名为
fleet-default.yaml的文件中创建 ClientConfig。如需详细了解如何创建该文件,请参阅配置集群部分中的 gcloud CLI 步骤。 如需应用舰队级默认配置,请运行以下任一命令:
如果未启用舰队级身份服务功能,请启用该功能并指定舰队级默认配置:
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
您注册到舰队的新集群默认使用此配置。现有舰队成员集群不会自动继承新的默认配置。
如需将默认配置应用于现有的舰队成员集群,请运行以下命令:
gcloud container fleet identity-service apply --origin=fleet --membership=CLUSTER_NAME
移除舰队级默认配置
如需移除默认配置,请运行以下命令:
gcloud container fleet identity-service delete --fleet-default-member-config
您注册到舰队的新集群不会自动使用身份验证配置。
验证身份服务配置
完成舰队级设置后,您可以验证舰队中的集群是否已成功配置了您指定的身份服务配置。
控制台
在 Google Cloud 控制台中,前往 Feature Manager 页面。
所有已启用的功能在其面板中显示为已启用。
在 Identity Service 面板中,点击详细信息。详细信息面板会显示已注册集群的状态。
gcloud
运行以下命令:
gcloud container fleet identity-service describe
后续步骤
配置集群后,请继续设置用户访问权限。