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 80 yang sudah dikenal (untuk HTTP) dan 443 (untuk HTTPS). Namun, Anda tidak diharuskan menggunakan nomor port tertentu ini. Setiap aturan penerusan untuk Load Balancer Aplikasi dapat mereferensikan port tunggal 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 sendiri, tetapi memiliki alamat IP yang sama. Untuk load balancer HTTP, Anda tidak perlu mengonfigurasi backend karena frontend mengalihkan traffic ke backend load balancer HTTPS.

Di tingkat 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 memastikannya berfungsi.
  3. Mengalihkan 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 dengan 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 dalam 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 Load Balancer Aplikasi internal regional yang berfungsi, pastikan Load Balancer Aplikasi tersebut memiliki alamat IP bersama yang dicadangkan untuk aturan penerusan, lalu lanjutkan ke bagian berikutnya, Alihkan traffic ke load balancer HTTPS.

Untuk Load Balancer Aplikasi internal lintas region, gunakan petunjuk di bagian 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 sebagian yang memiliki alamat IP yang sama dengan load balancer HTTPS yang dibuat di langkah sebelumnya. Load balancer parsial mengalihkan traffic dari port 80 ke port 443.

Konsol

Memulai konfigurasi Anda

  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 Terhadap publik atau internal, pilih Internal, lalu klik Berikutnya.
  5. Untuk Cross-region or single region deployment, pilih Best for regional working, 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 yang ada l7-ilb-backend-service.
  3. Klik OK.

Mengonfigurasi peta URL

  1. Klik Routing rules.
  2. Untuk Mode, pilih Advanced host and path rule.
  3. Klik Add host and path rule.
  4. Setel Host 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 host yang tidak cocok dan jalur yang tidak cocok.

Untuk mengetahui informasi tentang pengelolaan traffic, baca artikel 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. Setel Protocol ke HTTP.
  4. Setel 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 menggunakan 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 pada 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