2017-08-25 49 views
1

前幾天我一直在玩Azure容器服務上的Kubernetes集羣,目標是在其上託管虛幻遊戲服務器。Kubernetes - 使用UDP託管遊戲服務器。如何將流量連接/路由到POD?

經過幾天的實驗和幾個關於SO的問題,我已經到了可以在單個節點上託管少量服務器並與客戶端連接的地步。

在我的最新設置中,我直接使用hostNetwork部署了POD:true。 添加了帶有公共IP的LoadBalancer,並將來自代理節點的手動映射端口部署到NAT負載平衡器。

雖然我不完全相信這是很好的解決方案。雖然它可以自動化,但我不確定它在負載下是否可擴展。

  1. 我需要等到創建pod。我可以假設需要什麼端口,因爲7777端口上的虛幻開放,然後增加一個,直到它找到一個端口。

  2. 一旦創建了pod,我需要將NAT端口轉發添加到負載均衡器(但我不能這樣做,直到我知道哪個Node pod位於此處)。

  3. 向負載平衡器添加新的NAT規則需要時間。相當多的時間,從我目前看到的。

  4. 我正在使用外部負載平衡器在特定的POD上路由流量。從Kubernetes內部來做它可能會更好。

有幾件事情,必須滿足:

  1. 客戶端連接到服務器低谷UDP。

  2. 最好把公有IP的數量降到最低。

將UDP通過UDP直接暴露給外部客戶端的最佳方式是什麼?端口轉發並不是那麼糟糕的選擇(儘管我可以通過單個公共IP暴露的POD數量有限,至少我認爲是這樣)。 我想要的是將客戶端直接連接到服務器,或將客戶端流量路由到特定的POD(即路由器 - >服務 - > pod場景是可以接受的,但不那麼間接更好)。

我已閱讀本: http://www.compoundtheory.com/scaling-dedicated-game-servers-with-kubernetes-part-1-containerising-and-deploying/ 而且它的信息來源不錯,雖然我不知道如果服務器連接槽UDP(這是必須具備的要求對我來說)。或者統一客戶端如何直接連接到內部POD IP。

回答

1

我建議你看看Ingress控制器, 我知道Nginx的一個支持UDP路由。

所以,你用負載均衡器IP公開Nginx-ingress並且你創建了UDP configmap來直接在你的pod上路由。

你應該試試看。

https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx/examples/udp

+0

嘿謝謝。 我以前見過它,但我無法弄清楚我應該在configmap中放置什麼(或者說,它如何讓我從客戶端到服務器)。 看着互聯網,我無法找到任何使用nginx + config map + udp的真實世界示例。 雲你給我一些裸骨(但比github更復雜)示例什麼要添加到configmap和如何連接到pod? –

+0

我從來沒有使用過Nginx的Ingress for UDP,似乎只有一個Nginx可以處理一個「UDP虛擬主機」而不是HTTP服務,你可以服務很多不同的服務。 您需要先創建nginx入口的副本控制器,然後創建configmap並修改值部分以匹配您的UDP k8s服務。 使用externalIP或LoadBalancerIP暴露的Nginx應該有所斬獲。 –

相關問題