为托管式 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 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 服务所需的角色

对于此集成,Cloud Service Mesh 中的所有工作负载都需要满足以下要求 IAM 角色

    WORKLOAD_IDENTITY="PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/"

    gcloud privateca pools add-iam-policy-binding CA_POOL \
      --project PROJECT_ID \
      --location ca_region \
      --member "group:${WORKLOAD_IDENTITY}" \
      --role "roles/privateca.workloadCertificateRequester"

    gcloud privateca pools add-iam-policy-binding CA_POOL \
      --project 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"

限制

  • 在预配 Cloud Service Mesh 控制平面之前,请先配置并选择 CA。不支持更改 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/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/PROJECT_ID/locations/ca_region/caPools/CA_POOL:projects/PROJECT_ID/locations/ca_region/certificateTemplates/CERT_TEMPLATE_ID"}}'
    

完成配置步骤后,请启用自动管理功能,继续安装代管式 Cloud Service Mesh。