Score:0

กำหนดเส้นทางการรับส่งข้อมูล udp ขาเข้าและขาออกไปยังพอร์ตเดียวกันใน kubernetes

ธง au

นี่คือการติดตามผล คำถามก่อนหน้านี้ที่ฉันถามแต่ด้วยการถาม/แนวทางที่ต่างออกไป ในกรณีที่เป็นเรื่องสำคัญ ฉันใช้ GKE แต่ฉันหวังว่าจะมีคำตอบที่ไม่เชื่อเรื่องพระเจ้าในระบบคลาวด์

ฉันกำลังพยายามเรียกใช้คอนเทนเนอร์ แฟกทอรีโอทูลส์/Factorioแต่แอปพลิเคชันมีข้อกำหนดเฉพาะบางประการเนื่องจากการใช้ฟังก์ชันการแสดงรายการเซิร์ฟเวอร์สาธารณะเฉพาะแอปพลิเคชัน ดังที่เห็นในวิดีโอเกมจำนวนมากที่ใช้เซิร์ฟเวอร์ที่โฮสต์โดยผู้ใช้

จนถึงตอนนี้ ฉันสามารถทำงานกับเครือข่ายโฮสต์และการเชื่อมต่อโดยตรงเพื่อทำงานกับบริการ NodePort ได้อย่างไรก็ตาม ฟังก์ชันแสดงรายการเซิร์ฟเวอร์สาธารณะของแอปพลิเคชันยังคงเป็นปัญหาสำหรับคอนเทนเนอร์ที่ไม่มีสิทธิพิเศษ

นี่คือวิธีที่ Factorio กำหนดวิธีการจัดการรายชื่อเซิร์ฟเวอร์สาธารณะ:

  • คอนเทนเนอร์รับฟังในซ็อกเก็ตเดียว เช่น UDP Port 34197
  • บริการ NodePort กำหนดเส้นทางการรับส่งข้อมูลไปยัง 20635 แบบสาธารณะ
  • คอนเทนเนอร์ส่ง ping ผ่านพอร์ตการฟัง (34197) ไปยังเซิร์ฟเวอร์ ping-pong และเซิร์ฟเวอร์ ping-pong ตอบกลับด้วยที่อยู่ IP และพอร์ตที่ได้รับ ping จาก นอก k8s นี่ยังคงเป็นพอร์ต 34197
  • จากนั้นคอนเทนเนอร์จะใช้ข้อมูลนี้เพื่อลงทะเบียนกับรายชื่อเซิร์ฟเวอร์ ที่อยู่ IP พอร์ต ชื่อเซิร์ฟเวอร์ และข้อมูลอื่นๆ
  • ใน GKE ปิงปองจะถูกส่งไปยังพอร์ตที่ไม่ได้ใช้งานโดยพลการ (เช่น 40792)
  • คอนเทนเนอร์เชื่อว่ากำลังฟังพอร์ตอื่นที่ไม่ใช่พอร์ตที่ฉันตั้งค่าไว้ (20534) จากนั้นลงทะเบียนกับเซิร์ฟเวอร์สาธารณะที่แสดงรายการโดยใช้พอร์ตที่ไม่ถูกต้อง (40792 เนื่องจากเซิร์ฟเวอร์ปิงปองพูดเช่นนั้น)
  • ความพยายามใดๆ ในการเชื่อมต่อจากรายชื่อเซิร์ฟเวอร์สาธารณะจะล้มเหลว ลูกค้าเชื่อว่าเซิร์ฟเวอร์กำลังฟังพอร์ตที่เซิร์ฟเวอร์ปิงปองพบเห็น (40792) แต่คอนเทนเนอร์โต้ตอบกับพอร์ตรับฟัง (34197) ตลอดเวลา

(ฉันได้รับแจ้งว่ากระบวนการนี้เป็นรูปแบบของการทำงานของ ICE/STUN)

นั่นหมายความว่าหากคอนเทนเนอร์รับฟัง 34197 แต่ Kubernetes กำหนดเส้นทางนั้นไปยัง 20635 จากภายนอก การรับส่งข้อมูลทั้งขาเข้าและขาออกจำเป็นต้องผ่าน 20635 ทางฝั่งสาธารณะเพื่อให้ฟังก์ชันการแสดงรายการเซิร์ฟเวอร์ในตัวของแอปพลิเคชันทำงานได้

ถ้าฉันข้ามรายการเซิร์ฟเวอร์สาธารณะและเชื่อมต่อโดยตรงกับที่อยู่ IP สาธารณะของโหนดของคอนเทนเนอร์ด้วยพอร์ต 20635 มันจะทำงานได้อย่างไร้ที่ติ แต่นั่นเป็นการประนีประนอมที่ค่อนข้างใหญ่สำหรับสิ่งที่ฉันกำลังทำอยู่

