Von Google verwaltete SSL-Zertifikate verwenden

Auf dieser Seite wird gezeigt, wie Sie von Google verwaltete SSL-Zertifikate für sichere Ingress-Objekte in GKE verwenden können. Sie erfahren, wie Sie den automatischen Zertifikatsverwaltungsdienst von Google verwenden, um die HTTPS-Verschlüsselung für Ihre Anwendungen zu vereinfachen.

Diese Zertifikate sind DV-Zertifikate (Domain Validation), die von Google für Ihre Domainnamen bereitgestellt, verlängert und verwaltet werden. Diese Zertifikate veranschaulichen nicht Ihre individuelle oder organisatorische Identität.

Diese Seite richtet sich an Netzwerk- und Sicherheitsexperten, die die Netzwerksicherheit planen und implementieren sowie Sicherheitsrichtlinien entwickeln und verwalten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir inGoogle Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.

Bevor Sie diese Seite lesen, sollten Sie über grundlegende Kenntnisse von GKE sowie über ein gutes Verständnis von Netzwerken und Netzwerksicherheit verfügen.

Informationen zum Erstellen von von Google verwalteten Zertifikaten mit Google Cloudfinden Sie unter Von Google verwaltete Zertifikate.

Ingress mit von Google verwaltetem Zertifikat erstellen

So konfigurieren Sie ein von Google verwaltetes SSL-Zertifikat und verknüpfen es mit einem Ingress:

  • Erstellen Sie ein ManagedCertificate-Objekt im selben Namespace wie dem des Ingress-Objekts.
  • Verknüpfen Sie das ManagedCertificate-Objekt mit einem Ingress. Dazu fügen Sie dem Ingress die Annotation networking.gke.io/managed-certificates hinzu. Diese Annotation ist eine durch Kommas getrennte Liste von ManagedCertificate-Objekten.

Beschränkungen

Von Google verwaltete Zertifikate bieten nicht das gleiche Maß an Flexibilität wie die von Ihnen abgerufenen und verwalteten Zertifikate. Von Google verwaltete Zertifikate unterstützen bis zu 100 Domains ohne Platzhalter. Im Gegensatz zu selbstverwalteten Zertifikaten unterstützen von Google verwaltete Zertifikate keine Domains mit Platzhaltern.

Wenn Sie selbstverwaltete Zertifikate benötigen oder bereits SSL-Zertifikate haben, die Sie für das Ingress konfigurieren möchten, finden Sie entsprechende Informationen unter HTTPS (TLS) zwischen Client und Load-Balancer einrichten.

Die Anzahl und der Typ der von einem Ingress unterstützten Zertifikate richten sich nach den Limits der von Google verwalteten SSL-Zertifikate.

Aktualisierungen für von Google verwaltete Zertifikate werden nicht unterstützt. Weitere Informationen finden Sie unter Von Google verwaltetes Zertifikat manuell aktualisieren.

Wenn das Zertifikat direkt mit der Zertifizierungsstelle widerrufen wird, rotiert Google das Zertifikat nicht automatisch. Sie müssen das ManagedCertificate löschen und ein neues erstellen.

Vorbereitung

  • Sie müssen Inhaber des Domainnamens sein. Der Domainname darf maximal 63 Zeichen haben. Sie können einen beliebigen Domainnamenregistrator verwenden, um einen Domainnamen zu erhalten.

  • Wenn Sie einen GKE Standard-Cluster verwenden, muss das Add-on HttpLoadBalancing aktiviert sein.

  • Ihr Ingress-Manifest muss die Annotation kubernetes.io/ingress.class: "gce" enthalten. Das Feld ingressClassName wird nicht unterstützt.

  • Sie müssen Ressourcen vom Typ Ingress und ManagedCertificate im selben Projekt und im selben Namespace anwenden.

  • Erstellen Sie eine reservierte (statische) externe IP-Adresse. Wenn Sie eine statische IP-Adresse reservieren, bleibt diese auch nach dem Löschen des Ingress-Objekts erhalten. Wenn Sie keine IP-Adresse reservieren, kann sich die verwendete Adresse ändern, sodass Sie die DNS-Einträge Ihrer Domain neu konfigurieren müssen. Verwenden Sie die Google Cloud CLI oder die Google Cloud Console, um eine reservierte IP-Adresse zu erstellen.

    gcloud

    Führen Sie den folgenden Befehl aus, um eine reservierte IP-Adresse zu erstellen:

    gcloud compute addresses create ADDRESS_NAME --global
    

    Ersetzen Sie ADDRESS_NAME durch den Namen der reservierten IP-Adresse, die Sie erstellen.

    Führen Sie den folgenden Befehl aus, um die erstellte statische IP-Adresse zu finden:

    gcloud compute addresses describe ADDRESS_NAME --global
    

    Die entsprechende Ausgabe sieht etwa so aus:

    address: 203.0.113.32
    ...
    

    Console

    Führen Sie die folgenden Schritte aus, um eine reservierte IP-Adresse zu erstellen:

    1. Rufen Sie in der Google Cloud Console die Seite Externe IP-Adressen auf.

      Zu externen IP-Adressen

    2. Geben Sie einen Namen für die IP-Adresse an (z. B. example-ip-address).

    3. Geben Sie an, ob Sie eine IPv4- oder IPv6-Adresse möchten.

    4. Wählen Sie für Typ die Option Global aus.

    5. Klicken Sie auf Reservieren. Die IP-Adresse wird in der Spalte Externe Adresse aufgeführt.

    Config Connector

    Hinweis: Für diesen Schritt ist Config Connector erforderlich. Folgen Sie der Installationsanleitung, um Config Connector in Ihrem Cluster zu installieren.

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeAddress
    metadata:
      name: example-ip-address
    spec:
      location: global
    Laden Sie dieses Manifest als compute-address.yaml auf Ihren Computer herunter und führen Sie folgenden Befehl aus:

    kubectl apply -f compute-address.yaml
    

