获取 TLS 凭据:示例

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

使用这些凭据的位置

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

网关 TLS 要求
MART 入站流量网关 需要已获授权的 TLS 证书/密钥对。
运行时入站流量网关 您可以使用自签名证书/密钥对或经过授权的 TLS 凭据。
另请参阅外部连接

要求

您需要通过域名注册商获取的域名。您可以通过 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 地址中的说明创建两个静态 IP 地址。您可以随意为地址指定名称,例如 apigee-hybrid-martapigee-hybrid-runtime。完成后,您将在下一步中有两个 IP 号用于集群配置。例如 35.225.131.18934.66.75.196
    • 如果您使用的是 Anthos GKE,请按照 Anthos GKE 文档中的说明创建两个静态 IP 地址。
  5. 创建托管公开区域。如需相关说明,请参阅创建托管公开区域
  6. 获取您为 apigee-hybrid-mart 预留的外部 IP。
  7. 为 MART 端点创建记录集。输入您在上一步中获得的外部 IP,并在域名中添加前缀,例如 mart。如需了解相关说明,请参阅创建新记录

  8. 获取您为 apigee-hybrid-runtime 预留的外部 IP。
  9. 为 Istio Ingress 端点创建记录集。这是对混合网关进行 API 调用的地址。输入您在上一步中获得的外部 IP,并在域名中添加前缀,例如 apitest。如需了解相关说明,请参阅创建新记录

  10. 复制 DNS 记录数据,如以下示例所示:

  11. 通过 Google Domains 返回到您的网域页面。
  12. 选择您的网域。
  13. 选择 DNS
  14. 在“域名服务器”部分,点击修改
  15. 输入您从 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. 将您的替换文件更新为指向证书和私钥。对于 hostAliases,请使用您之前创建的 DNS 名称。

    例如:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: default
        hostAliases: ["apitest.apigee-hybrid-docs.net"]
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
        routingRules:
          - env: test
    
    mart:
      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
      hostAlias: "mart.apigee-hybrid-docs.net"
  19. 应用更改:

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

    apigeectl apply -f your_overrides_file -c mart

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

    apigeectl apply -f your_overrides_file -c runtime
  20. 测试配置

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