首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用k3d在唯一端口上公开两个应用程序/服务?

如何使用k3d在唯一端口上公开两个应用程序/服务?
EN

Stack Overflow用户
提问于 2021-07-27 15:33:41
回答 1查看 2.3K关注 0票数 1

* k3d GitHub Discussion:https://github.com/rancher/k3d/discussions/690

我试图在两个端口上公开两个服务。作为另一种选择,我也想知道如何在相同的端口上公开它们,并使用不同的路径。我尝试了几篇文章和许多配置。请告诉我k3d + k3s / kubernetes + traefik (+ klipper?)的网络问题出在哪里。

我发布了一个例子:https://github.com/ericis/k3d-networking

目标是:

  • 通过端口8080在主机上到达"app-1“
  • 通过8091端口到达主机上的"app-2“

步骤

*见:https://github.com/ericis/k3d-networking

  1. 配置k3d集群并公开应用程序端口以加载均衡器 端口:#映射本地主机到负载平衡器-端口: 8080:80 nodeFilters:-负载平衡器#映射本地主机到负载平衡器-端口: 8091:80 nodeFilters:-负载平衡器
  2. 在Kubernetes中部署带有"deployment.yaml“的应用程序,并公开集装箱港口 端口:- containerPort: 80
  3. 在kubernetes中公开服务。我试过两种方法。
代码语言:javascript
复制
- Using CLI

$ kubectl创建服务集群应用程序-1-tcp=8080:80$ kubectl创建服务集群应用程序2-tcp=8091:80

代码语言:javascript
复制
- Using "service.yaml"

规范:端口:协议: TCP #公开内部端口: 8080 #映射到app targetPort: 80选择器:运行: app-1

  1. 使用"ingress.yaml“公开kubernetes以外的服务 后端:服务:名称: app-1端口:# expose from kubernetes编号: 8080
EN

回答 1

Stack Overflow用户

发布于 2021-07-30 13:56:50

您要么必须使用入口,要么必须在每个节点上打开端口(k3d运行在码头上,因此您必须公开对接端口)

如果在创建k3d集群期间不打开端口,nodeport服务将不会公开应用程序。

k3d cluster create mycluster -p 8080:30080@agent[0]

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

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
 name: some-service
spec:
 ports:
 - protocol: TCP
   port: 80
   targetPort: some-port
   nodePort: 30080
 selector:
   app: pgadmin
 type: NodePort

您还可以在服务器节点上打开端口,如:k3d cluster create mycluster -p 8080:30080@server[0]

您的应用程序可以被安排在任何节点上运行,如果您强制一个pod出现在特定的节点上(假设您在代理上打开某个端口并设置您的.yaml文件来处理该端口),出于某种原因,本地路径牧场主存储类只是中断,不会为您的请求创建一个持久的卷。你得有点幸运,让你的吊舱被安排在你需要它的地方。(如果您找到了一种方法来调度特定节点上的豆荚而不破坏存储提供程序,请告诉我)

您还可以映射整个端口范围,比如:k3d cluster create mycluster --servers 1 --agents 1 -p "30000-30100:30000-30100@server[0]",但是要小心打开的端口数量,如果打开太多,k3d就会崩溃。

使用负载平衡器-类似的,您只需打开一个端口&映射到负载均衡器。

k3d cluster create my-cluster --port 8080:80@loadbalancer

然后,你必须使用入口,(否则交通将达不到)

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 80

我还认为入口只会路由http & https流量,https应该在端口443上完成,据推测您可以同时映射端口80和端口443,但是我还无法做到这一点(我认为也需要设置证书)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68547804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档