为托管式 Cloud Service Mesh 配置 Certificate Authority Service
本指南介绍了如何为托管式 Cloud Service Mesh 配置 Certificate Authority Service。如需了解集群内 Cloud Service Mesh,请参阅安装默认功能和证书授权机构 (CA) 服务。
除 Cloud Service Mesh 证书授权机构 以外,您也可以将 Cloud Service Mesh 配置为使用 Certificate Authority Service。本指南提供了与 CA Service 集成的机会,建议用于以下使用场景:
- 您需要不同的证书授权机构对不同集群上的工作负载证书签名。
- 您需要将签名密钥备份到代管式 HSM 中。
- 您从事的要是严格监管的行业,且需要遵守法规。
- 您需要将 Cloud Service Mesh CA 链接到自定义企业根证书来为工作负载证书签名。
Cloud Service Mesh 证书授权机构的费用包含在 Cloud Service Mesh 价格中。CA Service 不包含在 Cloud Service Mesh 基础价格中,而是单独计费。此外,CA Service 附带显式 SLA,但 Cloud Service Mesh 证书授权机构没有。
使用要求
在将配置 CA 池的项目中启用所需的 API。
gcloud services enable privateca.googleapis.com \
--project=CA_PROJECT_ID
配置 CA Service
- 在层级
DevOps
中创建 CA 池,并且与其服务的集群位于同一区域,以避免延迟时间过长问题或潜在的跨区域服务中断。如需了解详情,请参阅工作负载优化的层级。 - 创建 CA,从而保证在 GKE 集群所在项目内,该 CA 池中至少有一个活跃的证书授权机构。使用从属 CA 对 Cloud Service Mesh 工作负载证书签名。记下与从属 CA 对应的 CA 池。
如果您希望它仅为 Cloud Service Mesh 工作负载提供证书,请为 CA 池设置以下颁发政策:
policy.yaml
baselineValues: keyUsage: baseKeyUsage: digitalSignature: true keyEncipherment: true extendedKeyUsage: serverAuth: true clientAuth: true caOptions: isCa: false identityConstraints: allowSubjectPassthrough: false allowSubjectAltNamesPassthrough: true celExpression: expression: subject_alt_names.all(san, san.type == URI && san.value.startsWith("spiffe://PROJECT_ID.svc.id.goog/ns/") )
要更新 CA 池的颁发政策,请使用以下命令:
gcloud privateca pools update CA_POOL --location ca_region --issuance-policy policy.yaml
如需了解如何对池设置政策,请参阅使用证书颁发政策。
如果您使用的是证书模板,请立即配置。如需了解详情,请按照 CA 服务指南获取工作负载身份证书。确保在 CA 池所在的区域中创建证书模板。如果 CA 池有多个区域,则每个区域创建一个证书模板。
使用 CA Service 所需的角色
对于此集成,Cloud Service Mesh 中的所有工作负载都需要以下 IAM 角色。需要为 Cloud Service Mesh 工作负载明确应用以下角色绑定:
WORKLOAD_IDENTITY="FLEET_PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/"
gcloud privateca pools add-iam-policy-binding CA_POOL \
--project FLEET_PROJECT_ID \
--location ca_region \
--member "group:${WORKLOAD_IDENTITY}" \
--role "roles/privateca.workloadCertificateRequester"
gcloud privateca pools add-iam-policy-binding CA_POOL \
--project FLEET_PROJECT_ID \
--location ca_region \
--member "group:${WORKLOAD_IDENTITY}" \
--role "roles/privateca.auditor"
如果使用的是证书模板:
gcloud privateca templates add-iam-policy-binding CERT_TEMPLATE_ID \
--member "group:${WORKLOAD_IDENTITY}" \
--role "roles/privateca.templateUser"
限制
- 请先配置并选择 CA,然后再预配 Cloud Service Mesh 控制平面。不支持更改 CA。
将托管式 Cloud Service Mesh 配置为使用 CA Service
验证
istio-system
命名空间是否存在,如果不存在,请创建该命名空间:kubectl create ns istio-system
检查
istio-system
命名空间中是否存在asm-options
configmap:kubectl get configmap/asm-options -n istio-system
如果 configmap 不存在,请创建一个:
kubectl create configmap -n istio-system asm-options
修补 configmap 以添加 CAS 配置:
kubectl patch configmap/asm-options -n istio-system --type merge \ -p '{"data":{"ASM_OPTS": "CA=PRIVATECA;CAAddr=projects/CA_PROJECT_ID/locations/ca_region/caPools/CA_POOL"}}'
如果需要证书模板,请使用
:
作为分隔符将模板 ID 附加到 CA 池地址:kubectl patch configmap/asm-options -n istio-system --type merge \ -p '{"data":{"ASM_OPTS": "CA=PRIVATECA;CAAddr=projects/CA_PROJECT_ID/locations/ca_region/caPools/CA_POOL:projects/PROJECT_ID/locations/ca_region/certificateTemplates/CERT_TEMPLATE_ID"}}'
完成配置步骤后,请启用自动管理,继续安装托管式 Cloud Service Mesh。