Kubernetes 中使用 HAProxy Ingress 的基于路径的路由不起作用

问题描述 投票:0回答:1

我是一名初学者,尝试使用 HAProxy Ingress 控制器在 Kubernetes 中设置基于路径的路由。当我使用 / 作为路径时,Ingress 可以工作,但当我尝试使用 /test 这样的路径时,Ingress 会失败。以下是我的 Ingress 配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-server-ingress
  namespace: web
spec:
  ingressClassName: haproxy
  rules:
  - host: test.home
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-server-service
            port:
              number: 5000

这是我的完整配置:

apiVersion: v1
kind: Namespace
metadata:
  name: web
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-server
  namespace: web
spec:
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: httpd
        image: httpd:2.4.53-alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web-server-service
  namespace: web
spec:
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 5000
      targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-server-ingress
  namespace: web
    spec:
      containers:
      - name: httpd
        image: httpd:2.4.53-alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web-server-service
  namespace: web
spec:
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 5000
      targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-server-ingress
  namespace: web
spec:
  ingressClassName: haproxy
  rules:
  - host: test.home
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-server-service
            port:
              number: 5000

这是我的入口控制器的配置:

controller:
  ingressClassResource:
    enabled: true
  kind: DaemonSet
  daemonset:
    useHostPort: false
  service:
    type: LoadBalancer

我尝试从头开始重新安装所有内容并使用不同的路径进行测试。我注意到,当我指定正确的路径(例如 /test)时,我收到一条错误消息,指出找不到资源。但是,当我指定不存在的路径(例如 /nonexistent)时,我会收到 404 Not Found 错误。这表明 /test 路径的路由可能没有正确配置。

kubernetes kubernetes-ingress haproxy nginx-ingress haproxy-ingress
1个回答
0
投票

出现这个问题是因为路径默认转发到后端。例如,在您的配置中,服务是 web-server-service。但是,Ingress 将路径转发为 test.home/test,这导致您的后端不堪重负,因为它没有配置来处理此类路径。因此,没有可用资源来处理该请求。

解决方案: 我自己找到了解决方案。您可以通过向 Ingress 资源添加以下注释来解决此问题:

annotations:
  haproxy-ingress.github.io/rewrite-target: /

该注解重写了路径,以便后端以规范化的方式接收请求,例如简单的web-server-service,而不是转发原始路径(例如test.home/test)。此调整可确保后端能够正确处理请求,而无需针对意外路径进行特定配置。

© www.soinside.com 2019 - 2024. All rights reserved.