kubernetes - 在 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),我将无法连接到服务:(
因此(对我而言)任何更改都会导致重新安装所有控制器
解决方案
了解您的开发服务器没有云集群所具有的很多很酷的功能。但是有一些解决方法可以让它看起来像一个。
** ngress 限制,只能使用 80 和 443 端口访问?
是的,但您可以覆盖它,我不建议您每次需要添加/删除端口时进行大量手动工作
** 有没有办法通过 ingress 暴露这些服务
有一个更好的解决方案......为什么不使用自己的域名说 elasticsearch.Dehimb.host / grafana.Dehimb.host 等......?
使用 nginx 入口控制器(可以使用其他但下面的配置以 nginx 为例)
使用帮助作为守护程序集而不是部署来部署它,并使用下面的值文件更改 https://github.com/helm/charts/blob/master/stable/nginx-ingress/values.yaml#L52
报告节点内部IP:真
使用主机端口:真
- 现在使用 dnsmasq 设置您的 dns,可能是某个地方的一个小节点,甚至是您主机上使用此映像的容器: https ://github.com/jpillora/docker-dnsmasq
您可以在此处将 *.Dehimb.com 设置为 k8s 节点 IP。(kubectl 获取节点 -owide)
使用您的笔记本电脑使用 dns masq IP 作为其默认 ISP 名称服务器之上的第一个名称服务器
现在只需使用任意数量的域创建入口,当您从笔记本电脑浏览时:
--> 它首先使用 dnsmasq 将其解析为 k8s 节点 IP,
--> 由于设置了守护进程,每个节点上都打开了 80 端口
--> 这些端口将流量传递到具有入口配置的 nginx
--> nginx 知道将流量传递给哪个服务
听起来可能有点复杂,但是当一切正常并且一次性设置时它很有趣。
或者,您可以使用 metallb (但不那么容易弄清楚它是否会损坏)
推荐阅读
- amazon-cloudwatch - HTTP 请求上的 CloudWatch 事件触发器
- google-bigquery - bigqueryoperator 是 write_truncate 1 个事务或 2 个事务
- r - R.matlab 库中的 setFunction 执行不正确?
- bash - 有什么方法可以使用 az cli 按标签过滤 Azure 订阅?
- java - 如何用 dto 保存双向实体
- python - python/scapy - 数据包已发送但无法接收
- node.js - 为什么 NodeJS 之前的构建显示比旧版本少?
- asp.net - Azure AD - 调用 Web API 的 WebForms Web 应用程序
- reactjs - 反应自定义颜色图表
- javascript - GAME_WIDTH、GAME_HEIGHT 和 gameWidth、gameHeight