本主题仅作为示例。其介绍了如何从证书授权机构 (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 来获取域名和管理您的网域服务器。- 打开 Google Cloud 控制台,然后使用您在第 1 步:创建 Google Cloud 账号中创建的账号进行登录。
- 选择您在第 2 步:创建 GCP 项目中创建的项目。
- 如果您尚未这样做,请启用 Cloud DNS API。请参阅启用 API。
- 创建静态 IP 地址:
- 如果您使用的是 GKE,请按照预留静态外部 IP 地址中的说明创建外部处理可用于与混合运行时 Ingress 进行通信的静态 IP 地址。您可以随意为地址命名,例如:
apigee-hybrid-runtime
。完成后,您将在下一步中使用集群配置中的 IP 编号。例如:34.66.75.196
- 如果您使用的是 Anthos GKE,请按照 Anthos GKE 文档中的说明创建静态 IP 地址。
- 如果您使用的是 GKE,请按照预留静态外部 IP 地址中的说明创建外部处理可用于与混合运行时 Ingress 进行通信的静态 IP 地址。您可以随意为地址命名,例如:
- 获取刚刚预留的外部 IP。
- 为运行时 Istio Ingress 端点创建记录集。这是对混合网关进行 API 调用的地址。输入您在上一步中获得的外部 IP,并在域名中添加前缀,例如
example-endpoint
。如需了解相关说明,请参阅创建新记录。- 创建托管公开区域。如需相关说明,请参阅创建托管公开区域。
- 使用以下条件创建一个新记录集:
- DNS 名称:外部 API 调用将与其通信的端点名称,例如
api-services
或example-endpoint
- 资源记录类型:A
- TTL 和 TTL Unit:接受默认值
- IP 地址:您创建的静态 IP。
- DNS 名称:外部 API 调用将与其通信的端点名称,例如
- 区域详细信息视图将列出 foour 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 步:创建 GCP 项目中创建的项目。
- 选择 IAM 和管理 > 服务账号。
服务账号视图会显示项目的服务账号列表。
- 如需创建新的服务账号,请点击视图顶部的 +创建服务账号。
此时会显示服务账号详细信息视图。
- 在服务账号名称字段中,输入服务账号的名称。
您可以选择在服务账号说明字段中添加说明。说明可提醒您特定服务账号的用途。
- 点击创建。
GCP 会创建一个新的服务账号,并显示服务账号权限视图。使用此视图为新服务账号分配角色。
- 点击选择角色下拉列表。
- 选择 Project Owner 角色。
- 点击继续。
- 点击完成。
- 在 GCP Console 中,选择 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.pem README - 将文件
fullchain.pem
和privkey.pem
复制到本地机器。 - 可选:使用证书/密钥对创建 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.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 ...
- 应用更改:
如果您更改了
mart
配置,请应用更改:apigeectl apply -f your_overrides_file --all-envs
如果您更改了
envs
配置,请应用更改:apigeectl apply -f your_overrides_file --all-envs
测试配置
部署和测试代理,如创建和部署新 API 代理中所述。