เครือข่ายโฮสต์ข้ามปัญหาทั้งหมดนี้โดยอนุญาตให้คอนเทนเนอร์เปิดพอร์ตใดก็ได้ที่ต้องการบนโฮสต์โดยตรงสำหรับโฮสต์ที่เปิดเผยต่อสาธารณะแล้ว หมายความว่าไม่มีสิ่งใดบนโฮสต์ (โดยเฉพาะที่ไม่ใช่ k8s) สามารถเปลี่ยนเส้นทางทราฟฟิกคอนเทนเนอร์ผ่านชั้นพิเศษและเปลี่ยนหมายเลขพอร์ตได้ ดังนั้นเมื่อคอนเทนเนอร์เปิดพอร์ต 34197 จะได้รับพอร์ต 34197 เมื่อส่งที่พอร์ต 34197 การรับส่งข้อมูลนั้นจะถูกส่งไปที่พอร์ต 34197 เซิร์ฟเวอร์ปิงปองจะเห็นพอร์ตที่ควรจะเห็น และเนื่องจากเป็นพอร์ต UDP สาธารณะ จึงไม่สำคัญว่าใครจะส่งทราฟฟิกก่อน การจราจรก็คือการจราจร ท่าเรือก็คือท่าเรือ

อย่างไรก็ตาม หากฉันเข้าใจเอกสารอย่างถูกต้อง การเรียกใช้คอนเทนเนอร์บนสแต็กเครือข่ายของโฮสต์นั้นต้องใช้คอนเทนเนอร์ที่มีสิทธิพิเศษ ซึ่งเป็นการเข้าถึงรูทบนโฮสต์ได้อย่างมีประสิทธิภาพ ซึ่งถือว่าแย่มากในการผลิต ดังนั้น สำหรับคอนเทนเนอร์ที่ไม่มีสิทธิพิเศษ จำเป็นต้องมีโซลูชันอื่นนอกเหนือจากการใช้เครือข่ายโฮสต์ ฉันไม่พบ "วิธีแก้ปัญหาอื่น" นั้น ฉันไม่พบเอกสารใดๆ เกี่ยวกับวิธีการทำเช่นนี้ หรือแม้แต่หลักฐานว่ามีใครกำลังคิดเรื่องนี้อยู่ ฉันจะทำให้งานนี้ได้อย่างไร

