本页面适用于平台管理员。
您只能出于演示或测试目的,尝试使用 Keycloak 或 Google 单点登录 (SSO) 进行身份验证。
使用 Keycloak 进行身份验证
Keyclak 是一款开源软件身份和访问权限管理产品。您可以将它设置为 OIDC 提供商以进行快速演示。
准备工作
要安装并启用 Keycloak,您需要有一个 Kubernetes 集群,它具有一个可从在断开连接模式下运行的 Anthos 部署访问的 Ingress 地址。本页面使用在断开连接模式下运行的 Anthos 管理员集群作为示例。
您还必须为在断开连接模式下运行的 Anthos Management Center 创建自定义域名。请参阅配置域名以访问 Management Center。
将 Management Center 域名导出为变量,例如:
export ANTHOS_MANAGEMENT_CENTER=anthos.example.com
将私有注册表导出为变量,例如:
export PRIVATE_REGISTRY=10.200.0.2/library
下载 Keycloak 映像并推送到私有注册表
从 dockerhub 下载 Keycloak 映像:
actl images save \ --output keycloak-image \ jboss/keycloak:12.0.2
将 Keycloak 映像推送到私有注册表:
actl images push \ --images keycloak-image \ --private-registry=${PRIVATE_REGISTRY}
部署 Keycloak
更新 DNS 配置并生成证书以部署 Keycloak。
创建 Keycloak 服务以公开 Keycloak 的 IP:
kubectl create -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: keycloak --- apiVersion: v1 kind: Service metadata: name: keycloak-svc namespace: keycloak labels: app: keycloak spec: ports: - name: http port: 80 targetPort: 8080 - name: https port: 443 targetPort: 8443 selector: app: keycloak type: LoadBalancer EOF
在 LoadBalancer 分配 IP 后,将该 IP 导出到变量中,例如:
export KEYCLOAK_SVC_IP=$(kubectl get services -n keycloak \ -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
将“A 记录”添加到您的 DNS 网域配置,并将其设置为
${KEYCLOAK_SVC_IP}
:export KEYCLOAK_SVC=keycloak.example.com
为 Keycloak 生成用于 TLS 的自签名证书。
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -subj \ "/CN=${KEYCLOAK_SVC}" \ -addext "subjectAltName = DNS:localhost,DNS:${KEYCLOAK_SVC},IP:${KEYCLOAK_SVC_IP}" \ -out "tls.crt" -keyout "tls.key"
将证书和私钥上传到集群中:
kubectl create secret tls tls-config -n keycloak --cert=tls.crt \ --key=tls.key
运行以下命令以部署 Keycloak:
kubectl create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: keycloak namespace: keycloak labels: app: keycloak spec: replicas: 1 selector: matchLabels: app: keycloak template: metadata: labels: app: keycloak spec: volumes: - name: tls-config-volume secret: secretName: tls-config items: - key: tls.crt path: tls.crt - key: tls.key path: tls.key containers: - name: keycloak # Set the image as original path but the actual image will be pulled from the registry mirror, # which was configured by 'actl push' command. image: jboss/keycloak:12.0.2 # Keycloak uses certificates stored in /etc/x509/https to set up TLS. # https://github.com/keycloak/keycloak-containers/blob/master/server/README.md#setting-up-tlsssl volumeMounts: - name: tls-config-volume mountPath: "/etc/x509/https" env: - name: KEYCLOAK_USER value: "admin" - name: KEYCLOAK_PASSWORD value: "admin" - name: PROXY_ADDRESS_FORWARDING value: "true" ports: - name: http containerPort: 8080 - name: https containerPort: 8443 readinessProbe: httpGet: path: /auth/realms/master port: 8080 EOF
设置 Keycloak 用户和客户端
在管理员工作站上打开 Keycloak 控制台,然后使用 keycloak.yaml
文件中的 KEYCLOAK_USER
和 KEYCLOAK_PASSWORD
登录。默认情况下,这些值为 KEYCLOAK_USER=admin
和 KEYCLOAK_PASSWORD=admin
。如果需要,请在浏览器中接受自签名证书。如果 Chrome 显示有关不受信任证书的警告,请在对话框中输入 thisisunsafe
。
echo "Keycloak console: https://${KEYCLOAK_SVC}"
创建大区
- 将光标悬停在左上角的主实例上,然后点击添加大区。
- 输入
anthos
作为新大区的名称,然后点击创建。 - 在大区设置 > 令牌中,将访问令牌有效期更改为
1 Hour
,以防止令牌过早过期,然后点击保存。
创建用户
- 在左侧导航栏中,点击用户,然后点击添加用户。
- 为用户配置以下设置,然后点击保存。
- 用户名:
anthos-platform-admin
- 电子邮件地址:
anthos-platform-admin@example.com
- 用户已启用:开启
- 电子邮件已验证:开启
- 用户名:
- 在凭据标签页中,填写密码和确认密码字段。点击设置密码,并在系统提示时进行验证。
创建客户端
- 在左侧导航栏中,点击客户端,然后点击创建。
- 为客户端配置以下设置,然后点击保存。
ANTHOS_MANAGEMENT_CENTER
是您用于 Management Center 的自定义域名。- 客户端 ID:Anthos
- 客户端协议:openid-connect
- 根网址:https://
ANTHOS_MANAGEMENT_CENTER
- 转到新创建的客户端的管理页面。
- 在客户端管理页面的设置标签页上,执行以下步骤:
- 将访问权限类型设置为
confidential
。 - 将以下 URI 添加到有效的重定向 URI 中。
- http://localhost:9879/callback
- https://
ANTHOS_MANAGEMENT_CENTER
/_gcp_anthos_oidc_callback
- 点击保存。
- 将访问权限类型设置为
- 在客户端管理页面的凭据标签页中,选择客户端 ID 和 Secret 作为客户端身份验证器。
- 在某一位置记下密文。
(推荐)在 Keycloak 中设置群组成员资格
- 在左侧导航栏中,点击群组,然后点击新建。
- 输入您的群组名称:
anthos-platform-admin-group
- 返回左侧的用户标签页,然后点击查看所有用户。
- 点击您刚刚创建的用户 (anthos-platform-admin),然后点击群组标签页。
- 在可用组下,选择您创建的组
anthos-platform-admin-group
,然后点击加入。 - 返回到 anthos 客户端管理页面。
- 点击映射器标签页,然后点击创建:
- 输入此映射器的名称:
anthos-platform-admin-group-mapper
。 - 在映射器类型下拉列表中,选择群组成员资格。
Token Claim Name
是身份验证令牌中显示的属性值。在断开连接模式下运行的 Anthos 中的默认值为“groups”,因此您可以在此字段中使用groups
。请记住,如果Token Claim Name
名称不是groups
,则需要使用此值修改 OIDC 配置GroupsClaim
字段。- 确保已停用完整群组路径。
- 确保添加到 ID 令牌、添加到访问令牌和添加到用户信息均已启用。
- 点击保存。
- 输入此映射器的名称:
启用 OIDC 身份验证
获取要在后续步骤中使用的 OIDC 提供商网址。
运行以下命令:
export ISSUER_URL=https://${KEYCLOAK_SVC}/auth/realms/anthos echo "Issuer URL: ${ISSUER_URL}"
使用前面的
tls.crt
生成 Base64 编码的证书。export BASE64_CERT=$(openssl base64 -A -in tls.crt) echo "Use the following string as the base64-encoded certificate for the OIDC provider: ${BASE64_CERT}"
使用 Management Center Console 的建议方法
- 在 Management Center Console 中,打开身份和访问权限菜单。
- 在身份标签页中,点击设置 Anthos Identity Service (OIDC)
填写以下字段,为 Keycloak 创建配置文件,然后点击提交:
- 配置文件名称:
keycloak
- OIDC 提供商网址:启用 OIDC 身份验证部分中的颁发者网址。
- OIDC 客户端 ID:
anthos
- OIDC 客户端密钥:创建客户端部分中的客户端密钥
- 用户名声明:
email
- 用户名前缀:
keycloak-
- 群组声明:设置群组成员资格部分中的群组声明。如果将此字段留空,则值为
groups
。 - 群组前缀:
keycloak-
- 范围:
email openid
- 额外参数:
access_type=offline
- 证书授权机构数据:使用启用 OIDC 身份验证部分中的 base64 编码证书。
- 配置文件名称:
点击将配置文件应用于集群,然后点击管理员集群标签页。
对于配置文件,请选择您刚刚创建的“keycloak”配置文件。
对于域名,请输入
ANTHOS_MANAGEMENT_CENTER
。对于初始平台管理员,请始终在用户名之前添加用户前缀。例如,如果要添加
anthos-platform-admin@example.com
,请输入keycloak-anthos-platform-admin@example.com
。点击提交,然后等待一分钟,让系统重新配置各种系统组件。
在无痕式窗口中,导航到 https://
ANTHOS_MANAGEMENT_CENTER
。您将被重定向到 Keycloak 登录页面,您可在设置永久性密码之后,以anthos-platform-admin
身份登录。
替代方法(通过应用 yaml 文件)
为网域设置 IDP 提供商。如果为网域创建了
DomainConfig
,请修补该对象以通过以下命令设置要用于网域的身份验证方法名称:kubectl patch domainconfig anthos.example.com --type=json -p='[{"op": "replace", "path": "/spec/authMethodName", "value":"keycloak"}]'
如果没有为网域创建
DomainConfig
,请使用以下命令进行创建:kubectl create -f - <<EOF apiVersion: managementcenter.anthos.cloud.google.com/v1 kind: DomainConfig metadata: name: anthos.example.com spec: authMethodName: keycloak EOF
请使用以下内容创建
clientconfig-patch.yaml
:# Use this to set the OIDC configuration of Keycloak: # kubectl patch ClientConfig default -n kube-public --type=merge --patch $(cat clientconfig-patch.yaml) spec: authentication: # The name of the OIDC configuration to create. - name: keycloak oidc: # ID for the client application that makes authentication requests to the OpenID provider. clientID: anthos # ID for the client application that makes authentication requests to the OpenID provider. clientSecret: YOUR_CLIENT_SECRET # The URI to redirect users going through the OAuth flow using cloud console. # This is not supported by Anthos running in disconnected mode. cloudConsoleRedirectURI: http://cloud.console.not.enabled # Additional key-value parameters (comma-separated) to send to the OpenID provider. extraParams: access_type=offline # URL where authorization requests are sent to your OpenID. issuerURI: YOUR_ISSUER_URI # The redirect URL that kubectl uses for authorization. kubectlRedirectURI: http://localhost:9879/callback # Additional scopes to send to the OpenID provider. scopes: openid email # JWT claim to use as the username. You can choose other claims, such as email or name, # depending on the OpenID provider. However, claims other than email are prefixed # with the issuer URL to prevent naming clashes. userClaim: email # A base64-encoded PEM-encoded certificate for the OIDC provider. To create the string, # encode the certificate, including headers, into base64. Include the resulting string # in certificateAuthorityData as a single line. certificateAuthorityData: YOUR_CERTIFICATE
使用 Keycloak 设置修改
clientconfig-patch.yaml
。sed -i "s|YOUR_ISSUER_URI|${ISSUER_URL}|g" clientconfig-patch.yaml sed -i "s|YOUR_CERTIFICATE|${BASE64_CERT}|g" clientconfig-patch.yaml
将
YOUR_CLIENT_SECRET
替换为从 Keycloak 的凭据标签页中获取的客户端密钥。运行以下命令以配置 OIDC:
kubectl patch ClientConfig default -n kube-public --type=merge \ --patch "$(cat clientconfig-patch.yaml)"
请等待一分钟,以便重新配置各种系统组件。
按照配置授权角色中的说明设置初始平台管理员帐号。
在无痕式窗口中,导航到 https://
ANTHOS_MANAGEMENT_CENTER
。您将被重定向到 Keycloak 登录页面,您可在设置永久性密码之后,以anthos-platform-admin
身份登录。
删除 Keycloak
使用完 Keycloak 演示后,请删除 Keycloak 安装。
kubectl delete ns keycloak
使用 Google 单点登录进行身份验证
Google 单点登录在 Anthos 不公开模式下不可用。如果要使用 Google 单点登录,则集群和浏览器都必须能够与 Google 的单点登录服务器通信。Google 的单点登录服务器不需要与用户集群通信。
- 登录 Google Cloud Console 并选择有效的项目。
- 访问“API 和服务 > OAuth 同意屏幕”部分。
- 创建一个新的 OAuth 同意屏幕。系统会向用户显示此信息。
- 将应用首页设置为管理员网址。
- 在 API 和服务 > 凭据部分中执行以下操作:
- 点击创建凭据。
- 创建一个新的 OAuth 客户端 ID。
- 将应用类型设置为 Web 应用。
- 选择一个相关的名称
- 对于 JavaScript 来源,请设置
https://anthos.example.com
(假设https://anthos.example.com
是 Management Center 的域名)。 - 对于已获授权的重定向 URI,请设置:
https://anthos.example.com/_gcp_anthos_oidc_callback
http://localhost:9879/callback
- 将 ClientID 和客户端密钥复制到 AdminUI 配置。
- 将 OIDC 提供方网址设置为
https://accounts.google.com
。。 - 将
Username Claim
设置为email
,并将Scopes
设置为openid email
。 - 将“额外的参数”设置为
prompt=consent,access_type=offline
。否则,您无法使用 Kubernetes API 服务器登录。 - 添加要授予 Platform Admin 权限的用户电子邮件的初始列表(用英文逗号分隔)。
- 点击
Save
。