So konfigurieren Sie Knative Serving für die Verwendung Ihrer eigenen SSL/TLS-Zertifikate.
Alternativ können Sie das Feature für verwaltete TLS-Zertifikate verwenden, mit dem TLS-Zertifikate automatisch über Let's Encrypt erstellt und verlängert werden.
Wenn Sie Ihre eigenen Zertifikate verwenden möchten, speichern Sie Ihre TLS-Zertifikate in einem Kubernetes-Secret und konfigurieren Sie dann das Ingress-Gateway von Cloud Service Mesh für die Verwendung dieses Secrets.
Hinweise
- In dieser Anleitung wird davon ausgegangen, dass Sie Ihre TLS-Zertifikate bereits erhalten haben.
- Sie müssen eine benutzerdefinierte Domain konfigurieren. Weitere Informationen finden Sie unter Benutzerdefinierte Domains zuordnen.
- Sie müssen jeden Ihrer Knative Serving-Dienste konfigurieren, die das Ingress-Gateway für die Bereitstellung von externem Traffic verwenden. Wenn diese nach außen gerichteten Dienste nicht für die Verwendung Ihrer TLS-Zertifikate konfiguriert sind, können die Dienste keine HTTPS-Verbindungen prüfen und daher niemals den Status
ready
erreichen.
TLS-Zertifikate in einem Kubernetes Secret speichern
So speichern Sie die Zertifikate in einem Secret:
Öffnen Sie ein Terminal und wechseln Sie zu dem Verzeichnis, in dem sich Ihre TLS-Zertifikate befinden.
Verwenden Sie den folgenden Befehl, um ein Secret zu erstellen, in dem Ihre Zertifikate gespeichert werden:
kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \ --key PRIVATE_KEY.pem \ --cert FULL_CHAIN.pem
Ersetzen Sie:
- INGRESS_NAMESPACE durch den Namespace Ihres Ingress-Dienstes
istio-ingressgateway
. Geben Sie den Namespaceistio-system
an, wenn Sie Cloud Service Mesh mit der Standardkonfiguration installiert haben. - SECRET_NAME durch den Namen, den Sie für Ihr Kubernetes-Secret verwenden möchten.
- PRIVATE_KEY.pem durch den Namen der Datei, die den privaten Schlüssel Ihres Zertifikats enthält.
- FULL_CHAIN.pem durch den Namen der Datei, die Ihr öffentliches Zertifikat enthält.
- INGRESS_NAMESPACE durch den Namespace Ihres Ingress-Dienstes
Sie können jetzt das Ingress-Gateway so konfigurieren, dass es das Secret verwendet, das Sie gerade für Ihr TLS-Zertifikat erstellt haben.
Ingress-Gateway für die Verwendung Ihrer Zertifikate konfigurieren
Ändern Sie das Ingress-Gateway von Cloud Service Mesh so, dass es das Secret verwendet, das Sie für Ihre TLS-Zertifikate erstellt haben:
Öffnen Sie die YAML-Datei des Ingress-Gateways im Bearbeitungsmodus. Führen Sie dazu den folgenden Befehl aus:
kubectl edit gateway knative-ingress-gateway --namespace knative-serving
Beispiel für die Standardkonfiguration des Ingress-Gateways:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
Konfigurieren Sie das Ingress-Gateway für die Verwendung Ihres Secrets, indem Sie die Attribute
hosts
,port
undtls
an die vorhandene YAML-Konfiguration anhängen.So konfigurieren Sie alle Dienste zur Verwendung desselben Secrets: Fügen Sie Ihrer YAML-Konfiguration Folgendes hinzu und geben Sie
"*"
alshosts
-Attributwert an:... # other skipped configuration ... - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
Ersetzen Sie SECRET_NAME durch den Namen des von Ihnen erstellten Secrets.
So konfigurieren Sie jeden Dienst einzeln: Hängen Sie Folgendes an Ihre YAML-Konfiguration an und geben Sie die Werte für die
hosts
-Attribute unter Verwendung des Namens und des Namespace des Dienstes an:Geben Sie für jeden Dienst Werte für die Attribute
hosts
,port
undtls
an:... # other skipped configuration ... - hosts: - SERVICE_NAME.SERVICE_NAMESPACE.CUSTOM_DOMAIN port: number: 443 name: https-SERVICE_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
Ersetzen Sie:
- SERVICE_NAME durch den Namen des Knative Serving-Dienstes. Jeder Dienst, der das Ingress-Gateway für die Bereitstellung von externem Traffic verwendet, muss einzeln konfiguriert werden.
- SERVICE_NAMESPACE durch den Namen des Namespace, in dem der Dienst ausgeführt wird.
- CUSTOM_DOMAIN durch die benutzerdefinierte Domain, für die Sie den Dienst konfiguriert haben.
- SECRET_NAME durch den Namen des Secrets, das der Dienst verwenden soll. Wenn Sie mehrere Secrets für verschiedene Sätze von TLS-Zertifikaten erstellt haben, können Sie angeben, welches Secret jeder Dienst verwenden soll.
Speichern Sie die Änderungen.
Sie können jetzt mit dem HTTPS-Protokoll auf die von Ihnen bereitgestellten Knative Serving-Dienste zugreifen.
Beispiele
- Konfigurieren Sie alle Dienste:
In diesem Beispiel wird gezeigt, wie Sie alle Dienste für die Verwendung des Secrets
TLSsecret
konfigurieren:apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret
- Konfigurieren Sie einzelne Dienste:
In diesem Beispiel wird gezeigt, wie Sie alle drei Dienste, die Internet-Traffic bereitstellen, einzeln konfigurieren:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - prodservice.prodnamespace.my-custom-domain.com port: number: 443 name: https-prodservice protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - experiment.namespace.my-custom-domain.com port: number: 443 name: https-experiment protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - fallbackservice.anothernamespace.my-custom-domain.com port: number: 443 name: https-fallbackservice protocol: HTTPS tls: mode: SIMPLE credentialName: anotherTLSsecret