如何设置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。
答案 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