Điểm:0

Định tuyến lưu lượng truy cập udp vào và ra đến cùng một cổng trong kubernetes

lá cờ au

Đây là phần tiếp theo của một câu hỏi trước đây tôi đã hỏi, nhưng với cách hỏi/tiếp cận khác. Trong trường hợp có vấn đề, tôi đang sử dụng GKE, nhưng tôi hy vọng sẽ có câu trả lời về đám mây.

Tôi đang cố chạy vùng chứa factoriotools/factorio, nhưng ứng dụng có một số yêu cầu cụ thể do sử dụng chức năng liệt kê máy chủ công cộng dành riêng cho ứng dụng, như đã thấy trong nhiều trò chơi điện tử sử dụng máy chủ do người dùng lưu trữ.

Cho đến nay, tôi đã có thể khiến mọi thứ hoạt động với mạng máy chủ và kết nối trực tiếp để hoạt động với Dịch vụ NodePort.Tuy nhiên, chức năng liệt kê máy chủ công cộng của ứng dụng vẫn là một vấn đề đối với các vùng chứa không có đặc quyền.

Đây là cách Factorio tìm ra cách quản lý danh sách máy chủ công cộng:

  • Vùng chứa lắng nghe trên một ổ cắm, giả sử Cổng UDP 34197.
  • Dịch vụ NodePort định tuyến công khai lưu lượng đến 20635.
  • Vùng chứa gửi lệnh ping qua cổng lắng nghe của nó (34197) tới máy chủ bóng bàn và máy chủ bóng bàn trả lời bằng địa chỉ IP và cổng mà nó nhận được lệnh ping từ đó. Ngoài k8s, đây vẫn là cổng 34197.
  • Sau đó, vùng chứa sẽ sử dụng thông tin này để đăng ký với danh sách máy chủ. Địa chỉ IP, cổng, tên máy chủ và một số thông tin khác.
  • Trong GKE, quả bóng bàn được định tuyến đến một cổng không sử dụng tùy ý (ví dụ: 40792).
  • Bộ chứa tin rằng nó đang lắng nghe trên một cổng khác với cổng tôi đã thiết lập (20534), sau đó đăng ký với danh sách máy chủ công cộng bằng cổng sai (40792, vì máy chủ bóng bàn đã thông báo như vậy).
  • Mọi nỗ lực kết nối từ danh sách máy chủ công cộng đều thất bại; máy khách tin rằng máy chủ đang lắng nghe trên cổng mà máy chủ bóng bàn chứng kiến ​​(40792), nhưng vùng chứa đã tương tác với cổng nghe của nó (34197) trong suốt thời gian qua.

(Tôi được biết quá trình này là một biến thể của cách thức hoạt động của ICE/STUN)

Vì vậy, điều đó có nghĩa là nếu vùng chứa lắng nghe trên 34197, nhưng Kubernetes định tuyến đến 20635 bên ngoài, thì cả lưu lượng truy cập vào và ra cần phải đi qua 20635 ở phía công khai để chức năng liệt kê máy chủ tích hợp của ứng dụng hoạt động.

Nếu tôi bỏ qua danh sách máy chủ công cộng và kết nối trực tiếp với địa chỉ IP công khai của nút vùng chứa bằng cổng 20635, thì nó sẽ hoạt động hoàn hảo. Nhưng đó là một sự thỏa hiệp khá lớn đối với những gì tôi đang làm.

Mạng máy chủ bỏ qua toàn bộ vấn đề này bằng cách cho phép vùng chứa mở trực tiếp bất kỳ cổng nào nó muốn trên máy chủ.Đối với các máy chủ đã được hiển thị công khai, điều này có nghĩa là không có gì trên máy chủ (đặc biệt là k8) có thể định tuyến lại lưu lượng vùng chứa qua các lớp bổ sung và thay đổi số cổng. Vì vậy, khi bộ chứa mở cổng 34197, nó sẽ nhận được cổng 34197. Khi nó gửi trên cổng 34197, lưu lượng đó được gửi trên cổng 34197. Máy chủ bóng bàn sẽ thấy cổng mà nó phải thấy. Và bởi vì đó là một cổng UDP công khai, nên việc ai gửi lưu lượng trước không quan trọng; traffic là traffic, port là port.

Tuy nhiên, nếu tôi hiểu chính xác các tài liệu, thì việc chạy một vùng chứa trên ngăn xếp mạng của Máy chủ lưu trữ yêu cầu một vùng chứa đặc quyền, đây là quyền truy cập root hiệu quả trên Máy chủ, điều này rất tệ trong sản xuất. Vì vậy, đối với các vùng chứa không có đặc quyền, cần có một giải pháp khác ngoài việc dựa vào mạng máy chủ. Tôi không thể tìm thấy "giải pháp khác" đó. Tôi không thể tìm thấy tài liệu ở bất cứ đâu về cách thực hiện việc này hoặc thậm chí bằng chứng cho thấy bất kỳ ai đang nghĩ về nó. Làm thế nào để tôi thực hiện công việc này?

