我正在尝试设置入口负载平衡器。
基本上,我有一个具有多个路径的后端服务。
假设我的后端NodePort服务名称是hello-app。与此服务相关联的Pod公开了多个路径,例如/foo和/bar。以下是示例
NodePort服务和关联的部署
apiVersion: v1
kind: Service
metadata:
name: hello-app
spec:
selector:
app: hello-app
type: NodePort
ports:
- protocol: "TCP"
port: 7799
targetPort: 7799
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app
labels:
app: hello-app
spec:
replicas: 1
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: us.gcr.io/hello-app:latest
现在像下面这样发出请求,我正面临404错误。
http://{ingress-address:port}/foo
http://{ingress-address:port}/bar
我尝试在入口配置下面进行尝试,但是在两种情况下都没有帮助。
入口配置1
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basic-ingress
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: hello-app
servicePort: 7799
入口配置2
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basic-ingress
spec:
backend:
serviceName: hello-app
servicePort: 7799
错误消息
10.88.16.10--[2019年1月20日08:50:55]“GET/HTTP/1.1” 404-
[2019-01-20 08:50:55] [INFO] [_internal] [_log] 10.88.16.10--[20/Jan/2019 08:50:55]“GET/HTTP/1.1” 404-
我已经研究了this链接中提到的示例,但是它假定不同的路径引用了不同的后端服务。就我而言,多个路径属于同一个后端服务。
看来完整路径没有从入口转发到下游后端服务,这导致了无效请求。
有人可以建议为上述要求配置入口的正确方法是什么?
最佳答案
要将多路径与glbc入口一起使用,您需要使用不同的服务名称,例如以下示例,并且每个服务(后端)具有不同的路径,并且可以配置一个入口(不能配置两个)。
因此,除非您想拥有两个负载均衡器,否则不需要两个入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: fanout-ingress
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: web
servicePort: 8080
- path: /v2/*
backend:
serviceName: web2
servicePort: 8080
有多端口服务,Kubernetes在Service对象上支持多个端口定义。使用多个端口时,必须提供所有端口名称。见下面的例子
这是将kubernetes入口与nginx一起使用的答案。
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
- name: https
protocol: TCP
port: 443
targetPort: 9377
关于kubernetes-ingress - 同一后端服务中多个路径的K8s入口规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54274992/