在 Kubernetes 的 Nginx Ingress object 中设置代理通道的最佳方法是什么
What is the Best way to Setup Proxy Pass in an Nginx Ingress object for Kubernetes
目前我正在尝试将一个位于 Apache 负载平衡服务器上的站点迁移到我的 k8s 集群。然而,该应用程序使用 proxypass 和 proxyreversepass 进行了奇怪的设置,如下所示:
ProxyPass /something http://example.com/something
ProxyPassReverse /something http://example.com/something
我想在 Nginx Ingress 中模仿这个
首先,我尝试使用 rewrite-target
注释,但是它没有保留 Location
header,这是再次获取应用程序 运行 所必需的。
然后我尝试在特定位置块内放置 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
变量,但它似乎不可能。
模仿此代理通行证的最佳方式是什么?
首先你可以为你的 nginx 入口控制器使用自定义配置,可以找到文档 here
此外,如果您只想使用 nginx 入口控制器作为反向代理,则每个入口规则已经为相关 upstream/backend 服务创建了 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
希望对您有所帮助!
目前我正在尝试将一个位于 Apache 负载平衡服务器上的站点迁移到我的 k8s 集群。然而,该应用程序使用 proxypass 和 proxyreversepass 进行了奇怪的设置,如下所示:
ProxyPass /something http://example.com/something
ProxyPassReverse /something http://example.com/something
我想在 Nginx Ingress 中模仿这个
首先,我尝试使用 rewrite-target
注释,但是它没有保留 Location
header,这是再次获取应用程序 运行 所必需的。
然后我尝试在特定位置块内放置 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
变量,但它似乎不可能。
模仿此代理通行证的最佳方式是什么?
首先你可以为你的 nginx 入口控制器使用自定义配置,可以找到文档 here
此外,如果您只想使用 nginx 入口控制器作为反向代理,则每个入口规则已经为相关 upstream/backend 服务创建了 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
希望对您有所帮助!