Anant Swaraj avatar
lá cờ cn
Trong mạng nói chung, không nên đặt Inbound và Outbound trên cùng một cổng. Có sự phân bổ động các cổng trên nguồn khi bắt đầu kết nối, được sử dụng để theo dõi kết nối và trạng thái của nó. Như bạn đã đề cập, “danh sách máy chủ công cộng vẫn là một vấn đề đối với các vùng chứa không có đặc quyền điều này có nghĩa là gì? Danh sách máy chủ công cộng có nghĩa là danh sách DNS? Nó có hoạt động cho vùng chứa đặc quyền không? Bạn có thể giải thích thêm về thiết lập?
xenrelay avatar
lá cờ au
Câu hỏi được chỉnh sửa, hy vọng nó sẽ giúp. Thông tin chi tiết khác mà tôi không chắc chắn nên có trong câu hỏi: DNS không liên quan. Danh sách máy chủ công cộng mà tôi đang nói đến gần với cơ sở dữ liệu hơn với giao diện người dùng tùy chỉnh. Một số máy chủ tập trung chấp nhận đăng ký từ các máy chủ trò chơi thực tế và các máy chủ trò chơi thực tế phải giữ kết nối mở. Sau đó, máy chủ tập trung sẽ tạo điều kiện kết nối từ máy khách đến máy chủ trò chơi thực tế. Tất cả điều này được thực hiện với mã tùy chỉnh dành riêng cho Factorio. Lưu ý quan trọng: Factorio không được thiết kế để đóng gói.
James Rhoat avatar
lá cờ cn
Bạn đã bao giờ nhận được một giải pháp tốt cho việc này? Tôi hiện đang cố gắng giải quyết vấn đề này cho biểu đồ mũ lái của mình.
xenrelay avatar
lá cờ au
Không thực sự. Không có phần xác thực máy chủ, tôi buộc phải hoãn toàn bộ quá trình thiết lập này. Tôi cũng không nhớ hầu hết các thử nghiệm mà tôi đã làm. Tôi nhớ rằng theo như những gì tôi có thể nói, bất cứ điều gì ma thuật mà Agnes đang làm đều có tác dụng.Thật đáng tiếc là tôi không đủ khả năng mua bộ cân bằng tải mà nó sử dụng. Có vẻ như traefik hỗ trợ định tuyến udp ngày nay, điều này có thể không xảy ra cách đây 6 tháng, vì vậy đó là điều tôi sẽ kiểm tra nếu tôi đang làm việc này ngay bây giờ.
Điểm:0
lá cờ us
  • Tôi khuyên bạn nên sử dụng GCP máy chủ trò chơi tính năng. Nó là một máy chủ trò chơi chuyên dụng giúp bạn không phải quản lý cơ sở hạ tầng máy chủ trò chơi toàn cầu, vì vậy bạn có thể tập trung vào việc tạo ra những trò chơi tuyệt vời trò chơi nhanh hơn mà không làm tăng độ phức tạp hoặc ảnh hưởng đến hiệu suất.

  • Nó cung cấp khả năng quản lý các cụm máy chủ trò chơi bằng Kubernetes cho điều phối container và đau đớn cho đội máy chủ trò chơi điều phối và quản lý vòng đời. Agones là một mã nguồn mở dự án lưu trữ và mở rộng máy chủ trò chơi chuyên dụng được xây dựng dựa trên Kubernetes với tính linh hoạt, bạn cần điều chỉnh nó theo nhu cầu của trò chơi nhiều người chơi của bạn.

  • Trong khi tạo máy chủ trò chơi bằng Agones, bạn phải thêm một số quy tắc tường lửa để mở các cổng UDP cần thiết để kết nối với cụm.

  • Để tạo máy chủ trò chơi bằng Agones, bạn có thể xem qua Bắt đầu nhanh hướng dẫn bạn cách tạo GameServer trong Kubernetes bằng cách sử dụng Đã bỏ qua tài nguyên tùy chỉnh.

  • Để tìm nạp trạng thái GameServer, hãy sử dụng lệnh bên dưới. Nó sẽ cung cấp bạn với các sự kiện vòng đời khác nhau của GameServer.

                xem kubectl mô tả gameserver
    
  • Để thiết lập GameServer trong GCP với Agones, bạn có thể kiểm tra bản chính thức Google tài liệu.

xenrelay avatar
lá cờ au
Thú vị và khả thi. Không phải trò chơi của tôi, không phải mã nguồn của tôi, nhưng thực tế là họ có cách tiếp cận tích hợp dựa trên sidecar là tốt. Sẽ thật tuyệt nếu tôi có thể làm điều gì đó đơn giản hơn (lưới dịch vụ, mạng ACL, ....), nhưng nếu tôi không nghe thêm ý tưởng nào nữa, tôi sẽ thử.
xenrelay avatar
lá cờ au
Tôi thực sự không sử dụng điều này ngay bây giờ vì có một số vấn đề khiến nó được kết nối và hoạt động trong hệ thống rộng hơn, nhưng hiện tại tôi cũng đang bỏ qua vấn đề này hoàn toàn vì có những vấn đề khác ngăn danh sách máy chủ công cộng hoạt động. Có lẽ tôi sẽ trở lại vấn đề này vào một ngày nào đó.
xenrelay avatar
lá cờ au
Không được chấp nhận vì dưới vỏ bọc, Agones sử dụng 3 bộ cân bằng tải, đắt đến mức không thể chấp nhận được ở quy mô của tôi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.