Auf dieser Seite wird erläutert, wie Sie einen SSL-Port (Secure Sockets Layer) für die Bereitstellung des Extensible Service Proxys (ESP) mit Google Kubernetes Engine, Kubernetes oder Compute Engine aktivieren. Möglicherweise möchten Sie für einige Anwendungsfälle einen SSL-Port für den bereitgestellten Endpoints-Dienst aktivieren. Wenn Sie beispielsweise die Transcodierungsfunktion von gRPC verwenden, soll der Dienst HTTP 1.1- und gRPC-Anfragen an demselben Port empfangen.
Sie sollten jedoch die Anleitungen für den ausgewählten Diensttyp und die ausgewählte Umgebung gelesen haben und wissen, wie Sie ESP ohne SSL bereitstellen.
SSL-Schlüssel und -Zertifikate konfigurieren
So konfigurieren Sie den SSL-Port für die Bereitstellung von HTTPS-Anfragen:
Prüfen Sie, ob die SSL-Schlüsseldatei den Namen
nginx.key
hat und die Zertifikatdatei den Namennginx.crt
hat. Zu Testzwecken können Sie mithilfe von OpenSSL mit dem folgenden Befehl ein selbst signiertesnginx.key
undnginx.cert
generieren:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./nginx.key -out ./nginx.crt
Geben Sie in Ihrem Serverzertifikat
CN
undsubjectAltName
an. Der Wert dieser Attribute sollte mit dem DNS oder der IP-Adresse übereinstimmen, die von Clients zum Aufrufen Ihres Dienstes verwendet wird. Andernfalls schlägt der SSL-Handshake fehl.
SSL für ESP in Kubernetes aktivieren
So aktivieren Sie den SSL-Port für den ESP in Kubernetes:
Erstellen Sie mit Ihrem SSL-Schlüssel und -Zertifikat ein Kubernetes-Secret:
kubectl create secret generic nginx-ssl \ --from-file=./nginx.crt --from-file=./nginx.key
Bearbeiten Sie die Kubernetes-Konfigurationsdateien, z. B.
esp_echo_gke.yaml
, wie im folgenden Snippet dargestellt:Hinweis: Sie sehen in dem Konfigurationsbeispiel die zu bearbeitenden Zeilen. Zur Bereitstellung der Datei in Cloud Endpoints ist die vollständige Konfigurationsdatei erforderlich.
Stellen Sie die generierten Kubernetes-Schlüssel als Volumes bereit. Dabei können Sie sich an den Anweisungen zu Volumes auf der Kubernetes-Seite orientieren.
Starten Sie den ESP wie auf der Seite ESP-Startoptionen beschrieben. Achten Sie jedoch darauf, das Start-Flag
--ssl_port
zu setzen, um den SSL-Port zu aktivieren. Der SSL-Standardport ist 443.Starten Sie den Dienst mit der aktualisierten Kubernetes-Konfigurationsdatei über den Befehl
kubectl
.kubectl apply -f esp_echo_gke.yaml
SSL-Zertifikate aktualisieren
SSL-Zertifikate sollten regelmäßig aktualisiert werden. Zum Aktualisieren von SSL-Zertifikaten führen Sie die folgenden Schritte aus:
- Erstellen Sie wie in Schritt 1 oben beschrieben neue Zertifikate.
- Stellen Sie die neuen Zertifikate wie in Schritt 3 oben beschrieben für die Kubernetes-Secrets bereit.
- Aktualisieren Sie das ESP-Kubernetes-Deployment wie in Schritt 5 oben beschrieben.
SSL für ESP in Compute Engine aktivieren
Zum Aktivieren von SSL in Compute Engine kopieren Sie zuerst die Dateien nginx.key
und nginx.crt
in den Ordner /etc/nginx/ssl
der Compute Engine-Instanz. Gehen Sie dabei so vor:
Führen Sie den folgenden Befehl aus und ersetzen Sie INSTANCE_NAME durch den Namen Ihrer Compute Engine-Instanz:
gcloud compute scp nginx.* INSTANCE-NAME
Stellen Sie mit
ssh
eine Verbindung zur Instanz her.gcloud compute ssh INSTANCE-NAME
Geben Sie im Feld für die Instanz-VM das Verzeichnis an und kopieren Sie die Dateien:
sudo mkdir -p /etc/esp/ssl
sudo cp server.* /etc/esp/ssl/
Verwenden Sie für die Bereitstellung mit Docker die Anleitung für Ihren Diensttyp. Führen Sie den ESP-Docker-Container mit diesem Befehl aus:
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
Im Vergleich zum Befehl
docker run
ohne SSL erstellt die SSL-Version des Befehls eine andere Konfiguration. Beispiel für den SSL-Befehl:- Der Ordner mit den Schlüssel- und CRT-Dateien wird mit
--volume
im Container bereitgestellt. - Verwenden Sie
--ssl_port=443
, damit SSL von ESP auf Port443
aktiviert wird. - Ändert das Flag
--publish
für die Portzuordnung.
- Der Ordner mit den Schlüssel- und CRT-Dateien wird mit
SSL-Zertifikate aktualisieren
SSL-Zertifikate sollten regelmäßig aktualisiert werden. Zum Aktualisieren von SSL-Zertifikaten führen Sie die folgenden Schritte aus:
- Erstellen Sie neue Zertifikate und kopieren Sie sie wie in Schritt 1 oben beschrieben nach VM-Instanzen.
- Kopieren Sie die neuen Zertifikate wie in Schritt 3 oben beschrieben in das Verzeichnis
/etc/esp/ssl
. - Beenden Sie den ESP-Container mithilfe des Befehls
sudo docker run
und starten Sie ihn neu, wie in Schritt 4 oben beschrieben.
SSL-Port testen
Legen Sie die folgenden Umgebungsvariablen fest, um die Tests zu vereinfachen:
Legen Sie für IP_ADDRESS die IP-Adresse der Compute Engine-Instanz mit dem neuen SSL-Zertifikat fest.
Legen Sie für ENDPOINTS_KEY einen gültigen API-Schlüssel fest.
Nachdem Sie den SSL-Port aktiviert haben, können Sie mithilfe von HTTPS Anfragen an den Extensible Service Proxy senden: Wenn Sie ein selbst signiertes Zertifikat verwenden, aktivieren Sie mit -k
die unsichere Option in curl
:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
Alternativ können Sie das Zertifikat im Format pem
generieren und das selbst signierte Zertifikat mithilfe der Option --cacert
wie unten dargestellt in curl
verwenden:
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