首页 > 解决方案 > 在 kubernetes 集群中通过 Ingress 公开多个服务

问题描述

我运行具有多个独立服务的 Kubernetes 单节点开发集群——端口为 80 的 Nginx 代理和端口为 9200 的弹性搜索。有没有办法通过入口公开这些服务,通过一个 LoadBalancer IP 获得入口点?(xxxx:80 和 xxxx:9200)

我读到了入口限制,只能通过 80 和 443 端口访问。但是,也许存在一些解决方法?

谢谢任何建议

更新

我通过创建多个入口并使用相同的负载均衡器解决了我的问题。但是遇到了 Nginx 入口的一些问题,这花费了我很多时间。使用我的方法的最简单方法是使用 helm 安装入口控制器并使用公开的服务和端口对其进行参数化

helm install ingress stable/nginx-ingress --set tcp.4445="default/nginx-proxy:4445" --set tcp.8888="default/demo:8888" --set tcp.19200="default/elasticsearch:19200"

在此过程中,将创建必要的资源,包括带有端口/服务的配置映射。然后我们只需要为每个服务创建入口。请注意,该服务必须是 ClusterIP。

但是,如果以后您想公开一些额外的服务并手动添加所有内容(创建配置映射,更新入口服务,创建入口,甚至重新创建 nginx pod),我将无法连接到服务:(

因此(对我而言)任何更改都会导致重新安装所有控制器

标签: kuberneteskubernetes-ingressnginx-ingresstraefik-ingress

解决方案


了解您的开发服务器没有云集群所具有的很多很酷的功能。但是有一些解决方法可以让它看起来像一个。

** ngress 限制,只能使用 80 和 443 端口访问?

是的,但您可以覆盖它,我不建议您每次需要添加/删除端口时进行大量手动工作

** 有没有办法通过 ingress 暴露这些服务

有一个更好的解决方案......为什么不使用自己的域名说 elasticsearch.Dehimb.host / grafana.Dehimb.host 等......?

  1. 使用 nginx 入口控制器(可以使用其他但下面的配置以 nginx 为例)

  2. 使用帮助作为守护程序集而不是部署来部署它,并使用下面的值文件更改 https://github.com/helm/charts/blob/master/stable/nginx-ingress/values.yaml#L52

报告节点内部IP:真

使用主机端口:真

  1. 现在使用 dnsmasq 设置您的 dns,可能是某个地方的一个小节点,甚至是您主机上使用此映像的容器: https ://github.com/jpillora/docker-dnsmasq

您可以在此处将 *.Dehimb.com 设置为 k8s 节点 IP。(kubectl 获取节点 -owide)

  1. 使用您的笔记本电脑使用 dns masq IP 作为其默认 ISP 名称服务器之上的第一个名称服务器

  2. 现在只需使用任意数量的域创建入口,当您从笔记本电脑浏览时:

--> 它首先使用 dnsmasq 将其解析为 k8s 节点 IP,

--> 由于设置了守护进程,每个节点上都打开了 80 端口

--> 这些端口将流量传递到具有入口配置的 nginx

--> nginx 知道将流量传递给哪个服务

听起来可能有点复杂,但是当一切正常并且一次性设置时它很有趣。

或者,您可以使用 metallb (但不那么容易弄清楚它是否会损坏)


推荐阅读