kubernetes 如何使用k3 d通过唯一端口公开两个应用程序/服务?

jhkqcmku  于 2024-01-07  发布在  Kubernetes
关注(0)|答案(2)|浏览(213)

**来自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群集并向负载均衡器公开应用端口

  1. ports:
  2. # map localhost to loadbalancer
  3. - port: 8080:80
  4. nodeFilters:
  5. - loadbalancer
  6. # map localhost to loadbalancer
  7. - port: 8091:80
  8. nodeFilters:
  9. - loadbalancer

字符串
1.在Kubernetes中使用“deployment.yaml”部署应用并公开容器端口

  1. ports:
  2. - containerPort: 80

  • 在kubernetes中公开服务。在这里,我尝试了两种方法。
  • 使用CLI
  1. $ kubectl create service clusterip app-1 --tcp=8080:80
  2. $ kubectl create service clusterip app-2 --tcp=8091:80

  • 使用“service.yaml”
  1. spec:
  2. ports:
  3. - protocol: TCP
  4. # expose internally
  5. port: 8080
  6. # map to app
  7. targetPort: 80
  8. selector:
  9. run: app-1

  • 使用“ingress.yaml”将服务暴露在kubernetes之外
  1. backend:
  2. service:
  3. name: app-1
  4. port:
  5. # expose from kubernetes
  6. number: 8080

cdmah0mi

cdmah0mi1#

你要么必须使用一个入口,要么必须在每个节点上打开端口(k3 d运行在docker上,所以你必须公开docker端口)

  • 在创建k3 d集群 * 期间不打开端口 *,节点端口服务将不会暴露您的应用 *

第一个月
例如,这将打开一个“外部”端口(在您的本地主机上)8080并将其Map到节点上的30080-然后您可以使用NodePort服务将该端口的流量实际连接到您的应用:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: some-service
  5. spec:
  6. ports:
  7. - protocol: TCP
  8. port: 80
  9. targetPort: some-port
  10. nodePort: 30080
  11. selector:
  12. app: pgadmin
  13. type: 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会崩溃。

  • 使用负载均衡器 * -这是类似的,你只需要打开一个端口并Map到负载均衡器。

k3d cluster create my-cluster --port 8080:80@loadbalancer
然后,您必须使用入口(否则流量无法到达)

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: hello
  5. annotations:
  6. ingress.kubernetes.io/ssl-redirect: "false"
  7. spec:
  8. rules:
  9. - http:
  10. paths:
  11. - path: /
  12. pathType: Prefix
  13. backend:
  14. service:
  15. name: hello
  16. port:
  17. number: 80


我还认为ingress只会路由http和https流量,https应该在端口443上完成,据说你可以Map端口80和端口443,但我还没能让它工作(我认为证书也需要设置)。

展开查看全部
sczxawaw

sczxawaw2#

这对我来说很完美。

3个快速步骤和它的排序!

1.第一个月

  1. kubectl create service clsuterip.....targetPort
  2. 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:
  1. k3d cluster create mycluster --registry-use registry --servers 1 --agents 1 --port '3000:3000@loadbalancer' --port '8080:80@loadbalancer' --port '9443:433@loadbalancer' --port '8082:8082@loadbalancer' --port '8081:80@loadbalancer'

字符串
上面的命令为我设置了一个典型的集群名为myclsuter,重要的部分是8080:80@loadbalancer(x80)
所以在设置这个之后它仍然不会工作,到目前为止我们所做的一切都告诉运行的k3 d集群,有**“可能是”“期望”**一个kubenetes负载均衡器在里面等待。
所以这里我指向3000到3000,8080到80和9443到433等等(在集群内部)
现在.

  1. kubectl create service clsuterip.....targetPort
  2. kubectl expose deploy my-app-deployment --name=my-app-deployment-lb --type=LoadBalancer


就是这样!您的kubernetes部署在它使用的任何端口上暴露给托管机器。

展开查看全部

相关问题