本页面介绍如何在将 Extensible Service Proxy (ESP) 部署到 Google Kubernetes Engine、Kubernetes 或 Compute Engine 时启用安全套接字层 (SSL) 端口。对于某些用例,您可能需要为已部署的 Endpoints 服务启用 SSL 端口。例如,如果您使用 gRPC 的转码功能,并且希望您的服务在同一端口上接收 HTTP 1.1 和 gRPC 请求。
开始之前,请确保您已阅读所选服务类型和环境的教程,并且了解如何在不使用 SSL 的情况下部署 ESP。
配置 SSL 密钥和证书
要配置 SSL 端口以处理 HTTPS 请求,请按以下步骤操作:
- 检查并确保您的 SSL 密钥文件名为 - nginx.key并且证书文件名为- nginx.crt。要进行测试,您可以通过以下命令使用 OpenSSL 生成自签名- nginx.key和- nginx.cert:- openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./nginx.key -out ./nginx.crt 
- 在服务器证书中同时指定 - CN和- subjectAltName。这些特性的值应与客户端用于调用您服务的 DNS 或 IP 匹配;否则,SSL 握手将失败。
在 Kubernetes 上为 ESP 启用 SSL
要在 Kubernetes 上为 ESP 启用 SSL 端口,请执行以下操作:
- 使用您的 SSL 密钥和证书创建 Kubernetes Secret: - kubectl create secret generic nginx-ssl \ --from-file=./nginx.crt --from-file=./nginx.key 
- 修改 Kubernetes 配置文件(例如 - esp_echo_gke.yaml),如以下代码段所示:- 注意:配置示例显示的是需要修改的行。要将文件部署到 Cloud Endpoints,需要完整的配置文件。 
- 按照 Kubernetes 卷页面中的说明,将您创建的 Kubernetes Secret 作为卷进行装载。 
- 按照指定 ESP 的启动选项中的说明启动 ESP,同时确保添加启动标志 - --ssl_port以启用 SSL 端口。(请注意,默认 SSL 端口为 443。)
- 运行 - kubectl,使用更新后的 Kubernetes 配置文件来启动服务。- kubectl apply -f esp_echo_gke.yaml 
更新 SSL 证书
定期更新 SSL 证书非常重要。要更新 SSL 证书,您必须执行以下步骤:
- 创建新证书,如上文步骤 1 所述。
- 将新证书装载到 Kubernetes Secret,如上文步骤 3 所述。
- 更新 ESP Kubernetes Deployment,如上文步骤 5 所述。
在 Compute Engine 上为 ESP 启用 SSL
要在 Compute Engine 上启用 SSL,请先将 nginx.key 和 nginx.crt 文件复制到 Compute Engine 实例的 /etc/nginx/ssl 文件夹,具体步骤如下:
- 运行以下命令,并将 INSTANCE_NAME 替换为您的 Compute Engine 实例的名称: - gcloud compute scp nginx.* INSTANCE-NAME 
- 使用 - ssh连接到实例。- gcloud compute ssh INSTANCE-NAME 
- 在实例虚拟机框中,使用以下命令在文件中创建目录和副本: - sudo mkdir -p /etc/esp/ssl- sudo cp server.* /etc/esp/ssl/
- 要使用 Docker 进行部署,请按照与您的服务类型对应的说明操作。运行 ESP Docker 容器时,请使用以下命令: - sudo docker run --name=esp \ --detach \ --publish=443:443 \ --net=esp_net \ --volume=/etc/nginx/ssl:/etc/nginx/ssl \ --link=echo:echo \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_port=443 - 与非 SSL - docker run命令相比,该命令的 SSL 版本会创建不同的配置。例如,该 SSL 命令会:- 使用 --volume将包含密钥文件和 CRT 文件的文件夹装载到容器
- 使用 --ssl_port=443指示 ESP 在端口443上启用 SSL。
- 更改端口映射标志 --publish。
 
- 使用 
更新 SSL 证书
定期更新 SSL 证书非常重要。要更新 SSL 证书,您必须执行以下步骤:
- 创建新证书并将其复制到虚拟机实例中,如上文步骤 1 所述。
- 将新证书复制到 /etc/esp/ssl目录中,如上文步骤 3 所述。
- 使用 sudo docker run命令停止并重启 ESP 容器,如上文步骤 4 所述。
测试 SSL 端口
要让测试变得更加简单,请设置以下环境变量:
- 将 IP_ADDRESS 设置为采用新 SSL 证书的 Compute Engine 实例的 IP 地址。 
- 将 ENDPOINTS_KEY 设置为有效的 API 密钥。 
SSL 端口启用后,您可以使用 HTTPS 向 Extensible Service Proxy 发送请求。如果您的证书是自签名证书,请在 curl 中使用 -k 启用不安全选项:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \
https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY或者,生成 pem 格式的证书,并使用 --cacert 选项在 curl 中使用自签名证书,如下所示:
openssl x509 -in nginx.crt -out nginx.pem -outform PEMcurl --cacert "./nginx.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY