通过kubernetes群集的入口公开多个服务

通过kubernetes群集的入口公开多个服务,kubernetes,kubernetes-ingress,nginx-ingress,traefik-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,Traefik Ingress,我使用几个独立的服务运行Kubernetes单节点开发集群—使用端口80的Nginx proxy和使用端口9200的elasticsearch。有没有办法通过入口公开这些服务,让入口点具有一个LoadBalancer IP?(x.x.x.x:80和x.x.x.x:9200) 我读过关于入口限制的文章,它只能通过80和443端口访问。但是,也许存在一些变通办法 谢谢你的建议 更新 我通过创建几个入口来解决问题,并使用相同的负载平衡器。但是面对Nginx入口的一些问题,这花费了我很多时间。 使用我的

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

我读过关于入口限制的文章,它只能通过80和443端口访问。但是,也许存在一些变通办法

谢谢你的建议

更新

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


helm install ingres stable/nginx ingres--set tcp.4445=“default/nginx proxy:4445”--set tcp.8888=“default/demo:8888”--set tcp.19200=“default/elasticsearch:19200”
您可以创建任意数量的入口资源,但所有这些资源都将使用用于公开入口控制器的相同负载平衡器

您需要有kubernetes群集IP类型的服务。在服务中,您可以将
端口
设置为
80
targetPort
设置为
9200
。在入口之后,您可以说
servicePort
80

或者将
端口
目标端口
作为
9200
放在集群式服务中,并在
服务端口
中提及入口的
9200


您是对的,像nginx这样的入口只能接受端口
80
443
上的流量,但nginx是反向代理,这意味着它将终止该客户端连接并创建到
servicePort
的新连接,
servicePort
不一定需要
80
443
即它可以是
9200

您可以创建任意数量的入口资源,但所有这些资源都将使用用于公开入口控制器的相同负载平衡器

您需要有kubernetes群集IP类型的服务。在服务中,您可以将
端口
设置为
80
targetPort
设置为
9200
。在入口之后,您可以说
servicePort
80

或者将
端口
目标端口
作为
9200
放在集群式服务中,并在
服务端口
中提及入口的
9200


您是对的,像nginx这样的入口只能接受端口
80
443
上的流量,但nginx是反向代理,这意味着它将终止该客户端连接并创建到
servicePort
的新连接,
servicePort
不一定需要
80
443
即它可以是
9200

您只需要设置入口规则,将流量引导到正确的服务

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx
spec:
  rules:
  - host: nginx.example.com
    http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80

---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: elasticsearch
spec:
  rules:
  - host: elasticsearch.example.com
    http:
      paths:
      - backend:
          serviceName: elasticsearch
          servicePort: 9200

您只需要设置入口规则,将流量引导到正确的服务

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx
spec:
  rules:
  - host: nginx.example.com
    http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80

---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: elasticsearch
spec:
  rules:
  - host: elasticsearch.example.com
    http:
      paths:
      - backend:
          serviceName: elasticsearch
          servicePort: 9200

要知道,您有一个dev服务器,它没有云集群应有的那么多酷的功能。但有办法让它看起来像一个

**ngress限制,只能通过80和443端口访问

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

**有没有办法通过入口公开这些服务

有一个更好的解决办法。。你为什么不使用自己的域名,比如elasticsearch.Dehimb.host/grafana.Dehimb.host等等

  • 使用nginx入口控制器(可以使用其他控制器,但下面的配置是针对nginx的示例)

  • 使用帮助作为守护程序集而不是部署来部署它,并使用下面的值文件更改

  • reportNodeInternalIp:正确

    useHostPort:正确

  • 现在使用dnsmasq设置dns,可能是某个地方的小节点,甚至是主机上使用此映像的容器:
  • 在这里,您可以将*.Dehimb.com设置为k8s节点IP。(kubectl获取节点-owide)

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

  • 现在只需创建包含任意多个域的入口,当您从笔记本电脑浏览时:

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

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

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

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

    这听起来可能有点复杂,但它的乐趣时,所有的工作和它的一次性设置


    或者,您可以使用metallb(但不容易判断它是否损坏)

    了解您有一个开发服务器,它没有云集群所具有的许多很酷的功能。但有办法让它看起来像一个

    **ngress限制,只能通过80和443端口访问

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

    **有没有办法通过入口公开这些服务

    有一个更好的解决办法。。你为什么不使用自己的域名,比如elasticsearch.Dehimb.host/grafana.Dehimb.host等等

  • 使用nginx入口控制器(可以使用其他控制器,但下面的配置是针对nginx的示例)

  • 使用帮助作为守护程序集而不是部署来部署它,并使用下面的值文件更改

  • reportNodeInternalIp:正确

    useHostPort:正确

  • 现在使用dnsmasq设置dns,可能是某个地方的小节点,甚至是主机上使用此映像的容器:
  • 在这里,您可以将*.Dehimb.com设置为k8s节点IP。(库贝特)