为托管式 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

  1. 在层级 DevOps创建 CA 池,并且与其服务的集群位于同一区域,以避免延迟时间过长问题或潜在的跨区域服务中断。如需了解详情,请参阅工作负载优化的层级
  2. 创建 CA,从而保证在 GKE 集群所在项目内,该 CA 池中至少有一个活跃的证书授权机构。使用从属 CA 对 Cloud Service Mesh 工作负载证书签名。记下与从属 CA 对应的 CA 池
  3. 如果您希望它仅为 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/") )
    
  4. 要更新 CA 池的颁发政策,请使用以下命令:

    gcloud privateca pools update CA_POOL --location ca_region --issuance-policy policy.yaml
    

    如需了解如何对池设置政策,请参阅使用证书颁发政策

  5. 如果您使用的是证书模板,请立即配置。如需了解详情,请按照 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

  1. 验证 istio-system 命名空间是否存在,如果不存在,请创建该命名空间:

      kubectl create ns istio-system
    
  2. 检查 istio-system 命名空间中是否存在 asm-options configmap:

      kubectl get configmap/asm-options -n istio-system
    
  3. 如果 configmap 不存在,请创建一个:

      kubectl create configmap -n istio-system asm-options
    
  4. 修补 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。