このページでは、Google Kubernetes Engine、Kubernetes、または Compute Engine で Extensible Service Proxy(ESP)をデプロイするときにセキュア ソケット レイヤ(SSL)ポートを有効にする方法について説明します。ユースケースによっては、デプロイされた Endpoints サービスの SSL ポートを有効にすることもおすすめします。たとえば、gRPC のコード変換機能を使用している場合は、サービスに同じポートで HTTP 1.1 と gRPC の両方のリクエストを受け取らせることもできます。
開始する前に、選択したサービスタイプと環境についてのチュートリアルを確認して、SSL なしで ESP をデプロイする方法を理解しておいてください。
SSL 鍵と証明書を構成する
HTTPS リクエストを処理するように SSL ポートを構成するには、次の手順を行います。
- 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 handshake が失敗します。
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 secret をボリュームとしてマウントします。手順については、Kubernetes のボリュームに関するページをご覧ください。 
- ESP の起動オプションの指定の手順に沿って ESP を起動します。ただし、必ず起動フラグ - --ssl_portを追加して SSL ポートを有効にしてください(デフォルトの SSL ポートは 443 です)。
- kubectlを使用して、更新した Kubernetes 構成ファイルでサービスを起動します。- kubectl apply -f esp_echo_gke.yaml 
SSL 証明書の更新
SSL 証明書を定期的に更新することが重要です。SSL 証明書を更新するには、次の手順を実施する必要があります。
- 上記のステップ 1 に従って、新しい証明書を作成します。
- 上記のステップ 3 の説明に従って、新しい証明書を Kubernetes Secret にマウントします。
- 上記のステップ 5 に従って、ESP Kubernetes のデプロイを更新します。
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 
- インスタンスの VM ボックスで、ディレクトリを作成してファイルをそこにコピーします。 - 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を使用して、ポート- 443で SSL を有効にするよう ESP に指示します。
- ポート マッピング フラグ --publishを変更します。
 
SSL 証明書の更新
SSL 証明書を定期的に更新することが重要です。SSL 証明書を更新するには、次の手順を実施する必要があります。
- 上記のステップ 1 に従って新しい証明書を作成し、VM インスタンスにコピーします。
- 上記のステップ 3 に従って、新しい証明書を /etc/esp/sslディレクトリにコピーします。
- 上記のステップ 4 に従い、sudo docker runコマンドを使用して、ESP コンテナを停止してから再起動します。
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 フォーマットで証明書を生成し、curl オプションを使用して、--cacert 自己署名証明書を使用します。
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