繁体   English   中英

为不同的 k8s 服务用入口重写 URI

[英]rewrite URI with ingress for different k8s services

基本上我需要实现如下工作流程。 我已经部署了没有任何自定义值的官方nginx helm-chart
我试图实现的流程:
https://test-api.foo.com/ >>> http://k8s-service-A/
https://test-api.foo.com/bar >>> http://k8s-service-B/bar
https://test-api.foo.com/sos >>> http://k8s-service-C/sos

这是我的service-A-ingress.yaml配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-ssl-verify: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.org/client-max-body-size: 1024m
    nginx.org/proxy-connect-timeout: 350s
    nginx.org/proxy-read-timeout: 4260s
  name: service-A-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: test-api.foo.com
    http:
      paths:
      - backend:
          service:
            name: service-A
            port:
              number: 3001
        path: /
        pathType: ImplementationSpecific
      - backend:
          service:
            name: Service-B
            port:
              number: 3002
        path: /bar
        pathType: ImplementationSpecific
      - backend:
          service:
            name: Service-C
            port:
              number: 3003
        path: /sos
        pathType: ImplementationSpecific

假设所有 3 项服务及其各自的部署已经在那里正常工作。 对于所有 3 项服务,我收到的回复如下:

https://test-api.foo.com/ >>> http://k8s-service-A/ (工作正常)
https://test-api.foo.com/bar >>> http://k8s-service-B/bar (得到 404)
https://test-api.foo.com/sos >>> http://k8s-service-C/sos (得到 404)

我不是 nginx 专家,但它看起来像是,入口中的“rewrite-target”注释不起作用。

如果我做错了什么或理解不同,也请告诉我。 任何帮助,将不胜感激。

正如@xirehat 提到的,可以删除重写注释。 因为请求将被重写以匹配关联服务预期的 URI。 因为偶尔后端服务暴露的URL和Ingress规则中指示的路径不一样。 除非重建请求,否则它将始终返回 404。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-ssl-verify: "false"
    nginx.org/client-max-body-size: 1024m
    nginx.org/proxy-connect-timeout: 350s
    nginx.org/proxy-read-timeout: 4260s
  name: service-A-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: test-api.foo.com
    http:
      paths:
      - backend:
          service:
            name: service-A
            port:
              number: 3001
        path: /
        pathType: ImplementationSpecific
      - backend:
          service:
            name: Service-B
            port:
              number: 3002
        path: /bar
        pathType: ImplementationSpecific
      - backend:
          service:
            name: Service-C
            port:
              number: 3003
        path: /sos
        pathType: ImplementationSpecific

如果仍然不起作用,请尝试使用pathType: Prefix 您可以参考这些链接以了解有关Rewrite 注释Ingress 注释的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM