Menyiapkan pengalihan HTTP-ke-HTTPS untuk Load Balancer Aplikasi internal regional

Topik ini menunjukkan cara menggunakan pengalihan peta URL untuk mengalihkan semua permintaan Load Balancer Aplikasi internal dari HTTP ke HTTPS. Contoh di halaman ini menggunakan port terkenal 80 (untuk HTTP) dan 443 (untuk HTTPS). Namun, Anda tidak diwajibkan untuk menggunakan nomor port tertentu ini. Setiap aturan penerusan untuk Application Load Balancer dapat mereferensikan satu port dari 1-65535.

Untuk mengonfigurasi pengalihan HTTP ke HTTPS, Anda harus membuat dua load balancer, satu untuk traffic HTTPS dan satu lagi untuk traffic HTTP. Setiap load balancer memiliki aturan penerusan, proxy target, dan peta URL-nya sendiri, tetapi memiliki alamat IP yang sama. Untuk load balancer HTTP, Anda tidak perlu mengonfigurasi backend karena front end mengalihkan traffic ke backend load balancer HTTPS.

Pada level yang tinggi, untuk mengalihkan traffic HTTP ke HTTPS, Anda harus melakukan hal berikut:

  1. Buat load balancer HTTPS internal reguler dengan alamat IP internal bersama yang dicadangkan.
  2. Uji load balancer untuk memastikan load balancer berfungsi.
  3. Alihkan traffic ke load balancer HTTPS.

    Untuk melakukannya, Anda harus membuat load balancer HTTP internal parsial yang hanya memiliki frontend. Frontend menerima permintaan, lalu mengalihkannya ke load balancer HTTPS menggunakan resource berikut:

    • Aturan penerusan dengan alamat IP internal yang dicadangkan yang sama dengan load balancer HTTPS yang Anda buat di langkah 1
    • Proxy HTTP target
    • Peta URL yang mengalihkan traffic ke load balancer HTTPS

Seperti yang ditunjukkan pada diagram berikut, load balancer HTTPS adalah load balancer reguler dengan komponen Load Balancer Aplikasi internal yang diharapkan.

Load balancer HTTP memiliki alamat IP yang sama dengan load balancer HTTPS dan petunjuk pengalihan di peta URL.

Konfigurasi pengalihan HTTP-ke-HTTPS internal.
Konfigurasi pengalihan HTTP-ke-HTTPS internal (klik untuk memperbesar).

Membuat load balancer HTTPS internal

Untuk menyiapkan Load Balancer Aplikasi internal regional, gunakan petunjuk di menyiapkan Load Balancer Aplikasi internal.

Jika Anda sudah memiliki Application Load Balancer internal regional yang berfungsi, pastikan load balancer tersebut memiliki alamat IP bersama yang dicadangkan untuk aturan penerusan, lalu lanjutkan ke bagian berikutnya, Mengalihkan traffic ke load balancer HTTPS.

Untuk Load Balancer Aplikasi internal lintas region, gunakan petunjuk di Menyiapkan Load Balancer Aplikasi internal lintas region dengan backend grup instance VM untuk membuat dua load balancer, lalu ikuti petunjuk di Mengalihkan traffic ke load balancer HTTPS.

Mengalihkan traffic ke load balancer HTTPS

Buat load balancer HTTP parsial yang memiliki alamat IP yang sama dengan load balancer HTTPS yang dibuat pada langkah sebelumnya. Load balancer parsial mengalihkan traffic dari port 80 ke port 443.

Konsol

Memulai konfigurasi

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

    Buka Load balancing

  2. Klik Create load balancer.
  3. Untuk Type of load balancer, pilih Application Load Balancer (HTTP/HTTPS), lalu klik Next.
  4. Untuk Public facing or internal, pilih Internal, lalu klik Next.
  5. Untuk Cross-region atau single region deployment, pilih Best for regional workloads, lalu klik Next.
  6. Klik Konfigurasikan.

Konfigurasi dasar

  1. Untuk nama load balancer, masukkan l7-ilb-http-redirect.
  2. Untuk Region, pilih us-west1.
  3. Untuk Network, pilih lb-network.

Mengonfigurasi layanan backend

  1. Klik Backend configuration.
  2. Di menu Select backend services, pilih layanan backend l7-ilb-backend-service yang ada.
  3. Klik Oke.

Mengonfigurasi peta URL

  1. Klik Routing rules.
  2. Untuk Mode, pilih Advanced host and path rule.
  3. Klik Tambahkan aturan host dan jalur.
  4. Tetapkan Hosts ke *.

  5. Untuk Pencocok jalur (kecocokan, tindakan, dan layanan), masukkan kode berikut:

    name: matcher1
    defaultUrlRedirect:
      httpsRedirect: true
      hostRedirect: IP_ADDRESS:443
      redirectResponseCode: PERMANENT_REDIRECT

  6. Pastikan l7-ilb-backend-service adalah satu-satunya layanan backend untuk semua host dan jalur yang tidak cocok.

