Mengirim konten HTTP dan HTTPS melalui domain yang dipublikasikan yang sama

Mengirim konten HTTP dan HTTPS melalui nama host yang sama saat menggunakan Cloud CDN adalah hal yang umum. Meskipun banyak browser menerapkan penggunaan Transport Layer Security (TLS) dan melarang pengiriman konten yang tidak aman, masih ada kasus penggunaan yang mengharuskan pengiriman tidak aman dan pengiriman aman harus diizinkan melalui nama host yang sama. Artikel ini membahas cara mendapatkan fungsi ini menggunakan Cloud CDN.

Tantangan

Saat klien membuat koneksi dengan server edge CDN, protokol pengiriman pengguna akhir akan dinegosiasikan. Sebagian besar platform CDN konvensional mengarahkan traffic ke jejak penayangan masing-masing dengan:

  1. Mengarahkan ke nama domain milik CDN, menggunakan data CNAME DNS.
  2. Mengarahkan traffic ke subkumpulan server yang mendukung negosiasi TLS untuk nama domain tersebut.

Karena Cloud CDN terintegrasi dengan Cloud Load Balancing, pendekatan Cloud CDN berbeda dengan pendekatan CDN konvensional. Cloud CDN memanfaatkan alamat IP Anycast dari Load Balancer Aplikasi eksternal. Saat mengonfigurasi Cloud CDN, Anda memiliki alamat IP tertentu sebagai tujuan untuk mengarahkan traffic. Tindakan ini memerlukan pembuatan data A (untuk IPv4) dan/atau AAAA (untuk IPv6) di data DNS Anda, bukan data CNAME dengan nilai nama host.

Secara default, saat mengonfigurasi frontend load balancer, Google Cloud secara dinamis menetapkan alamat IP efemeral. Karena Anda perlu mengonfigurasi konfigurasi HTTP dan HTTPS secara terpisah, hal ini dapat menyebabkan Anda memiliki dua alamat IP untuk instance Cloud CDN. Karena alamat IP data A atau AAAA yang sama ditujukan untuk HTTP dan HTTPS, kasus ini tidak dapat ditangani dengan benar di DNS.

Solusi

Saat mengirimkan konten yang aman dan tidak aman melalui nama host yang sama, klien akan diarahkan ke server edge yang dapat menegosiasikan HTTP atau HTTPS. Agar fitur ini berfungsi dengan Cloud CDN, Anda dapat memesan alamat IP dan mengikat alamat IP yang dicadangkan ke konfigurasi frontend HTTP dan HTTPS di Load Balancer Aplikasi eksternal.

HTTP dan HTTPS melalui domain yang sama
HTTP dan HTTPS melalui domain yang sama

Dalam diagram:

  • permintaan masuk untuk www.example.com berasal dari klien yang menggunakan HTTP/2, HTTPS, dan HTTP.
  • Dua alamat IP dicadangkan, satu untuk IPv4 dan satu untuk IPv6:

    • 34.95.111.204
    • [2600:1901:0:b13e::]
  • Kedua alamat IP ini terikat dengan www.example.com di Cloud DNS.

  • Saat mengonfigurasi Load Balancer Aplikasi eksternal, konfigurasi frontend menyertakan empat aturan penerusan yang menggunakan alamat IP yang dicadangkan:

    Nama Protokol IP:Port
    http://ipv4 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
  • Untuk cache Cloud CDN yang tidak ditemukan, load balancer mendistribusikan permintaan ke origin backend, berdasarkan setelan yang ditentukan dalam peta URL load balancer.

Langkah 1: Cadangkan alamat IP eksternal global

Buat alamat IPv4 atau IPv6 (atau keduanya). Untuk mendukung pengalamatan IPv4 dan IPv6, Anda harus membuat satu alamat IPv4 dan satu alamat IPv6.

Di data DNS,buat data A (atau AAAA) untuk mengarahkan traffic ke alamat IP yang dicadangkan ini.

Konsol

  1. Di Konsol Google Cloud, buka halaman External IP addresses.

    Buka halaman External IP addresses

  2. Klik Reserve static address untuk memesan alamat IPv4.
  3. Tetapkan Nama ipv4-address.
  4. Tetapkan paket Jaringan ke Premium.
  5. Tetapkan IP version ke IPv4.
  6. Tetapkan Type ke Global.
  7. Klik Reserve.

Load balancer menggunakan jaringan Paket Premium, seperti yang diperlukan saat Cloud CDN diaktifkan.

gcloud

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

Perhatikan alamat IPv4 yang dicadangkan:

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

Ulangi langkah ini untuk IPv6.

Untuk informasi selengkapnya, lihat Memesan alamat IP eksternal statis baru.

Langkah 2: Ikat alamat IP yang dicadangkan ke load balancer

Bagian ini menunjukkan cara menetapkan alamat IP ke load balancer. Petunjuk menyeluruh untuk menyiapkan load balancer tidak termasuk dalam cakupan artikel ini. Untuk contoh penyiapan, lihat Membuat load balancer HTTPS.

Bagian konfigurasi frontend dapat Anda gunakan untuk memilih protokol yang digunakan antara klien dan load balancer.

Dalam contoh ini, Anda menggunakan HTTP dan HTTPS antara klien dan load balancer, sehingga Anda memerlukan satu atau beberapa resource sertifikat SSL untuk mengonfigurasi proxy.

