如何将多个服务映射到一个Kubernetes Ingress路径?

时间:2017-09-22 21:43:26

标签: nginx kubernetes google-cloud-platform load-balancing

如何设置Kubernentes Ingress和Controller基本上执行以下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文件。我很确定我列出多个后端的方式不正确。我该怎么办?我如何设置"备份"标志?

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fanout-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
    # kubernetes.io/ingress.global-static-ip-name: "kubernetes-ingress"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: server1
          servicePort: 
      - path: /
        backend:
          serviceName: server2
          servicePort: 8080
      - path: /
        backend:
          serviceName: backup1
          servicePort: 8080

我在GKE上运行Kubernetes。

2 个答案:

答案 0 :(得分:0)

Kubernetes Ingress无能为力。

您可以创建一个面向server1,server2和backup1的新服务,并在Ingress中使用它。但后端将以循环方式使用。

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

答案 1 :(得分:0)

您可以根据路径或simple fanout进行name based virtual hosting

但是,您需要根据某些东西(端口除外,因为它是一个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
相关问题