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

gun*_*nit 7 load-balancing nginx google-cloud-platform kubernetes

如何设置 Kubernetes Ingress 和控制器以基本上执行以下 nginx.conf 文件的操作:

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

    server backup1.example.com:8080   backup;
}
Run Code Online (Sandbox Code Playgroud)

我希望一个 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
Run Code Online (Sandbox Code Playgroud)

我在 GKE 上运行 Kubernetes。

Cos*_*ene 6

您可以基于路径或基于名称的虚拟主机进行简单的扇出

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

路径不适用于某些需要标准路径的服务。根据您的示例判断,您最有可能希望拥有 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
Run Code Online (Sandbox Code Playgroud)


Jan*_*art 1

Kubernetes Ingress 无法做到这一点。

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

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