Saat ini saya sedang mengerjakan proyek hobi kecil yang akan saya buat open source setelah siap. Layanan ini berjalan di Google Container Engine. Saya memilih GCE untuk menghindari kerumitan konfigurasi, biaya terjangkau dan untuk mempelajari hal-hal baru.
Pod saya berjalan dengan baik dan saya membuat layanan dengan tipe LoadBalancer
untuk mengekspos layanan pada port 80 dan 443. Ini berfungsi dengan baik.
Namun, saya menemukan bahwa untuk setiap LoadBalancer
layanan, penyeimbang beban Mesin Komputasi Google baru dibuat. Penyeimbang beban ini cukup mahal dan benar-benar selesai untuk proyek hobi pada satu contoh.
Untuk memotong biaya, saya mencari cara untuk mengekspos port tanpa penyeimbang beban.
Apa yang saya coba sejauh ini:
Menyebarkan
NodePort
layanan. Sayangnya tidak diizinkan untuk mengekspos port di bawah 30000.Menyebarkan Ingress tetapi ini juga menciptakan penyeimbang beban.
Mencoba menonaktifkan
HttpLoadBalancing
( https://cloud.google.com/container-engine/reference/rest/v1/projects.zones.clusters#HttpLoadBalancing ) tetapi masih membuat penyeimbang beban.
Apakah ada cara untuk mengekspos port 80 dan 443 untuk satu instance di Google Container Engine tanpa penyeimbang beban?
sumber
externalIp
Selain solusi hebat dan kerja ConnorJC: Solusi yang sama juga dijelaskan dalam pertanyaan ini: Kubernetes - dapatkah saya menghindari penggunaan Penyeimbang Beban GCE untuk mengurangi biaya?
"InternalIp" mengacu pada ip internal instance komputasi (alias simpul) (seperti yang terlihat di Google Cloud Platform -> Google Compute Engine -> VM Instances)
Komentar ini memberikan petunjuk mengapa ip internal dan bukan eksternal harus dikonfigurasi.
Selain itu, setelah mengkonfigurasi layanan untuk port 80 dan 443, saya harus membuat aturan firewall yang memungkinkan lalu lintas ke simpul instance saya:
Setelah pengaturan ini, saya dapat mengakses layanan saya melalui http: // externalIp
sumber
Jika Anda hanya memiliki satu pod, Anda dapat menggunakannya
hostNetwork: true
untuk mencapai ini:Perhatikan bahwa dengan melakukan ini, pod Anda akan mewarisi resolver DNS host dan bukan Kubernetes. Itu berarti Anda tidak bisa lagi menyelesaikan layanan cluster dengan nama DNS. Misalnya, dalam contoh di atas Anda tidak dapat mengakses
static
layanan di http: // statis . Anda masih dapat mengakses layanan dengan IP cluster mereka, yang disuntikkan oleh variabel lingkungan .Solusi ini lebih baik daripada menggunakan externalIP layanan karena mem-bypass kube-proxy, dan Anda akan menerima IP sumber yang benar.
sumber
Untuk mensintesis jawaban @ConnorJC @ derMikey ke dalam apa yang berfungsi untuk saya:
Diberikan kumpulan gugus yang berjalan pada Mesin Hitung Mesin Virtual :
Saya membuat layanan:
dan kemudian membuka firewall untuk semua (?) ips di proyek:
dan kemudian
my-app
dapat diakses melalui IP Publik GCE Instance34.56.7.001
(bukan ip cluster)sumber
Saya lebih suka tidak menggunakan penyeimbang beban cloud, sampai diperlukan, karena biaya dan vendor terkunci.
Sebagai gantinya saya menggunakan ini: https://kubernetes.github.io/ingress-nginx/deploy/
Ini adalah pod yang menjalankan penyeimbang beban untuk Anda. Halaman itu memiliki catatan instalasi khusus GKE.
sumber