Von Google verwaltetes Zertifikat einrichten

  1. Erstellen Sie ein ManagedCertificate-Objekt. Diese Ressource gibt die Domains für das SSL-Zertifikat an. Domains mit Platzhaltern werden nicht unterstützt.

    Das folgende Manifest beschreibt ein ManagedCertificate-Objekt. Speichern Sie das Manifest als managed-cert.yaml.

    apiVersion: networking.gke.io/v1
    kind: ManagedCertificate
    metadata:
      name: managed-cert
    spec:
      domains:
        - FQDN_1
        - FQDN_2
    

    Dabei gilt:

    • FQDN_1, FQDN_2: Vollständig qualifizierte Domainnamen, die Ihnen gehören. Beispiel: example.com und www.example.com
  2. Wenden Sie das Manifest auf Ihren Cluster an:

    kubectl apply -f managed-cert.yaml
    
  3. Erstellen Sie einen Service vom Typ NodePort, um Ihre Anwendung im Internet freizugeben.

    Das folgende Manifest beschreibt einen Service vom Typ NodePort. Speichern Sie das Manifest als mc-service.yaml.

    apiVersion: v1
    kind: Service
    metadata:
      name: mc-service
    spec:
      selector:
        app: mc-service
      type: NodePort
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
    
  4. Wenden Sie das Manifest auf Ihren Cluster an:

    kubectl apply -f mc-service.yaml
    
  5. Erstellen Sie eine Ingress-Ressource.

    Das folgende Manifest beschreibt ein Ingress, das das von Ihnen erstellte ManagedCertificate verwendet. Speichern Sie das Manifest als managed-cert-ingress.yaml.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: managed-cert-ingress
      annotations:
        kubernetes.io/ingress.global-static-ip-name: ADDRESS_NAME
        networking.gke.io/managed-certificates: managed-cert
        kubernetes.io/ingress.class: "gce"
    spec:
      defaultBackend:
        service:
          name: mc-service
          port:
            number: SERVICE_PORT
    

    Dabei gilt:

    • ADDRESS_NAME ist der Name Ihrer reservierten IP-Adresse.
    • SERVICE_PORT ist der Wert von ports.port in Ihrem Dienstmanifest.
  6. Wenden Sie das Manifest auf Ihren Cluster an:

    kubectl apply -f managed-cert-ingress.yaml
    
  7. Rufen Sie die IP-Adresse des Load-Balancers ab:

    kubectl get ingress
    

    Die entsprechende Ausgabe sieht etwa so aus:

    NAME                 HOSTS       ADDRESS         PORTS     AGE
    managed-cert-ingress   *         203.0.113.32     80       54s
    

    Die IP-Adresse des Load-Balancers wird in der Spalte ADDRESS aufgeführt. Wenn Sie eine reservierte statische IP-Adresse verwenden, gilt diese für den Load-Balancer.

    Wenn die Adresse nicht aufgeführt wird, warten Sie, bis der Ingress fertig eingerichtet ist.

  8. Konfigurieren Sie die DNS-Einträge für Ihre Domains so, dass sie auf die IP-Adresse des Load-Balancers verweisen. Wenn Sie Cloud DNS verwenden, finden Sie weitere Informationen unter Einträge verwalten.

  9. Warten Sie, bis die Bereitstellung des von Google verwalteten Zertifikats abgeschlossen ist. Dies kann bis zu 60 Minuten dauern. Sie können den Status des Zertifikats mit dem folgenden Befehl prüfen:

    kubectl describe managedcertificate managed-cert
    

    Die entsprechende Ausgabe sieht etwa so aus:

    Name:         managed-cert
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  networking.gke.io/v1
    Kind:         ManagedCertificate
    (...)
    Spec:
     Domains:
       FQDN_1
       FQDN_2
    Status:
     CertificateStatus: Active
    (...)
    

    Der Wert des Felds Status.CertificateStatus gibt an, dass das Zertifikat bereitgestellt wird. Wenn Status.CertificateStatus nicht Active ist, wurde das Zertifikat noch nicht bereitgestellt.

  10. Sie können die Ereignisse für eine Ingress-Ressource mit dem folgenden Befehl prüfen:

    kubectl describe ingress INGRESS_NAME
    

    Ersetzen Sie INGRESS_NAME durch Ihren Ingress-Namen.

  11. Prüfen Sie, ob die SSL-Verbindung funktioniert. Rufen Sie hierfür Ihre Domains mit dem Präfix https:// auf. Ihr Browser gibt an, dass die Verbindung sicher ist und Sie die Zertifikatdetails aufrufen können.

