在 Kubernetes 的 Nginx Ingress 对象中设置代理通道的最佳方法是啥
Posted
技术标签:
【中文标题】在 Kubernetes 的 Nginx Ingress 对象中设置代理通道的最佳方法是啥【英文标题】:What is the Best way to Setup Proxy Pass in an Nginx Ingress object for Kubernetes在 Kubernetes 的 Nginx Ingress 对象中设置代理通道的最佳方法是什么 【发布时间】:2019-09-20 06:57:11 【问题描述】:目前我正在尝试将位于 Apache 负载平衡服务器上的站点迁移到我的 k8s 集群。然而,应用程序的设置很奇怪,使用了 proxypass 和 proxyreversepass,如下所示:
ProxyPass /something http://example.com/something
ProxyPassReverse /something http://example.com/something
我想在 nginx 入口中模仿这一点
首先我尝试使用rewrite-target
注释,但是它没有保留使应用程序再次运行所必需的Location
标头。
然后我尝试将proxy-redirect-to/from
注释放在特定位置块内,如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gpg-app-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-redirect-from: http://originalapp.com/something
nginx.ingress.kubernetes.io/proxy-redirect-to: http://example.com/something
spec:
rules:
- host: example.com
http:
paths:
- path: /something
backend:
serviceName: example-com
servicePort: 80
我希望能够改用自定义 proxy_pass
变量,但似乎不可能。
模拟这个代理通道的最佳方法是什么?
【问题讨论】:
【参考方案1】:首先你可以为你的 nginx 入口控制器使用自定义配置,文档可以找到here
另外,如果你只是想使用 nginx 入口控制器作为反向代理,每个入口规则已经为相关的上游/后端服务创建了proxy_pass
指令。
如果路径与您的规则和后端服务相同,那么您不必指定重写规则,只需指定后端服务的路径。但是如果路径
不一样,那就考虑使用nginx.ingress.kubernetes.io/rewrite-target
注解,否则会报404 backend
错误
因此,要将来自前端 http://example.com/something
的请求重定向到后端 example-com/something
,您的入口规则应类似于以下
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gpg-app-ingress
annotations:
kubernetes.io/ingress.class: nginx
#nginx.ingress.kubernetes.io/rewrite-target: /different-path
spec:
rules:
- host: example.com
http:
paths:
- path: /something
backend:
serviceName: example-com
servicePort: 80
关于注解的更多解释,请查看Nginx Ingress Annotations
另外,如果出现问题,请考虑检查 nginx-ingress-controller pod 的日志
kubectl logs nginx-ingress-controller-xxxxx
希望对你有帮助!
【讨论】:
这正是我必须做的。我不明白每个入口都是它自己的proxy_pass。当我了解到这一切非常简单地结合在一起时。 @coolinuxoid 当一个入口规则自动为相关的上游/后端服务创建proxy_pass指令时,它是http。对于我的服务,它创建了proxy_pass http://default-my-ingress-test.myapp.com-myapp-88;
指令。但相反,我需要它是这样的 https:proxy_pass https://default-my-ingress-test.myapp.com-myapp-88;
。然后只有我的应用程序才能工作,因为该后端只接受 https 请求。有没有办法为此目的修改 proxy_pass
服务指令?
@AnjanaDyna 检查这个kubernetes.github.io/ingress-nginx/user-guide/…以上是关于在 Kubernetes 的 Nginx Ingress 对象中设置代理通道的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
Kubernetes入口中基于Traefik路径的路由无法按预期工作
kubernetes下的Nginx加Tomcat三部曲之二:细说开发
当我拥有 Kubernetes 时,nginx 的意义何在?
使用 nginx 反向代理在 Kubernetes 中公开服务