获取 TLS 证书:示例

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

使用这些证书的位置

您必须为集群外部公开的运行时入站流量网关提供 TLS 证书。

另请参阅外部连接

要求

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

配置 Cloud DNS

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

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

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

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

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

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

  6. 点击创建

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

  7. 点击选择角色下拉列表。
  8. 选择 Project Owner 角色。
  9. 点击继续
  10. 点击完成
  11. 在 Google Cloud 控制台中,选择 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.key  README
  17. 将文件 fullchain.pemprivkey.key 复制到本地机器。
  18. 可选:使用证书/密钥对创建 Kubernetes Secret。请参阅在 Istio Ingress 上配置 TLS 和 mTLS 中的方法 2:Kubernetes Secret 中的说明。
  19. 将您的替换文件更新为指向证书和私钥。

    例如:

    ...
    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.key"

    或者,如果使用的是 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"
    
    ...  
  20. 将更改应用于 envs 配置:

    为要更新的每个环境运行 helm 升级

    helm upgrade ENV_NAME apigee-env/ \
      --namespace apigee \
      --set env=ENV_NAME \
      --atomic \
    -f OVERRIDES_FILE.yaml
    
  21. 测试配置

    部署和测试代理。请参阅构建第一个 API 代理概览