我正在尝试设置入口负载平衡器。
基本上,我有一个具有多个路径的后端服务。

假设我的后端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/

10-15 23:53