Untuk informasi tentang pengelolaan traffic, lihat Menyiapkan pengelolaan traffic untuk Load Balancer Aplikasi internal.

Mengonfigurasi frontend untuk HTTP

  1. Klik Frontend configuration.
  2. Tetapkan nama aturan penerusan ke l7-ilb-forwarding-rule.
  3. Tetapkan Protokol ke HTTP.
  4. Tetapkan Subnetwork ke backend-subnet.
  5. Tetapkan Port ke 80.
  6. Di menu IP address, pilih alamat IP bersama yang dicadangkan untuk aturan penerusan load balancer HTTPS.
  7. Klik Done.

Meninjau konfigurasi

  1. Klik Review and finalize.
  2. Tinjau setelan konfigurasi load balancer Anda.
  3. Opsional: Klik Equivalent code untuk melihat permintaan REST API yang akan digunakan untuk membuat load balancer.
  4. Klik Create.

gcloud

  1. Buat peta URL baru dengan membuat file YAML dengan konfigurasi pengalihan traffic. Ganti IP_ADDRESS dengan alamat IP bersama yang dicadangkan untuk aturan penerusan load balancer HTTPS.

    defaultService: regions/us-west1/backendServices/l7-ilb-backend-service
    kind: compute#urlMap
    name: l7-ilb-redirect-url-map
    hostRules:
    - hosts:
     - '*'
     pathMatcher: matcher1
    pathMatchers:
    - name: matcher1
     defaultUrlRedirect:
           hostRedirect: IP_ADDRESS:443
           redirectResponseCode: PERMANENT_REDIRECT
           httpsRedirect: True
  2. Impor file YAML ke peta URL baru:

    gcloud compute url-maps import l7-ilb-redirect-url-map \
       --source=/tmp/url_map.yaml \
       --region=us-west1
    
  3. Buat proxy target load balancer HTTP:

    gcloud compute target-http-proxies create l7-ilb-http-proxy \
       --url-map=l7-ilb-redirect-url-map \
       --region=us-west1
    
  4. Buat aturan penerusan baru dan alamat IP bersama:

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
       --load-balancing-scheme=INTERNAL_MANAGED \
       --network=lb-network \
       --subnet=backend-subnet \
       --address=IP_ADDRESS \
       --ports=80 \
       --region=us-west1 \
       --target-http-proxy=l7-ilb-http-proxy \
       --target-http-proxy-region=us-west1
    

Menguji pengalihan traffic

  1. Hubungkan ke VM klien Anda.

    gcloud compute ssh l7-ilb-client-us-west1-a \
       --zone=us-west1-a
    
  2. Kirim permintaan HTTP ke IP_ADDRESS di port 80, dan tunggu pengalihan traffic.

    curl -L -k IP_ADDRESS
  3. Lihat contoh output.

    Page served from: l7-ilb-backend-w11t
    

    Tambahkan -vvv untuk melihat detail selengkapnya.

    curl -L -k IP_ADDRESS -vvv
    

    • Rebuilt URL to: IP_ADDRESS/
    • Trying IP_ADDRESS...
    • TCP_NODELAY set
    • Connected to IP_ADDRESS (IP_ADDRESS) port 80 (#0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / > < HTTP/1.1 308 Permanent Redirect < location: https://IP_ADDRESS:443/ < date: Fri, 07 Aug 2020 05:07:18 GMT < via: 1.1 google < content-length: 0 <
    • Curl_http_done: called premature == 0
    • Connection #0 to host IP_ADDRESS left intact
    • Issue another request to this URL: 'https://IP_ADDRESS:443/'
    • Trying IP_ADDRESS...
    • TCP_NODELAY set
    • Connected to IP_ADDRESS (IP_ADDRESS) port 443 (#1)
    • ALPN, offering h2
    • ALPN, offering http/1.1
    • Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
    • successfully set certificate verify locations:
    • CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs ... ...
    • SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
    • ALPN, server accepted to use h2
    • Server certificate:
    • subject: O=Google TESTING; CN=test_cert_1
    • start date: Jan 1 00:00:00 2015 GMT
    • expire date: Jan 1 00:00:00 2025 GMT
    • issuer: O=Google TESTING; CN=Intermediate CA
    • SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
    • Using HTTP2, server supports multi-use
    • Connection state changed (HTTP/2 confirmed)
    • Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
    • Using Stream ID: 1 (easy handle 0x561a6b0e3ea0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / >
    • Connection state changed (MAX_CONCURRENT_STREAMS updated)! < HTTP/2 200 < date: Fri, 07 Aug 2020 05:07:18 GMT < server: Apache/2.4.25 (Debian) < last-modified: Thu, 06 Aug 2020 13:30:21 GMT < etag: "2c-5ac357d7a47ec" < accept-ranges: bytes < content-length: 44 < content-type: text/html < via: 1.1 google < Page served from: l7-ilb-backend-https-w11t
    • Curl_http_done: called premature == 0
    • Connection #1 to host IP_ADDRESS left intact

Langkah selanjutnya