本主题仅作为示例。其介绍了如何从证书授权机构 (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 来获取域名和管理您的网域服务器。- 打开 Google Cloud 控制台并登录您的账号。
- 选择安装了 Apigee Hybrid 的项目。
- 如果您尚未这样做,请启用 Cloud DNS API。请参阅启用 API。
- 创建静态 IP 地址:
- 如果您使用的是 GKE,请按照预留静态外部 IP 地址中的说明创建外部处理可用于与混合运行时 Ingress 进行通信的静态 IP 地址。您可以随意为地址命名,例如:
apigee-hybrid-runtime
。完成后,您将在下一步中使用集群配置中的 IP 编号。例如:34.66.75.196
- 如果您使用的是 Google Distributed Cloud,请按照规划 IP 地址和创建用户集群中的说明创建静态 IP 地址。
- 如果您使用的是 GKE,请按照预留静态外部 IP 地址中的说明创建外部处理可用于与混合运行时 Ingress 进行通信的静态 IP 地址。您可以随意为地址命名,例如:
- 获取刚刚预留的外部 IP。
- 为运行时 Istio 入站流量端点创建记录集。这是对混合网关进行 API 调用的地址。输入您在上一步中获得的外部 IP,并在域名中添加前缀,例如
example-endpoint
。如需了解相关说明,请参阅创建新记录。- 创建托管公开区域。如需相关说明,请参阅创建托管公开区域。
- 使用以下条件创建一个新记录集:
- DNS 名称:外部 API 调用将与其通信的端点名称,例如
api-services
或example-endpoint
- 资源记录类型:A
- TTL 和 TTL:接受默认值
- IP 地址:您创建的静态 IP。
- DNS 名称:外部 API 调用将与其通信的端点名称,例如
- 区域详细信息视图将列出四个 DNS 服务器,作为新区域的 NS 数据。复制 DNS 记录数据,如以下示例所示:
- 返回到注册商的网域页面(例如 Google Domains)。
- 选择您的网域。
- 选择 DNS。
- 在“域名服务器”部分,点击修改。
输入您从 Network Service Cloud DNS 页面复制的域名服务器。例如:
现在,Google Cloud DNS 将管理网域的 DNS 记录。
在虚拟机上安装 Certbot
现在,您已经设置了 Cloud DNS 来管理您的网域服务器,接下来需要使用 Cloud 虚拟机上的 dns_google 插件安装 Certbot 客户端。该客户端允许您从 Let's Encrypt 端点获取网域的授权证书。
- 打开 Google Cloud 控制台,然后使用您在第 1 步:创建 Google Cloud 账号中创建的账号进行登录。
- 选择您在第 2 步:创建 Google Cloud 项目中创建的项目。
- 选择 IAM 和管理 > 服务账号。
服务账号视图会显示项目的服务账号列表。
- 如需创建新的服务账号,请点击视图顶部的 +创建服务账号。
此时会显示服务账号详细信息视图。
- 在服务账号名称字段中,输入服务账号的名称。
您可以选择在服务账号说明字段中添加说明。说明可提醒您特定服务账号的用途。
- 点击创建。
Google Cloud 会创建一个新的服务账号,并显示服务账号权限视图。使用此视图为新服务账号分配角色。
- 点击选择角色下拉列表。
- 选择 Project Owner 角色。
- 点击继续。
- 点击完成。
- 在 Google Cloud 控制台中,选择 Compute Engine > 虚拟机实例。
- 创建一个名为 certmanager 的虚拟机实例。
- 在“启动磁盘”部分,为 SSD 永久性云端硬盘选择 CentOS7 和 20 GB。
- 将服务账号设置为您之前创建的服务账号。
- 在机器上安装 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
- 您现在可以在此目录中找到已授权的证书和私钥文件:
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 - 将文件
fullchain.pem
和privkey.key
复制到本地机器。 - 可选:使用证书/密钥对创建 Kubernetes Secret。请参阅在 Istio Ingress 上配置 TLS 和 mTLS 中的方法 2: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 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" ...
- 将更改应用于
envs
配置:为要更新的每个环境运行 helm 升级 。helm upgrade ENV_NAME apigee-env/ \ --namespace apigee \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE.yaml
测试配置
部署和测试代理。请参阅构建第一个 API 代理概览。