无法使用 kubernetes nginx 入口控制器创建路由规则
Unable to create route rule with kubernete nginx ingress controller
我正在尝试使用 kubernetes nginx 入口控制器:(quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.22.0)。下面是我的入口对象。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cc-store-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/add-base-url: "true"
#nginx.ingress.kubernetes.io/configuration-snippet: |
# sub_filter "http://my-ip:30021/" "http://my-ip:30021/app/";
# sub_filter_once off;
spec:
#tls:
#- secretName: tls-secret
rules:
- host: my-ip
http:
paths:
- path: /app/?(.*)
backend:
serviceName: appsvc
servicePort: 7201
当我尝试通过入口访问此服务时,我遇到了一个空白页面,据我所知,这是因为响应(少数 java 脚本、css 和其他)返回到我的-ip:30021/ 而不是 my-ip:30021/app。 (检查 nginx 日志初始连接给出 200 响应随后加载 css 并且 js 失败并显示 404)
有办法克服这个问题吗? "sub_filter" 和 add-base-url 注释都没有帮助。
有什么办法可以实现response的路径重写。使用任何其他入口控制器(而不是 nginx)可以更容易地克服这个问题吗?
这是我如何将基本路径添加到完全不支持它的服务的示例。以及处理重定向到没有基本路径的 url 的解决方案。
annotations:
kubernetes.io/ingress.class: nginx
# catch from 'path' capture group
nginx.ingress.kubernetes.io/rewrite-target: /
# handle redirects
# nginx.ingress.kubernetes.io/proxy-redirect-from: http://<host>/
# nginx.ingress.kubernetes.io/proxy-redirect-to: /<basePath>/
nginx.ingress.kubernetes.io/configuration-snippet:
proxy_set_header Accept-Encoding "";
sub_filter_last_modified off;
# add base path to all static resources
sub_filter '<head>' '<head> <base href="/<basePath>/">';
sub_filter 'href="/' 'href="';
sub_filter 'src="/' 'src="';
# set types of files to 'sub-filter'
sub_filter_once off;
sub_filter_types text/html text/css text/javascript application/javascript;
...
- path: /<basePath>/?(.*)
我正在尝试使用 kubernetes nginx 入口控制器:(quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.22.0)。下面是我的入口对象。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cc-store-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/add-base-url: "true"
#nginx.ingress.kubernetes.io/configuration-snippet: |
# sub_filter "http://my-ip:30021/" "http://my-ip:30021/app/";
# sub_filter_once off;
spec:
#tls:
#- secretName: tls-secret
rules:
- host: my-ip
http:
paths:
- path: /app/?(.*)
backend:
serviceName: appsvc
servicePort: 7201
当我尝试通过入口访问此服务时,我遇到了一个空白页面,据我所知,这是因为响应(少数 java 脚本、css 和其他)返回到我的-ip:30021/ 而不是 my-ip:30021/app。 (检查 nginx 日志初始连接给出 200 响应随后加载 css 并且 js 失败并显示 404)
有办法克服这个问题吗? "sub_filter" 和 add-base-url 注释都没有帮助。
有什么办法可以实现response的路径重写。使用任何其他入口控制器(而不是 nginx)可以更容易地克服这个问题吗?
这是我如何将基本路径添加到完全不支持它的服务的示例。以及处理重定向到没有基本路径的 url 的解决方案。
annotations:
kubernetes.io/ingress.class: nginx
# catch from 'path' capture group
nginx.ingress.kubernetes.io/rewrite-target: /
# handle redirects
# nginx.ingress.kubernetes.io/proxy-redirect-from: http://<host>/
# nginx.ingress.kubernetes.io/proxy-redirect-to: /<basePath>/
nginx.ingress.kubernetes.io/configuration-snippet:
proxy_set_header Accept-Encoding "";
sub_filter_last_modified off;
# add base path to all static resources
sub_filter '<head>' '<head> <base href="/<basePath>/">';
sub_filter 'href="/' 'href="';
sub_filter 'src="/' 'src="';
# set types of files to 'sub-filter'
sub_filter_once off;
sub_filter_types text/html text/css text/javascript application/javascript;
...
- path: /<basePath>/?(.*)