* k3d GitHub Discussion:https://github.com/rancher/k3d/discussions/690
我试图在两个端口上公开两个服务。作为另一种选择,我也想知道如何在相同的端口上公开它们,并使用不同的路径。我尝试了几篇文章和许多配置。请告诉我k3d + k3s / kubernetes + traefik (+ klipper?)的网络问题出在哪里。
我发布了一个例子:https://github.com/ericis/k3d-networking
目标是:
步骤
*见:https://github.com/ericis/k3d-networking
k3d集群并公开应用程序端口以加载均衡器
端口:#映射本地主机到负载平衡器-端口: 8080:80 nodeFilters:-负载平衡器#映射本地主机到负载平衡器-端口: 8091:80 nodeFilters:-负载平衡器- Using CLI$ kubectl创建服务集群应用程序-1-tcp=8080:80$ kubectl创建服务集群应用程序2-tcp=8091:80
- Using "service.yaml"规范:端口:协议: TCP #公开内部端口: 8080 #映射到app targetPort: 80选择器:运行: app-1
发布于 2021-07-30 13:56:50
您要么必须使用入口,要么必须在每个节点上打开端口(k3d运行在码头上,因此您必须公开对接端口)
如果在创建k3d集群期间不打开端口,nodeport服务将不会公开应用程序。
k3d cluster create mycluster -p 8080:30080@agent[0]
例如,这将打开一个“外部”端口(在您的本地主机上) 8080,并将其映射到节点上的30080 -然后您可以使用NodePort服务将流量从该端口连接到您的应用程序:
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
然后,你必须使用入口,(否则交通将达不到)
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,但是我还无法做到这一点(我认为也需要设置证书)。
https://stackoverflow.com/questions/68547804
复制相似问题