kubernetes - 在 kubernetes 集群中通过 Ingress 公开多个服务

标签 kubernetes kubernetes-ingress nginx-ingress traefik-ingress

我运行带有几个独立服务的 Kubernetes 单节点开发集群——带有端口 80 的 Nginx 代理和带有端口 9200 的 elasticsearch。有没有什么方法可以通过入口公开这些服务,让入口点具有一个 LoadBalancer IP? (x.x.x.x:80 和 x.x.x.x:9200)

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

感谢任何建议

更新

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

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。

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

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

最佳答案

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

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

Yes but you can overwrite it, I wouldnt suggest as its a lot of manual work everytime you need to add / remove port

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

There is a much better solution instead.. why dont you use your own domain name say elasticsearch.Dehimb.host / grafana.Dehimb.host etc... ?

  1. 使用nginx ingress controller(可以使用其他的,但下面的配置以nginx为例)

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

reportNodeInternalIp: true

使用主机端口:真

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

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

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

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

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

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

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

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

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

或者你可以使用 metallb(但如果它坏了就不容易弄清楚)

关于kubernetes - 在 kubernetes 集群中通过 Ingress 公开多个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62026650/

相关文章:

google-cloud-platform - GKE : ingress loadbalancer does not use configured static IP

Kubernetes 入口 : Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io"

nginx - 建议为Kubernetes 1.17推荐哪个版本的Nginx Ingress Controller

postgresql - Postgres 用户未创建 Kubernetes

kubernetes - 如何将 kubernetes pods 标签添加到普罗米修斯指标?

kubernetes - Istio 中的 IP 黑名单

kubernetes - Nginx-ingress 上的默认证书

kubernetes - Kubernetes 上的 Redis 哨兵 HA

Kubernetes - 服务之间的通信

nginx - Helm Nginx Ingress - 如何在 "helm install"命令中指定外部 IP