获取 TLS 证书:示例

本主题仅作为示例。其介绍了如何从证书授权机构 (CA) Let's Encrypt 获取 TLS 证书。如果您没有其他方法可以获取由 CA 授权的证书/密钥对,则可以遵循这些主要作为示例提供的步骤。本示例显示了如何使用 Let's Encrypt CA、Certbot 客户端和 Google Cloud Platform Cloud DNS 生成证书。

使用这些证书的位置

您必须为集群外部公开的两个 Istio Ingress 网关提供 TLS 证书:

网关 TLS 要求
运行时入站流量网关 您可以使用自签名证书/密钥对或经过授权的 TLS 证书。
MART Ingress 网关(在不使用 Apigee Connect 时可选) 需要已获授权的 TLS 证书/密钥对或 Kubernetes Secret。
另请参阅外部连接

要求

您需要通过域名注册商获取的域名。您可以通过 Google Domains 或自己选择的其他网域注册商注册域名。

配置 Cloud DNS

如需获得已授权的 TLS 证书,您必须拥有合格的域名。以下步骤介绍了如何使用 Google Cloud DNS 来获取域名和管理您的网域服务器。
  1. 打开 Google Cloud 控制台,然后使用您在第 1 步:创建 Google Cloud 账号中创建的账号进行登录。
  2. 选择您在第 2 步:创建 GCP 项目中创建的项目。
  3. 如果您尚未这样做,请启用 Cloud DNS API。请参阅启用 API
  4. 创建静态 IP 地址:
    • 如果您使用的是 GKE,请按照预留静态外部 IP 地址中的说明创建外部处理可用于与混合运行时 Ingress 进行通信的静态 IP 地址。您可以随意为地址命名,例如:apigee-hybrid-runtime。完成后,您将在下一步中使用集群配置中的 IP 编号。例如:34.66.75.196
    • 如果您使用的是 Anthos GKE,请按照 Anthos GKE 文档中的说明创建静态 IP 地址。
  5. 获取刚刚预留的外部 IP。
  6. 为运行时 Istio Ingress 端点创建记录集。这是对混合网关进行 API 调用的地址。输入您在上一步中获得的外部 IP,并在域名中添加前缀,例如 example-endpoint。如需了解相关说明,请参阅创建新记录
    1. 创建托管公开区域。如需相关说明,请参阅创建托管公开区域
    2. 使用以下条件创建一个新记录集:
      • DNS 名称:外部 API 调用将与其通信的端点名称,例如 api-servicesexample-endpoint
      • 资源记录类型A
      • TTLTTL Unit:接受默认值
      • IP 地址:您创建的静态 IP。
  7. 区域详细信息视图将列出 foour DNS 服务器,作为新区域的 NS 数据。复制 DNS 记录数据,如以下示例所示:

  8. 返回到注册商的网域页面(例如 Google Domains)。
  9. 选择您的网域。
  10. 选择 DNS
  11. 在“域名服务器”部分,点击修改
  12. 输入您从 Network Service Cloud DNS 页面复制的域名服务器。例如:

现在,Google Cloud DNS 将管理网域的 DNS 记录。

在虚拟机上安装 Certbot

现在,您已经设置了 Cloud DNS 来管理您的网域服务器,接下来需要使用 Cloud 虚拟机上的 dns_google 插件安装 Certbot 客户端。该客户端允许您从 Let's Encrypt 端点获取网域的授权证书。

  1. 打开 Google Cloud 控制台,然后使用您在第 1 步:创建 Google Cloud 账号中创建的账号进行登录。
  2. 选择您在第 2 步:创建 GCP 项目中创建的项目。
  3. 选择 IAM 和管理 > 服务账号

    服务账号视图会显示项目的服务账号列表。

  4. 如需创建新的服务账号,请点击视图顶部的 +创建服务账号

    此时会显示服务账号详细信息视图。

  5. 服务账号名称字段中,输入服务账号的名称。

    您可以选择在服务账号说明字段中添加说明。说明可提醒您特定服务账号的用途。

  6. 点击创建

    GCP 会创建一个新的服务账号,并显示服务账号权限视图。使用此视图为新服务账号分配角色。

  7. 点击选择角色下拉列表。
  8. 选择 Project Owner 角色。
  9. 点击继续
  10. 点击完成
  11. 在 GCP Console 中,选择 Compute Engine > 虚拟机实例
  12. 创建一个名为 certmanager 的虚拟机实例。
  13. 在“启动磁盘”部分,为 SSD 永久性云端硬盘选择 CentOS7 和 20 GB。
  14. 将服务账号设置为您之前创建的服务账号。
  15. 在机器上安装 Certbot 和 dns_google 插件并运行 Certbot 客户端:
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    例如:

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
  16. 您现在可以在此目录中找到已授权的证书和私钥文件:cd /etc/letsencrypt/live/your_domain_name/

    例如:

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.pem  README
  17. 将文件 fullchain.pemprivkey.pem 复制到本地机器。
  18. 可选:使用证书/密钥对创建 Kubernetes Secret。请参阅在 Istio Ingress 上配置 TLS 和 mTLS 中的方法 2:Kubernetes Secret 中的说明。
  19. 将您的替换文件更新为指向证书和私钥。对于 hostAliases,请使用您之前创建的 DNS 名称。

    例如:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
      sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
      sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
      replicaCountMin: 1
      replicaCountMax: 1

    或者,如果使用的是 Kubernetes Secret,请执行以下操作:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        tlsMode: SIMPLE  # Note: SIMPLE is the default, MUTUAL is also an available value.
        sslSecret: myorg-test-policy-secret"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
        sslSecret: myorg-test-policy-secret"
      replicaCountMin: 1
      replicaCountMax: 1
    
    ...  
  20. 应用更改:

    如果您更改了 mart 配置,请应用更改:

    apigeectl apply -f your_overrides_file --all-envs

    如果您更改了 envs 配置,请应用更改:

    apigeectl apply -f your_overrides_file --all-envs
  21. 测试配置

    部署和测试代理,如创建和部署新的 API 代理中所述。