HTTP- und HTTPS-Inhalte über dieselbe veröffentlichte Domain bereitstellen

Bei Verwendung von Cloud CDN werden HTTP- und HTTPS-Inhalte häufig über denselben Hostnamen bereitgestellt. Obwohl viele Browser die Verwendung von Transport Layer Security (TLS) erzwingen und die Bereitstellung unsicherer Inhalte untersagen, gibt es dennoch Anwendungsfälle, in denen die nicht sichere und die sichere Bereitstellung über denselben Hostnamen zulässig sein muss. In diesem Artikel wird beschrieben, wie Sie diese Funktion mit Cloud CDN schaffen können.

Herausforderung

Wenn ein Client eine Verbindung mit einem CDN-Edge-Server herstellt, wird das Endnutzer-Übermittlungsprotokoll ausgehandelt. Die meisten herkömmlichen CDN-Plattformen leiten Traffic an ihren jeweiligen Bereitstellungsfootprint weiter, indem sie Folgendes tun:

  1. Mit einem DNS-CNAME-Eintrag auf einen Domainnamen verweisen, der zum CDN gehört.
  2. Traffic an eine Teilmenge von Servern weiterleiten, die die TLS-Verhandlung für diesen Domainnamen unterstützen.

Da Cloud CDN in Cloud Load Balancing eingebunden wird, unterscheidet sich der Ansatz von Cloud CDN vom Ansatz konventioneller CDNs. Cloud CDN nutzt die Anycast-IP-Adresse des externen Application Load Balancers. Wenn Sie Cloud CDN konfigurieren, haben Sie eine bestimmte IP-Adresse, an die der Traffic weitergeleitet werden soll. Dies erfordert ein Konstrukt mit einem A-Eintrag (für IPv4) und/oder einem AAAA-Eintrag (für IPv6) in Ihrem DNS-Eintrag anstatt eines CNAME-Eintrags mit einem Wert für den Hostnamen.

Wenn das Frontend des Load-Balancers konfiguriert wird, weist Google Cloud standardmäßig eine sitzungsspezifische IP-Adresse dynamisch zu. Da Sie Ihre HTTP- und HTTPS-Konfigurationen separat konfigurieren müssen, kann es passieren, dass Sie zwei IP-Adressen für Ihre Cloud CDN-Instanz haben. Da dieselbe IP-Adresse für A- oder AAAA-Einträge sowohl für HTTP als auch für HTTPS bestimmt ist, kann dieser Fall in DNS nicht richtig verarbeitet werden.

Lösung

Werden sowohl sichere als auch nicht sichere Inhalte über denselben Hostnamen bereitgestellt, wird der Client an einen Edge-Server weitergeleitet, der aushandeln kann, dass entweder HTTP oder HTTPS verwendet wird. Damit dies mit Cloud CDN funktioniert, können Sie eine IP-Adresse reservieren und die reservierte IP-Adresse an die HTTP- und die HTTPS-Frontend-Konfiguration im externen Application Load Balancer binden.

HTTP und HTTPS über dieselbe Domain
HTTP und HTTPS über dieselbe Domain

Das Diagramm zeigt Folgendes:

  • Eingehende Anfragen für www.ihrunternehmen.de stammen von Clients, die HTTP/2, HTTPS und HTTP verwenden.
  • Zwei IP-Adressen sind reserviert, eine für IPv4 und eine für IPv6:

    • 34.95.111.204
    • [2600:1901:0:b13e::]
  • Diese beiden IP-Adressen sind in Cloud DNS an www.ihrunternehmen.de gebunden.

  • Beim Konfigurieren des externen Application Load Balancers umfasst die Frontend-Konfiguration vier Weiterleitungsregeln, die die reservierten IP-Adressen verwenden:

    Name Protokoll IP:Port
    ipv4-http HTTP 34.95.111.204:80
    ipv4-https HTTPS 34.95.111.204:443
    ipv6-http HTTP [2600:1901:0:b13e::]:80
    ipv6-https HTTPS [2600:1901:0:b13e::]:443
  • Bei Cache-Fehlern in Cloud CDN verteilt der Load-Balancer anhand der in der URL-Zuordnung des Load-Balancers definierten Einstellungen Anfragen an die Backend-Ursprünge.

