Nginx 如何将多个服务映射到一个Kubernetes入口路径?

Nginx 如何将多个服务映射到一个Kubernetes入口路径?,nginx,kubernetes,google-cloud-platform,load-balancing,Nginx,Kubernetes,Google Cloud Platform,Load Balancing,如何设置Kubernentes入口和控制器,以实现以下nginx.conf文件的功能: upstream backend { server server1.example.com weight=5; server server2.example.com:8080; server backup1.example.com:8080 backup; } 我希望一个http端点映射到多个Kubernetes服务,优先选择主端点,但也有一个备份端点。(对于我的特

如何设置Kubernentes入口和控制器,以实现以下nginx.conf文件的功能:

upstream backend {
    server server1.example.com       weight=5;
    server server2.example.com:8080;

    server backup1.example.com:8080   backup;
}
我希望一个http端点映射到多个Kubernetes服务,优先选择主端点,但也有一个备份端点。(对于我的特定项目,我需要有多个服务,而不是一个带有多个pod的服务。)

这是我尝试的ingress.yaml文件。我很确定我列出多个后端的方式是不正确的。我该怎么做?如何设置“备份”标志


我在GKE上运行Kubernetes。

Kubernetes Ingress无法做到这一点

您可以创建一个以server1、server2和backup1为目标的新服务,并在入口中使用它。但后端将以循环方式使用

您可以使用所需的配置创建(无状态)nginx反向代理的部署和服务,并在Ingress中使用。

您可以根据路径或配置来执行

但是,您需要根据某些内容进行区分(而不是端口,因为它是入口),所以您的两个选项是虚拟主机或路径

路径不能与某些需要标准路径的服务一起使用。根据你的例子来判断,你很可能想要像a.example.com和b.example.com这样的东西。以下是Kubernetes文档中的示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
    - host: foo.bar.com
      http:
        paths:
          - backend:
              serviceName: service1
              servicePort: 80
    - host: bar.foo.com
      http:
        paths:
          - backend:
              serviceName: service2
              servicePort: 80

如果我使用您提到的第二个选项(部署和nginx服务),我是否可以将该服务设置为type=LoadBalancer而不是headless Nodeport,然后根本不需要使用入口?(如果这就是我需要进入的全部)。另外,如果我保留入口,入口控制器的最佳配置是什么?可以是相同的Nginx部署吗?或者应该是谷歌的?如果你只公开这项服务,你可以完全跳过入口,是的。最好的入口我不想说。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
    - host: foo.bar.com
      http:
        paths:
          - backend:
              serviceName: service1
              servicePort: 80
    - host: bar.foo.com
      http:
        paths:
          - backend:
              serviceName: service2
              servicePort: 80