Eigene TSL-Zertifikate verwenden

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:

  1. Öffnen Sie ein Terminal und wechseln Sie zu dem Verzeichnis, in dem sich Ihre TLS-Zertifikate befinden.

  2. 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 Namespace istio-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.

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:

  1. Ö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
    
  2. Konfigurieren Sie das Ingress-Gateway für die Verwendung Ihres Secrets, indem Sie die Attribute hosts, port und tls 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 "*" als hosts-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.

      Siehe Beispiel.

    • 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 und tls 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.

      Siehe Beispiel.

  3. 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