Schritt 1: Globale externe IP-Adresse reservieren

Erstellen Sie eine IPv4- oder eine IPv6-Adresse (oder beides). Damit IPv4- und IPv6-Adressen unterstützt werden, müssen Sie eine IPv4- und eine IPv6-Adresse erstellen.

Erstellen Sie in Ihrem DNS-Eintrag einen A- oder AAAA-Eintrag, um Traffic an diese reservierte IP-Adresse weiterzuleiten.

Console

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

    Zur Seite "Externe IP-Adressen"

  2. Klicken Sie auf Statische Adresse reservieren, um eine IPv4-Adresse zu reservieren.
  3. Weisen Sie als Name ipv4-address zu.
  4. Legen Sie für die Netzwerkstufe Premium fest.
  5. Setzen Sie die IP-Version auf IPv4.
  6. Legen Sie für Typ Global fest.
  7. Klicken Sie auf Reservieren.

Der Load-Balancer verwendet Netzwerk der Premium-Stufe, was erforderlich wird, wenn Cloud CDN aktiviert wird.

gcloud

gcloud compute addresses create ipv4-address \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Notieren Sie sich die reservierte IPv4-Adresse:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Wiederholen Sie diesen Schritt für IPv6.

Weitere Informationen finden Sie unter Neue statische externe IP-Adresse reservieren.

Schritt 2: Reservierte IP-Adresse an den Load-Balancer binden

In diesem Abschnitt erfahren Sie, wie Sie Ihrem Load-Balancer die IP-Adressen zuweisen. End-to-End-Anleitungen zum Einrichten des Load-Balancers werden in diesem Artikel nicht behandelt. Ein Beispiel für eine Einrichtung finden Sie unter HTTPS-Load-Balancer einrichten.

Im Abschnitt zur Konfiguration des Front-Ends können Sie das Protokoll auswählen, das zwischen dem Client und dem Load-Balancer verwendet wird.

In diesem Beispiel verwenden Sie sowohl HTTP als auch HTTPS zwischen dem Client und dem Load-Balancer. Daher benötigen Sie eine oder mehrere SSL-Zertifikatsressourcen, um den Proxy zu konfigurieren.

Console

HTTP-Weiterleitungsregel konfigurieren

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Zur Seite „Load-Balancing“

  2. Wählen Sie den Load-Balancer aus und klicken Sie dann auf Bearbeiten.
  3. Klicken Sie im linken Bereich auf Frontend-Konfiguration.
  4. Geben Sie im Feld Name ipv4-http ein.
  5. Wählen Sie im Feld Protokoll die Option HTTP aus.
  6. Legen Sie IPv4 als IP-Version fest.
  7. Wählen Sie unter IP-Adresse die zuvor erstellte IP-Adresse ipv4-address aus.
  8. Achten Sie darauf, dass der Port auf 80 gesetzt ist, um HTTP-Traffic zuzulassen.
  9. Klicken Sie auf Fertig.

HTTPS-Weiterleitungsregel konfigurieren

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Zur Seite „Load-Balancing“

  2. Wählen Sie den Load-Balancer aus und klicken Sie dann auf Bearbeiten.
  3. Klicken Sie im linken Bereich auf Frontend-Konfiguration.
  4. Geben Sie im Feld Name ipv4-https ein.
  5. Wählen Sie im Feld Protokoll die Option HTTPS aus.
  6. Legen Sie IPv4 als IP-Version fest.
  7. Wählen Sie unter IP-Adresse die zuvor erstellte IP-Adresse ipv4-address aus.
  8. Achten Sie darauf, dass der Port auf 443 gesetzt ist, um HTTP-Traffic zuzulassen.
  9. Klicken Sie auf die Drop-down-Liste Zertifikat.
    1. Wenn Sie bereits eine selbstverwaltete SSL-Zertifikatressource haben, die Sie als primäres SSL-Zertifikat verwenden möchten, wählen Sie es aus dem Drop-down-Menü aus.
    2. Wählen Sie andernfalls Neues Zertifikat erstellen aus.
    3. Wählen Sie Zertifikat hochladen oder Von Google verwaltetes Zertifikat erstellen aus.
    4. Wenn Sie Zertifikat hochladen ausgewählt haben, führen Sie diese Schritte aus:
      1. Geben Sie www-ssl-cert als Name ein.
      2. Laden Sie in den entsprechenden Feldern Ihr Public-Key-Zertifikat (.crt-Datei), Ihre Zertifikatskette (.csr-Datei) und Ihren privaten Schlüssel (.key-Datei) hoch.
      3. Klicken Sie auf Erstellen.
    5. Wenn Sie Von Google verwaltetes Zertifikat erstellen auswählen, geben Sie eine Domain ein.
    6. So fügen Sie zusätzlich zur primären SSL-Zertifikatsressource weitere Zertifikatsressourcen hinzu:
      1. Klicken Sie auf Zertifikat hinzufügen.
      2. Wählen Sie ein Zertifikat aus der Liste Zertifikate aus oder klicken Sie auf Neues Zertifikat erstellen und befolgen Sie die obige Anleitung.
  10. Klicken Sie auf Fertig.

