Nginx Ingress - 如何设置重定向到外部站点,如果不存在匹配路由?

初学者。我目前正在尝试配置Ingress来做两件事——如果斐波那契路径存在,重定向到函数并传递参数;如果路径不存在,重定向到另一个网站并附加输入。

所以,例如,有两个基本情况。

  1. https://xxx.amazonaws.com/fibonacci/10 -> 调用带有参数10的斐波那契函数(这是有效的)
  2. https://xxx.amazonaws.com/users/jozef -> 调用重定向函数,将其重定向到 https://api.github.com/users/jozef

我认为执行重定向的服务已经正确编写,它看起来像这样。

kind: Service
apiVersion: v1
metadata:
  name: api-gateway-redirect-service
spec:
  type: ExternalName
  externalName: api.github.com
  ports:
    - protocol: TCP
      targetPort: 443
      port: 80 # Default port for image

这是我的Ingress的样子。尝试使用default-backend注释以及默认后端的各种位置,都没有起作用。当我尝试curl https://xxx.amazonaws.com/users/jozef时,我始终收到301消息,但位置未更改。最终输出如下所示

HTTP/1.1 301 Moved Permanently
Server: openresty/1.15.8.2
Date: Wed, 13 Nov 2019 15:52:14 GMT
Content-Length: 0
Connection: keep-alive
Location: https://xxx.amazonaws.com/users/jozef

* Connection #0 to host xxx.amazonaws.com left intact
* Maximum (50) redirects followed
curl: (47) Maximum (50) redirects followed

有人知道我错在哪里吗?这是我的Ingress。如果有帮助,我们使用Kubernetes版本1.14.6。非常感谢

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - http:
      paths:
        - path: /fibonacci/(.*)
          backend:
            serviceName: fibonacci-k8s-service
            servicePort: 80
        - path: /(.*)
          backend:
            serviceName: api-gateway-redirect-service
            servicePort: 80
点赞
用户6773990
用户6773990

我一直在阅读有关此主题的内容,并且发现 Ingress 控制器通常不经过服务,而是直接连接到 pods(它查找由服务选定的 pods 并将它们配置到 nginx 中),这使得这里的使用情况(连接到未由 anypod 支持的服务)注定要失败。

然而,最近的版本似乎已经通过 nginx+(目前)支持了这一点。

参考:

Type ExternalName 服务的支持

Ingress 使用 Endpoints 来配置 POD 的 Ips 在 nginx 配置中进行负载均衡

2019-11-14 11:17:14
用户12257134
用户12257134

解决这个问题的方法是在curl命令中添加'Host: hostname'头。

处理请求的服务需要Host: hostname头才能正确地回复此请求。提供了hostname头之后,响应是正确的。

链接:

Curl文档

Ingress文档

2019-11-22 13:15:23