本页面介绍如何在将 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 PEM
curl --cacert "./nginx.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY