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.
Jika menginginkan alamat IP permanen yang tetap sama saat menghapus Ingress dan membuat yang baru, Anda harus mencadangkan alamat IP eksternal statis global. Kemudian, dalam manifes Ingress, sertakan anotasi yang memberikan nama alamat IP statis yang dicadangkan. Jika Anda mengubah Ingress yang ada untuk menggunakan alamat IP statis, bukan alamat IP sementara, GKE dapat mengubah alamat IP load balancer saat GKE membuat ulang aturan penerusan load balancer.
Misalnya, Anda telah mencadangkan alamat IP eksternal statis global yang bernama
my-static-address
. Dalam manifes Ingress, sertakan
anotasi kubernetes.io/ingress.global-static-ip-name
seperti ditunjukkan di sini:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: my-static-address
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.
Anda dapat menggunakan sertifikat SSL yang dikelola Google atau sertifikat yang Anda kelola sendiri. Untuk informasi selengkapnya tentang pembuatan Ingress yang menggunakan sertifikat yang dikelola Google, lihat Menggunakan sertifikat SSL yang dikelola Google.
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 berikutnya
Konfigurasikan Load Balancer Aplikasi eksternal dengan membuat Deployment, Service, dan Ingress.
Pelajari cara mengekspos aplikasi menggunakan Service.
Baca ringkasan cara berjejaring di GKE.
Pelajari lebih lanjut cara mengonfigurasi fitur Ingress.
Pelajari cara mengaktifkan pengalihan HTTP ke HTTPS.