**来自k3 d GitHub讨论:https://github.com/rancher/k3d/discussions/690 *
我试图通过两个端口暴露两个服务。作为替代方案,我也想知道如何通过相同的端口暴露它们并使用不同的路由。我已经尝试了几篇文章和很多配置。让我知道我在k3 d + k3 s/ kubernetes + traefik(+ klipper?)的网络连接中出错的地方.
我发布了一个例子:https://github.com/ericis/k3d-networking
目标:
- 通过端口8080到达主机上的“app-1”
- 通过端口8091到达主机上的“app-2”
步骤
**参见:files in repo *
1.配置k3d
群集并向负载均衡器公开应用端口
ports:
# map localhost to loadbalancer
- port: 8080:80
nodeFilters:
- loadbalancer
# map localhost to loadbalancer
- port: 8091:80
nodeFilters:
- loadbalancer
字符串
1.在Kubernetes中使用“deployment.yaml”部署应用并公开容器端口
ports:
- containerPort: 80
型
- 在kubernetes中公开服务。在这里,我尝试了两种方法。
- 使用CLI
$ kubectl create service clusterip app-1 --tcp=8080:80
$ kubectl create service clusterip app-2 --tcp=8091:80
型
- 使用“service.yaml”
spec:
ports:
- protocol: TCP
# expose internally
port: 8080
# map to app
targetPort: 80
selector:
run: app-1
型
- 使用“ingress.yaml”将服务暴露在kubernetes之外
backend:
service:
name: app-1
port:
# expose from kubernetes
number: 8080
型
2条答案
按热度按时间cdmah0mi1#
你要么必须使用一个入口,要么必须在每个节点上打开端口(k3 d运行在docker上,所以你必须公开docker端口)
第一个月
例如,这将打开一个“外部”端口(在您的本地主机上)8080并将其Map到节点上的30080-然后您可以使用NodePort服务将该端口的流量实际连接到您的应用:
字符串
您也可以打开服务器节点上的端口,如:
k3d cluster create mycluster -p 8080:30080@server[0]
您的应用程序可以被安排在任何节点上运行,如果您强制pod出现在特定节点上,(假设您在代理[0]上打开了某个端口,并将.yaml文件设置为使用该端口),由于某些原因,本地路径Rancher存储类只是中断,不会为您的声明创建持久卷。让你的pod在你需要的地方得到调度。(如果你找到了一种在特定节点上调度pod而不破坏存储供应的方法,让我知道)
你也可以Map一系列的端口,比如:
k3d cluster create mycluster --servers 1 --agents 1 -p "30000-30100:30000-30100@server[0]"
,但是要小心你打开的端口数量,如果你打开太多,k3 d会崩溃。k3d cluster create my-cluster --port 8080:80@loadbalancer
个然后,您必须使用入口(否则流量无法到达)
型
我还认为ingress只会路由http和https流量,https应该在端口
443
上完成,据说你可以Map端口80
和端口443
,但我还没能让它工作(我认为证书也需要设置)。sczxawaw2#
这对我来说很完美。
3个快速步骤和它的排序!
1.第一个月
kubectl create service clsuterip.....targetPort
个kubectl expose deploy my-app-deployment --name=my-app-deployment-lb --type=LoadBalancer
个背景/解释
我也有它的工作很好,然后我猜与版本的变化.它只是停止,但设置是类似的只有一个神奇的命令修复它,在最后。
在我的ubuntu(VPS - nginx):它只处理80:433(正常)我只是代理(ssl wss什么)
https://dev.domain.com:443 --> http://127.0.0.1:3000 or http://localhost:3000 any:port in the cluster I want to point to - so i run:
字符串
上面的命令为我设置了一个典型的集群名为myclsuter,重要的部分是8080:80@loadbalancer(x80)
所以在设置这个之后它仍然不会工作,到目前为止我们所做的一切都告诉运行的k3 d集群,有**“可能是”或“期望”**一个kubenetes负载均衡器在里面等待。
所以这里我指向3000到3000,8080到80和9443到433等等(在集群内部)
现在.
型
就是这样!您的kubernetes部署在它使用的任何端口上暴露给托管机器。