Ingress untuk Load Balancer Aplikasi eksternal


Halaman ini menjelaskan cara kerja Ingress untuk Load Balancer Aplikasi eksternal di Google Kubernetes Engine (GKE). Anda juga dapat mempelajari cara menyiapkan dan menggunakan Ingress untuk Load Balancing Eksternal.

Untuk mengetahui informasi umum tentang penggunaan load balancing di GKE, lihat Ingress untuk Load Balancer Aplikasi eksternal.

Jaringan Google Kubernetes Engine (GKE) dibuat berdasarkan Cloud Load Balancing. Dengan Cloud Load Balancing, satu alamat IP anycast memungkinkan perutean untuk menentukan jalur dengan biaya terendah ke load balancer Google Cloud terdekat.

Dukungan untuk fitur Google Cloud

Anda dapat menggunakan BackendConfig untuk mengonfigurasi Load Balancer Aplikasi eksternal agar menggunakan fitur seperti:

BackendConfig adalah resource kustom yang menyimpan informasi konfigurasi untuk fitur Google Cloud. Untuk mempelajari lebih lanjut fitur yang didukung, lihat Konfigurasi Ingress.

Dukungan untuk WebSocket

Dengan Load Balancer Aplikasi eksternal, protokol WebSocket berfungsi tanpa konfigurasi apa pun.

Jika ingin menggunakan protokol WebSocket, sebaiknya gunakan nilai waktu tunggu yang lebih besar dari default 30 detik. Untuk traffic WebSocket yang dikirim melalui Load Balancer Aplikasi eksternal Google Cloud, waktu tunggu Service backend diinterpretasikan sebagai jumlah waktu maksimum koneksi WebSocket dapat tetap terbuka, baik saat ada ataupun tidak ada aktivitas.

Untuk menetapkan nilai waktu tunggu untuk Service backend yang dikonfigurasi melalui Ingress, buat objek BackendConfig, dan gunakan anotasi beta.cloud.google.com/backend-config dalam manifes Service Anda.

Untuk informasi konfigurasi, lihat Waktu tunggu respons backend.

Alamat IP statis untuk load balancer HTTPS

Saat membuat objek Ingress, Anda akan mendapatkan alamat IP eksternal yang stabil yang dapat digunakan klien untuk mengakses Service Anda, yang kemudian menjadi container yang sedang berjalan. Alamat IP stabil dalam arti berlaku selama masa aktif objek Ingress. Jika menghapus Ingress dan membuat Ingress baru dari file manifes yang sama, Anda tidak dijamin akan mendapatkan alamat IP eksternal yang sama.

Menyiapkan HTTPS (TLS) antara klien dan load balancer

Load balancer HTTP(S) bertindak sebagai proxy antara klien dan aplikasi Anda. Jika Anda ingin menerima permintaan HTTPS dari klien, load balancer harus memiliki sertifikat agar dapat membuktikan identitasnya kepada klien Anda. Load balancer juga harus memiliki kunci pribadi untuk menyelesaikan handshake HTTPS.

Saat load balancer menerima permintaan HTTPS dari klien, traffic antara klien dan load balancer dienkripsi menggunakan TLS. Namun, load balancer menghentikan enkripsi TLS dan meneruskan permintaan tanpa enkripsi ke aplikasi. Untuk mengetahui informasi tentang cara mengenkripsi traffic antara load balancer dan aplikasi, lihat HTTPS antara load balancer dan aplikasi Anda.

Untuk menyediakan load balancer HTTP(S) dengan sertifikat dan kunci yang Anda buat sendiri, buat objek Secret Kubernetes. Secret menyimpan sertifikat dan kunci. Tambahkan Secret ke kolom tls dari manifes Ingress Anda, seperti dalam contoh berikut:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
spec:
  tls:
  - secretName: SECRET_NAME
  rules:
  - http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: SERVICE_NAME
            port:
              number: 60000

Manifes ini mencakup nilai-nilai berikut:

  • SECRET_NAME: nama Secret yang Anda buat.
  • SERVICE_NAME: nama Service backend Anda.

Perubahan pada Secret diambil secara berkala, sehingga jika Anda mengubah data di dalam Secret, perubahan tersebut akan memerlukan waktu maksimal 10 menit untuk diterapkan ke load balancer.

Untuk informasi selengkapnya, lihat Menggunakan beberapa sertifikat SSL di load balancing HTTPS dengan Ingress.

Agar dapat mengamankan Ingress terenkripsi HTTPS untuk cluster GKE, lihat contoh Secure Ingress.

Menonaktifkan HTTP

Jika Anda ingin semua traffic antara klien dan load balancer HTTP(S) menggunakan HTTPS, Anda dapat menonaktifkan HTTP dengan menyertakan anotasi kubernetes.io/ingress.allow-http dalam manifes Ingress. Tetapkan nilai anotasi ke "false".

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: SECRET_NAME
  ...

Manifes ini mencakup SECRET_NAME yang merupakan nama Secret yang Anda buat.

Sertifikat yang dibagikan sebelumnya untuk load balancer

Selain menggunakan Secret Kubernetes untuk memberikan sertifikat ke load balancer untuk penghentian HTTP(S), Anda dapat menggunakan sertifikat yang sebelumnya diupload ke project Google Cloud Anda. Untuk informasi selengkapnya, lihat Menggunakan sertifikat yang dibagikan sebelumnya dan Menggunakan beberapa sertifikat SSL dalam load balancing HTTPS dengan Ingress.

HTTPS (TLS) antara load balancer dan aplikasi

Load balancer HTTP(S) bertindak sebagai proxy antara klien dan aplikasi Anda. Klien dapat menggunakan HTTP atau HTTPS untuk berkomunikasi dengan proxy load balancer. Koneksi dari proxy load balancer ke aplikasi Anda menggunakan HTTP secara default. Namun, jika aplikasi Anda, yang berjalan di Pod GKE, dapat menerima permintaan HTTPS, Anda dapat mengonfigurasi load balancer untuk menggunakan HTTPS saat meneruskan permintaan ke aplikasi Anda.

Untuk mengonfigurasi protokol yang digunakan antara load balancer dan aplikasi, gunakan anotasi cloud.google.com/app-protocols dalam manifes Service. Manifes Service ini harus menyertakan type: NodePort kecuali jika Anda menggunakan load balancing native container. Jika menggunakan load balancing native container, gunakan type: ClusterIP.

Manifes Service berikut menentukan dua port. Anotasi ini menyatakan bahwa saat load balancer HTTP(S) menargetkan port 80 Service, load balancer tersebut harus menggunakan HTTP. Selain itu, jika load balancer menargetkan port 443 Service, load balancer harus menggunakan HTTPS.

Manifes Service harus menyertakan nilai name dalam anotasi port. Anda hanya dapat mengedit port Service dengan merujuk ke name yang ditetapkan, bukan dengan nilai targetPort-nya.

apiVersion: v1
kind: Service
metadata:
  name: my-service-3
  annotations:
    cloud.google.com/app-protocols: '{"my-https-port":"HTTPS","my-http-port":"HTTP"}'
spec:
  type: NodePort
  selector:
    app: metrics
    department: sales
  ports:
  - name: my-https-port
    port: 443
    targetPort: 8443
  - name: my-http-port
    port: 80
    targetPort: 50001

Langkah selanjutnya