Anant Swaraj avatar
cn flag
ในระบบเครือข่ายทั่วไป ไม่แนะนำให้วางขาเข้าและขาออกในพอร์ตเดียวกัน มีการจัดสรรพอร์ตแบบไดนามิกบนต้นทางเมื่อการเชื่อมต่อเริ่มต้นขึ้น ซึ่งใช้เพื่อติดตามการเชื่อมต่อและสถานะ ดังที่คุณได้กล่าวไปแล้ว âรายชื่อเซิร์ฟเวอร์สาธารณะยังคงเป็นปัญหาสำหรับคอนเทนเนอร์ที่ไม่มีสิทธิ์ใช้งาน หมายความว่าอย่างไร รายชื่อเซิร์ฟเวอร์สาธารณะหมายถึงรายชื่อ DNS หรือไม่ มันใช้งานได้กับคอนเทนเนอร์พิเศษหรือไม่? คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับการตั้งค่าได้ไหม
xenrelay avatar
au flag
แก้ไขคำถามแล้ว หวังว่าจะช่วยได้ รายละเอียดเพิ่มเติมที่ฉันไม่แน่ใจควรอยู่ในคำถาม: DNS ไม่เกี่ยวข้อง รายชื่อเซิร์ฟเวอร์สาธารณะที่ฉันพูดถึงนั้นใกล้เคียงกับฐานข้อมูลที่มี UI ที่กำหนดเอง เซิร์ฟเวอร์ส่วนกลางบางเซิร์ฟเวอร์ยอมรับการลงทะเบียนจากเซิร์ฟเวอร์เกมจริง และเซิร์ฟเวอร์เกมจริงต้องเปิดการเชื่อมต่อไว้ จากนั้นเซิร์ฟเวอร์ส่วนกลางจะอำนวยความสะดวกในการเชื่อมต่อจากไคลเอนต์ไปยังเซิร์ฟเวอร์เกมจริง ทั้งหมดนี้ทำได้ด้วยรหัสที่กำหนดเองเฉพาะสำหรับ Factorio หมายเหตุสำคัญ: Factorio ไม่ได้ออกแบบมาให้บรรจุ
James Rhoat avatar
cn flag
คุณเคยได้รับทางออกที่ดีสำหรับเรื่องนี้หรือไม่? ฉันกำลังพยายามแก้ไขปัญหานี้สำหรับแผนภูมิหางเสือของฉัน
xenrelay avatar
au flag
ไม่เชิง. หากไม่มีส่วนตรวจสอบความถูกต้องของเซิร์ฟเวอร์ ฉันจำต้องเลื่อนการตั้งค่าทั้งหมดนี้ออกไป ฉันยังจำการทดลองส่วนใหญ่ที่ฉันทำไม่ได้อีกด้วย ฉันจำได้ว่าเท่าที่ฉันบอกได้ ไม่ว่าเวทมนต์ใดๆน่าเสียดายที่ฉันไม่สามารถซื้อโหลดบาลานเซอร์ที่ใช้ได้ ดูเหมือนว่า traefik รองรับการกำหนดเส้นทาง udp ในทุกวันนี้ ซึ่งอาจไม่เป็นเช่นนั้นเมื่อ 6 เดือนที่แล้ว ดังนั้นฉันจะตรวจสอบดูว่าตอนนี้ฉันกำลังดำเนินการอยู่หรือไม่
Score:0
ธง us
  • ฉันขอแนะนำให้คุณใช้ GCP เซิร์ฟเวอร์เกม คุณสมบัติ. มันคือ เซิร์ฟเวอร์เกมเฉพาะซึ่งช่วยขจัดความเจ็บปวดจากการจัดการของคุณ โครงสร้างพื้นฐานของเซิร์ฟเวอร์เกมทั่วโลก คุณจึงสามารถมุ่งเน้นไปที่การสร้างสรรค์สิ่งที่ยอดเยี่ยม เกมเร็วขึ้นโดยไม่เพิ่มความซับซ้อนหรือประนีประนอม ประสิทธิภาพ.

  • ให้การจัดการคลัสเตอร์เซิร์ฟเวอร์เกมโดยใช้ Kubernetes สำหรับ การจัดตู้คอนเทนเนอร์และ อาโกเนส สำหรับกองเซิร์ฟเวอร์เกม การประสานและการจัดการวงจรชีวิต Agones เป็นโอเพ่นซอร์ส โครงการโฮสติ้งและปรับขนาดเซิร์ฟเวอร์เกมโดยเฉพาะที่สร้างขึ้นจาก Kubernetes พร้อมความยืดหยุ่นที่คุณต้องปรับแต่งตามความต้องการ เกมที่มีผู้เล่นหลายคนของคุณ

  • ในขณะที่สร้างเซิร์ฟเวอร์เกมโดยใช้ Agones คุณต้องเพิ่มบางอย่าง กฎไฟร์วอลล์เพื่อเปิดพอร์ต UDP ที่จำเป็นในการเชื่อมต่อกับ กลุ่ม.

  • หากต้องการสร้างเซิร์ฟเวอร์เกมโดยใช้ Agones คุณสามารถทำได้ เริ่มต้นอย่างรวดเร็ว ซึ่งจะแนะนำคุณตลอดการสร้าง GameServer ใน Kubernetes โดยใช้ ทรัพยากรที่กำหนดเอง Agones

  • ในการเรียกสถานะ GameServer ให้ใช้คำสั่งด้านล่าง มันจะให้ คุณด้วยเหตุการณ์วงจรชีวิตต่างๆ ของ GameServer

                ดู kubectl อธิบาย gameserver
    
  • หากต้องการตั้งค่า GameServer ใน GCP ด้วย Agones คุณสามารถตรวจสอบอย่างเป็นทางการได้ Google เอกสาร.

xenrelay avatar
au flag
น่าสนใจและใช้งานได้จริง ไม่ใช่เกมของฉัน ไม่ใช่ซอร์สโค้ดของฉัน แต่ความจริงที่ว่าพวกเขามีแนวทางการผสานรวมแบบไซด์คาร์นั้นดี คงจะดีถ้ามีอะไรที่ง่ายกว่านี้ที่ฉันทำได้ (service mesh, networking ACLs, ....) แต่ถ้าฉันไม่ได้ยินไอเดียเพิ่มเติม ฉันจะลองทำดู
xenrelay avatar
au flag
ฉันไม่ได้ใช้สิ่งนี้จริง ๆ ในตอนนี้เพราะมีปัญหาบางอย่างในการเชื่อมต่อกับมันและทำงานในระบบที่กว้างขึ้น แต่ฉันก็ยังข้ามปัญหานี้ไปก่อน เนื่องจากมีปัญหาอื่น ๆ ที่ทำให้รายชื่อเซิร์ฟเวอร์สาธารณะไม่สามารถทำงานได้ ฉันอาจจะกลับมาในสักวันหนึ่ง
xenrelay avatar
au flag
ยอมรับไม่ได้เพราะภายใต้ฝาครอบ Agones ใช้โหลดบาลานเซอร์ 3 ตัว ซึ่งแพงจนรับไม่ได้ในระดับของฉัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา