UDP Server di belakang load balancer Gcloud: terima ok, balas gagal

2

Saya memiliki pengaturan server UDP (pada VM) di belakang penyeimbang beban jaringan Google Cloud. Server terikat 0.0.0.0. Server UDP dapat menerima pesan yang dikirim ke penyeimbang, tetapi balasan tidak kembali ke klien. Tidak ada kesalahan yang dilaporkan, dan tcpdumptidak menunjukkan apa pun yang tidak biasa. Saya telah memastikan bahwa semua aturan firewall mengizinkan lalu lintas ini, dan penyeimbang beban diatur untuk meneruskan semua port.

Saya bukan ahli jaringan, tetapi saya menduga ada sesuatu yang salah dengan server UDP karena alamat yang menerima pesan berbeda dengan yang digunakan untuk balasan ( sendto()).

Saya menguji semua ini menggunakan socketservermodul Python di perpustakaan standar sebagai server gema :

import SocketServer

class MyUDPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        print "{} wrote:".format(self.client_address[0])
        print data
        socket.sendto(data.upper(), self.client_address)

if __name__ == "__main__":
    HOST, PORT = "0.0.0.0", 5029
    server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
    server.serve_forever()

VM hanya memiliki satu antarmuka jaringan, dengan IP lokal 10.240.x.x. Jika saya mengikat server UDPS ke IP lokal ini, maka pesan bahkan tidak diterima oleh server ini.

Tanpa penyeimbang beban, semuanya berfungsi normal, yaitu, pesan digema kembali dengan benar ke klien.

Pertanyaan: Apa yang harus saya lakukan agar server UDP saya membalas pesan?

EDIT: diskusi ini mungkin relevan.

Caleb Hattingh
sumber

Jawaban:

3

Saya harus berurusan dengan masalah serupa untuk salah satu proyek sarjana saya: DNS load balancing.

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Load_Balancer_Administration/s1-initial-setup-forwarding-VSA.html

/etc/sysctl.conf

 net.ipv4.ip_nonlocal_bind = 1

Kemudian cobalah untuk mengikat aplikasi python ke IP publik dari load balancer.

Pada dasarnya, server Anda merespons pada IP pribadinya dan klien mengharapkan tanggapan dari penyeimbang beban.

Daniel Widrick
sumber
Beri tahu saya jika Anda pernah di Brisbane, Australia. Aku serius berutang budi padamu 🍺. Bisakah Anda mengubah jawaban Anda untuk menentukan bahwa IP publik harus menjadi IP penyeimbang beban? Tampak jelas bagi saya sekarang bahwa itu berfungsi, tapi saya bodoh mencoba IP publik dari server UDP VM beberapa kali. Terima kasih lagi!
Caleb Hattingh
Saya membuat edit (saya harap tidak apa-apa dengan Anda). Ini akan muncul setelah peer review rupanya.
Caleb Hattingh