因此,在过去的几天里,我试图找到一种方法来动态附加入口名(如game-1.myapp.com)来解决Kubernetes上的蒸汽专用服务器的TCP和UDP问题。我附上了下面的图表,说明我是如何规划的,但我遇到了一些问题。
我可以使用Kubernetes API动态地为每个单独的游戏服务器创建名称空间、Pods (由状态集控制)、PVCs、服务和插件。每个游戏服务器都位于自己的名称空间中,完全由其他服务器分开。我保证服务器在引擎盖下运行,Pod也在运行和活动,日志很好。
当我需要将状态集服务分配给一个能够通过使用命名空间DNS来持续响应TCP/UDP通信量的侵入时,我就被锁定了,它将路由到集群的(在Minikube中;为了生产应该使用ALB/北草坪会议大楼,AFAIK)。
不知何故,我需要一种将game-xxxxx.myapp.com导入到特定game-xxxxx名称空间的荚的方法。它们是否会附加端口并不重要。
为此,我只需调用myapp.com的DNS解决程序,并在需要时添加或删除A Records即可。这似乎没问题,但我发现可以根据现有的服务使用ExternalDNS (https://github.com/bitnami/charts/tree/master/bitnami/external-dns)自动完成这一任务。
我尝试过的,还没有运气:
尼克斯
设置NGINX,但我必须为每个服务定义公开的端口。根据他们的文档(https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services),每次修改该ConfigMap并重新创建NGINX是过度使用的做法,因为可能会有许多更改,这似乎不可行。另外,我非常怀疑NGINX是否会在负载过重的情况下变得轻而易举,我发现它更适合web服务器,而不是游戏服务器。
此外,我可能需要一种方法,以确保我可以有重复的端口。例如,我不能在NGINX中将相同的28015端口分配给许多其他服务器,即使它们位于不同的名称空间。如果我使用Agones (https://github.com/googleforgames/agones/blob/release-1.9.0/examples/gameserver.yaml)来分配随机端口,那么在某个时候,我可能会用光它们来分配。
特雷菲克
我试过使用Traefik,但没有运气。IngressRoute允许从路由器到和EntryPoint的TCP/UDP路由,而不是将其路由到分配的服务。我不太清楚它是如何工作的,我试着为服务设置注释&定义入口点,但它仍然拒绝工作:https://doc.traefik.io/traefik/routing/providers/kubernetes-crd/#kind-ingressroutetcp。
阿戈内斯
Agones应该在游戏服务器上工作,并且它支持服务端口的TCPUDP协议,但同样,这方面没有任何进展。
流
我在下面贴出了关于事情应该如何运作的图表。我还有下面的YAML文件,它将创建状态集、PVC和服务。您可以清楚地看到,我尝试过ExternalName设置,因此也许我可以将Minikube设置为该名称,并且能够再次连接,但没有运气:
apiVersion: v1
kind: Service
metadata:
name: rust-service
labels:
game: rust
spec:
# type: ExternalName
# externalName: rust-1.rust.coal.app
# clusterIP: ""
selector:
game: rust
ports:
- name: rust-server-tcp
protocol: TCP
port: 28015
targetPort: 28015
- name: rust-server-udp
protocol: UDP
port: 28015
targetPort: 28015
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rust-server
spec:
selector:
matchLabels:
game: rust
replicas: 1
serviceName: rust-service
template:
metadata:
name: rust-server
labels:
game: rust
spec:
containers:
- name: rust
image: didstopia/rust-server:latest
ports:
- name: rust-server-tcp
protocol: TCP
containerPort: 28015
- name: rust-server-udp
protocol: UDP
containerPort: 28015
volumeClaimTemplates:
- metadata:
name: local-disk
spec:
resources:
requests:
storage: "10Gi"
accessModes: ["ReadWriteOnce"]编辑:凹凸
发布于 2020-11-27 10:13:04
A副词! 如果使用/提到入口资源,它指的是
HTTP/HTTPS流量。
您发布的图表看起来是使用Service类型LoadBalancer的好机会。
LoadBalancer类型的服务用于处理外部TCP/UDP流量(第4层)。
免责声明 此解决方案只支持一个在时间协议上,或
TCP或UDP. 要使这两个协议位于同一个端口上,您需要回过头来使用Service类型的NodePort(它在从30000到32767的节点上分配端口)。 通过以下链接,您可以了解有关创建使用NodePort类型服务的云不可知论的NodePort的更多信息:
在此设置中,不需要Ingress控制器(如Traefik或Nginx ),因为它们只是在Client和Pod之间的一个额外步骤。
在您的LoadBalancer定义中已经有这样的YAML示例(我稍微修改了它):
apiVersion: v1
kind: Service
metadata:
name: rust-service
labels:
game: rust
spec:
type: LoadBalancer # <-- THE CHANGE
selector:
game: rust
ports:
- name: rust-server-tcp
protocol: TCP
port: 28015
targetPort: 28015如果您打算将AWS与它的EKS一起使用,请参阅它的文档:
可能设置的示例(步骤):
namespace“游戏-X-命名空间”deployment“游戏-X-部署”service of LoadBalancer ”的“-X-”,指向“游戏-X-部署”。DNS 创建一个记录,将“-X.com”指向在前一步中创建的的IP。每个LoadBalancer都有自己的IP和与其关联的DNS名称,如下所示:
awesome-game.com与IP的123.123.123.123和端口连接到28015/TCPmagnificent-game.com与IP的234.234.234.234和端口连接到28015/TCP我认为这个创建专用蒸汽服务器的媒体指南可以证明是有用的:
追加资源:
发布于 2020-11-30 09:48:55
因此,正如之前的回复所述,入口是用于网络流量的。我没有使用Ingresses实现工作设置,但是我成功地使用了NodePort服务,并确保使用外部DNS创建DNS记录,该记录将自定义子域名绑定到正确的IP:https://github.com/kubernetes-sigs/external-dns。
现在,问题仍然存在于必须创建一个部署、等待Pod被分配、并确保吊舱与该节点连接在一起,或者在节点被抽干时,以某种方式保持同一个节点IP (一个非短暂的IP),只要部署不被删除,这个节点IP就会一直与吊舱保持在一起。通过这种方式,当我需要一个现有的部署来部署豆荚时,我应该确保标记节点。
https://stackoverflow.com/questions/64770916
复制相似问题