Konsol

Mengonfigurasi aturan penerusan HTTP

  1. Di Konsol Google Cloud, buka halaman Load balancing.

    Buka halaman Load balancing

  2. Pilih load balancer, lalu klik Edit.
  3. Di panel kiri, klik Frontend configuration.
  4. Di kolom Name, masukkan ipv4-http.
  5. Pada kolom Protocol, pilih HTTP.
  6. Tetapkam Versi IP ke IPv4.
  7. Di Alamat IP, pilih ipv4-address yang telah Anda buat sebelumnya.
  8. Pastikan Port disetel ke 80 untuk mengizinkan traffic HTTP.
  9. Klik Done.

Mengonfigurasi aturan penerusan HTTPS

  1. Di Konsol Google Cloud, buka halaman Load balancing.

    Buka halaman Load balancing

  2. Pilih load balancer, lalu klik Edit.
  3. Di panel kiri, klik Frontend configuration.
  4. Di kolom Name, masukkan ipv4-https.
  5. Pada kolom Protocol, pilih HTTPS.
  6. Tetapkam Versi IP ke IPv4.
  7. Di Alamat IP, pilih ipv4-address yang telah Anda buat sebelumnya.
  8. Pastikan Port disetel ke 443 untuk mengizinkan traffic HTTP.
  9. Klik menu drop-down Certificate.
    1. Jika Anda sudah memiliki resource sertifikat SSL yang dikelola sendiri yang ingin digunakan sebagai sertifikat SSL utama, pilih sertifikat tersebut dari menu drop-down.
    2. Jika tidak, pilih Create a new certificate.
    3. Pilih Upload my certificate atau Create Google managed certificate.
    4. Jika Anda memilih Upload my certificate, selesaikan langkah-langkah ini.
      1. Isi Name www-ssl-cert.
      2. Di kolom yang sesuai, upload Public key certificate (file .crt), Certificate chain (file .csr), dan Private key (file .key).
      3. Klik Create.
    5. Jika Anda memilih Buat sertifikat yang dikelola Google, masukkan Domain.
    6. Untuk menambahkan resource sertifikat selain resource sertifikat SSL utama:
      1. Klik Add certificate.
      2. Pilih sertifikat dari daftar Certificates, atau klik Create a new certificate, lalu ikuti petunjuk di atas.
  10. Klik Done.

Ulangi langkah-langkah ini untuk IPv6.

Melakukan peninjauan dan penyelesaian

  1. Di panel kiri, klik Review and finalize.
  2. Bandingkan setelan Anda dengan yang ingin Anda buat.
  3. Jika semuanya sudah benar, klik Perbarui.

gcloud

  1. Buat proxy HTTP target untuk mengarahkan permintaan ke peta URL.

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. Buat proxy HTTPS target untuk mengarahkan permintaan ke peta URL Anda. Proxy adalah bagian dari load balancer yang menyimpan sertifikat SSL untuk Load Balancing HTTPS, sehingga Anda juga memuat sertifikat pada langkah ini.

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map --ssl-certificates=www-ssl-cert
    
  3. Buat dua aturan penerusan global untuk mengarahkan permintaan masuk ke proxy, satu untuk setiap alamat IP yang Anda buat.

    • Untuk Load Balancer Aplikasi eksternal global, gunakan perintah gcloud CLI dengan load-balancing-scheme=EXTERNAL_MANAGED. Setelan ini menawarkan kapabilitas pengelolaan traffic tingkat lanjut.
    • Untuk Load Balancer Aplikasi klasik, gunakan 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
    

Setelah membuat aturan penerusan global, diperlukan waktu beberapa menit agar konfigurasi Anda dapat diterapkan ke seluruh dunia.

Langkah 3: Buat data A atau AAAA di file zona DNS Anda

Langkah terakhir dalam proses ini adalah membuat data A dan/atau AAAA di file zona DNS Anda untuk mengarah ke Cloud CDN, yang mana nilai nama host Anda akan menjawab dengan alamat IP yang dicadangkan yang Anda tetapkan pada load balancer.

Sekarang, Anda dapat menayangkan HTTP dan HTTPS melalui nama host yang sama melalui Cloud CDN.

Opsional: Mengalihkan HTTP ke HTTPS

Jika ingin mengalihkan permintaan HTTP ke load balancer HTTPS, Anda harus menambahkan load balancer HTTP parsial yang memiliki frontend, tetapi tidak memiliki backend. Frontend menerima permintaan, lalu mengalihkannya ke load balancer HTTPS. Hal ini dilakukan dengan menggunakan kode berikut:

  • Aturan penerusan dengan alamat IP eksternal yang dicadangkan yang sama dengan yang digunakan load balancer HTTPS Anda, seperti yang ditampilkan di halaman ini.
  • Proxy HTTP target, seperti yang ditampilkan di halaman ini.
  • Peta URL yang mengalihkan traffic ke load balancer HTTPS.

Mendapatkan dukungan

Jika ada pertanyaan tentang Google Cloud dan Cloud CDN, hubungi tim Penjualan Google Cloud atau hubungi melalui saluran Komunitas Google Cloud di Slack dan posting catatan di saluran #cloud-cdn.

Apa langkah selanjutnya?