首页 > 解决方案 > Kubernetes Nginx Ingress 未正确重定向到路径路由服务

问题描述

我正在为 kubernetes 使用入口。我的入口是 kubernetes nginx 入口。并且路由配置不起作用并在 https 部分中的每个请求中重定向我的根路径所有配置都在下面给出

cat frontapi-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: swagger-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: preprod-ops.kblab.local
    http:
      paths:
      - backend:
          serviceName: kb-workplace
          servicePort: 8080
        path: /
      - backend:
          serviceName: gw-branch
          servicePort: 8443
        path: /api
$ cat swagger-portal.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: swagger-portal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: preprod-ops.kblab.local
    http:
      paths:
      - backend:
          serviceName: swagger-portal
          servicePort: 9001
        path: /swagger-portal

上面的配置适用于 http 配置,但下面的配置不适用于 https 配置。它只适用于招摇门户部分

$cat frontapi-ingress-https.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/secure-verify-ca-secret: preprod.kblab.local
    kubernetes.io/ingress.class: nginx
  generation: 1
  name: app-ingress
spec:
  rules:
  - host: preprod.kblab.local
    http:
      paths:
      - backend:
          serviceName: gw-branch
          servicePort: 8443
        path: /api
      - backend:
          serviceName: kb-workplace
          servicePort: 8080
        path: /
      - backend:
          serviceName: acs-alfresco
          servicePort: 8080
        path: /acs
  tls:
  - hosts:
    - preprod.kblab.local
  - secretName: preprod.kblab.local

$ cat swagger-portal-https.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: swagger-portal
spec:
  rules:
  - host: preprod.kblab.local
    http:
      paths:
      - backend:
          serviceName: swagger-portal
          servicePort: 9001
        path: /swagger-portal/a
  tls:
  - hosts:
    - preprod.kblab.local
  - secretName: preprod.kblab.local

提前致谢。

标签: kubernetes

解决方案


您正在Ingressnginx.ingress.kubernetes.io/rewrite-target: /上设置注释swagger-portal-https.yaml,这明确暗示重定向到根路径。

如果要保留请求路径,则需要去掉这个注解。


推荐阅读