Von selbstverwalteten Zertifikaten zu von Google verwalteten Zertifikaten migrieren

Wenn Sie einen Ingress von selbstverwalteten Zertifikaten zu von Google verwalteten SSL-Zertifikaten migrieren, löschen Sie die selbstverwalteten SSL-Zertifikate erst, wenn die von Google verwalteten SSL-Zertifikate aktiv sind. Die Aktivierung der von Google verwalteten SSL-Zertifikate erfolgt automatisch nach der Bereitstellung. Sobald die von Google verwalteten SSL-Zertifikate aktiv sind, können Sie Ihre selbstverwalteten SSL-Zertifikate löschen.

Führen Sie die folgenden Schritte aus, um von selbstverwalteten Zertifikaten zu von Google verwalteten Zertifikaten zu migrieren.

  1. Fügen Sie dem Ingress gemäß der Beschreibung unter Von Google verwaltetes Zertifikat einrichten ein neues von Google verwaltetes Zertifikat hinzu.
  2. Warten Sie, bis sich der Status der von Google verwalteten Zertifikatressource in "Active" (Aktiv) ändert. Prüfen Sie den Status des Zertifikats mit dem folgenden Befehl:

    kubectl describe managedcertificate managed-cert
    
  3. Wenn der Status Active lautet, aktualisieren Sie den Ingress, um die Verweise auf das selbstverwaltete Zertifikat zu entfernen.

Von Google verwaltetes Zertifikat entfernen

Wenn Sie ein von Google verwaltetes Zertifikat aus dem Cluster entfernen möchten, löschen Sie das ManagedCertificate-Objekt und entfernen Sie die darauf verweisende Ingress-Annotation.

  1. Löschen Sie das ManagedCertificate-Objekt:

    kubectl delete -f managed-cert.yaml
    

    Die entsprechende Ausgabe sieht etwa so aus:

    managedcertificate.networking.gke.io "managed-cert" deleted
    
  2. Entfernen Sie die Annotation aus dem Ingress:

    kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-
    

    Achten Sie auf das Minuszeichen - am Ende des Befehls.

  3. Geben Sie die statische IP-Adresse frei, die Sie für den Load-Balancer reserviert hatten.

    Sie können die Google Cloud CLI, die Google Cloud Console oder Config Connector verwenden, um eine reservierte IP-Adresse freizugeben.

    gcloud

    Verwenden Sie den folgenden Befehl, um die reservierte IP-Adresse freizugeben:

    gcloud compute addresses delete ADDRESS_NAME --global
    

    Ersetzen Sie ADDRESS_NAME durch den Namen der IP-Adresse.

    Console

    Führen Sie die folgenden Schritte aus, um die reservierte IP-Adresse freizugeben:

    1. Rufen Sie in der Google Cloud Console die Seite Externe IP-Adressen auf.

      Zu externen IP-Adressen

    2. Aktivieren Sie das Kästchen neben der IP-Adresse, die Sie freigeben möchten.

    3. Klicken Sie auf IP-Adresse freigeben.

    Config Connector

    Hinweis: Für diesen Schritt ist Config Connector erforderlich. Folgen Sie der Installationsanleitung, um Config Connector in Ihrem Cluster zu installieren.

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeAddress
    metadata:
      name: example-ip-address
    spec:
      location: global

    Laden Sie dieses Manifest als compute-address.yaml auf Ihren Computer herunter und führen Sie folgenden Befehl aus:

    kubectl delete -f compute-address.yaml
    

Nächste Schritte