gpt4 book ai didi

kubernetes - Kubernetes入口以获取动态URL

转载 作者:行者123 更新时间:2023-12-02 12:03:22 26 4
gpt4 key购买 nike

我正在开发一个应用程序,允许用户在有限的生存时间内在自己的沙箱中玩耍。从概念上讲,可以认为用户正在玩Pong游戏。用户可以与main /上托管的Web界面进行交互以启动Pong游戏。每次Pong游戏都将存在于自己的广告连播中。由于每个游戏都有一定的生存期,因此可以通过单个Pod作为Kubernetes作业按需(通过Kubernetes API)动态创建Pod。因此,Pong和Pod的游戏之间存在一对一的关系。至此,我已经弄清楚了。

我的问题是,如何设置一个入口以将动态创建的URL(例如main / game1)映射到相应的Pod?也就是说,如果用户通过主界面启动游戏,我希望将他重定向到托管他的游戏的相应pod的URL。

我可以预分配一组URL,检查它们是否有 Activity 的作业,如果没有,则重定向,但不能很好地扩展。我认为动态分配URL是Kubernetes中的常见模式,因此必须有一种标准的方法来做到这一点。我已经看过使用nginx-ingress了,但这不是必须的。

最佳答案

此外,我还为您提供了关于minikube的小样演示,该演示提供了一个有效的Ingress Class Controller (通过minikube addons enable ingress启用)。

复制模拟游戏的多个Deployment。

kubectl create deployment deployment-1 --image=nginxdemos/hello
kubectl create deployment deployment-2 --image=nginxdemos/hello
kubectl create deployment deployment-3 --image=nginxdemos/hello
kubectl create deployment deployment-4 --image=nginxdemos/hello
kubectl create deployment deployment-5 --image=nginxdemos/hello

服务资源相同:
kubectl create service clusterip deployment-1 --tcp=80:80
kubectl create service clusterip deployment-2 --tcp=80:80
kubectl create service clusterip deployment-3 --tcp=80:80
kubectl create service clusterip deployment-4 --tcp=80:80
kubectl create service clusterip deployment-5 --tcp=80:80

最后,是时候进入Ingress了,但是由于我们没有可用的子命令 create,所以我们必须非常谨慎。
for number in `seq 5`; do echo "
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: deployment-$number
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /game$number
backend:
serviceName: deployment-$number
servicePort: 80
" | kubectl create -f -; done

现在您有了Pod,Service和Ingress:显然,您必须使用Kubernetes API复制相同的结果,但是,正如我在注释中所建议的那样,您应该创建一个Ingress资源并以动态方式相应地更新Path子项。

但是,如果尝试模拟伪造 Host header 的cURL调用,则可以看到工作结果:
# curl `minikube ip`/game2 -sH 'Host: hello-world.info'|grep -i server
<p><span>Server&nbsp;address:</span> <span>172.17.0.5:80</span></p>
<p><span>Server&nbsp;name:</span> <span>deployment-2-5b98b954f6-8g5fl</span></p>

# curl `minikube ip`/game4 -sH 'Host: hello-world.info'|grep -i server
<p><span>Server&nbsp;address:</span> <span>172.17.0.7:80</span></p>
<p><span>Server&nbsp;name:</span> <span>deployment-4-767ff76774-d2fgj</span></p>

您也可以看到Pod IP和名称。

关于kubernetes - Kubernetes入口以获取动态URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com