Wiederholen Sie diese Schritte für IPv6.

Prüfen und abschließen

  1. Klicken Sie im linken Bereich auf Prüfen und abschließen.
  2. Vergleichen Sie die Einstellungen mit denen, die Sie erstellen wollten.
  3. Wenn alles in Ordnung ist, klicken Sie auf Aktualisieren.

gcloud

  1. Erstellen Sie einen HTTP-Zielproxy, um Anfragen an Ihre URL-Zuordnung zu leiten.

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. Erstellen Sie einen HTTPS-Zielproxy, um Anfragen an Ihre URL-Zuordnung zu leiten. Der Proxy ist der Teil des Load-Balancers, der das SSL-Zertifikat für das HTTPS-Load-Balancing besitzt. Daher laden Sie in diesem Schritt auch Ihr Zertifikat.

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map --ssl-certificates=www-ssl-cert
    
  3. Erstellen Sie für jede der von Ihnen erstellten IP-Adressen jeweils eine globale Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten.

    • Verwenden Sie für einen globalen externen Application Load Balancer den gcloud CLI-Befehl mit load-balancing-scheme=EXTERNAL_MANAGED. Diese Einstellung bietet erweiterte Funktionen zur Trafficverwaltung.
    • Verwenden Sie für einen klassischen Application Load Balancer load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create ipv4-http \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    
    gcloud compute forwarding-rules create ipv4-https \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address  \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    

Nachdem die globalen Weiterleitungsregeln erstellt wurden, kann es mehrere Minuten dauern, bis die Konfiguration übernommen wird.

Schritt 3: A- oder AAAA-Eintrag in Ihrer DNS-Zonendatei erstellen

Im letzten Schritt erstellen Sie einen A- und/oder AAAA-Eintrag in Ihrer DNS-Zonendatei, um auf Cloud CDN zu verweisen. Ihr Hostname-Wert antwortet dann mit den reservierten IP-Adressen, die Sie dem Load-Balancer zugewiesen haben.

Jetzt können Sie HTTP und HTTPS über Cloud CDN über demselben Hostnamen bereitstellen.

Optional: Von HTTP zu HTTPS weiterleiten

Wenn Sie HTTP-Anfragen an Ihren HTTPS-Load-Balancer weiterleiten möchten, müssen Sie einen partiellen HTTP-Load-Balancer mit einem Frontend, aber keine Back-Ends hinzufügen. Das Frontend empfängt Anfragen und leitet sie dann an den HTTPS-Load-Balancer weiter. Folgendes ist dafür erforderlich:

  • Eine Weiterleitungsregel mit derselben reservierten externen IP-Adresse, die Ihr HTTPS-Load-Balancer verwendet, wie auf dieser Seite beschrieben
  • Ein Ziel-HTTP-Proxy, wie auf dieser Seite dargestellt
  • Eine URL-Zuordnung, die Traffic zum HTTPS-Load-Balancer weiterleitet

Support

Bei Fragen zu Google Cloud und Cloud CDN wenden Sie sich an das Google Cloud-Vertriebsteam oder kontaktieren Sie den Slack-Kanal der Google Cloud Community und posten Sie eine Notiz im #cloud-cdn-Kanal.

Nächste Schritte