首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >K8s宏资源不向位置响应头添加原始URL前缀

K8s宏资源不向位置响应头添加原始URL前缀
EN

Stack Overflow用户
提问于 2021-11-30 02:49:51
回答 1查看 706关注 0票数 0

我无法正确地指定Ingress资源,以便重写应用程序的Location头,以便在前面包含原始的Location路径。

使用配置:

代码语言:javascript
运行
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-fanout-namespace-xyz
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  namespace: namespace-xyz
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /analytics/spark/master(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: spark-master-svc
                port:
                  number: 80
          - path: /analytics/jupyter/lab(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: jupyter-proxy-public
                port:
                  number: 80

请求网址:https://xx-xx.yyy.elb.amazonaws.com/analytics/jupyter/lab/

响应头:location: /hub/

重定向到https://xx-xx.yyy.elb.amazonaws.com/hub/,404 s。

这应该会为location: /analytics/jupyter/lab/发送重定向。

这似乎是add-base-url的目的,现在已经被废弃了。什么是合适的替代者,我如何才能有效地使Location /analytics/jupyter/lab/hub/ 变成/analytics/jupyter/lab/hub/

如果我完全删除rewrite-target,那么http://xx-xx.yyy.elb.amazonaws.com/analytics/jupyter/lab/根本不会重定向,它只是404。

信息:

NGINX入侵控制器版本:

代码语言:javascript
运行
复制
-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:       v1.0.5
  Build:         7ce96cbcf668f94a0d1ee0a674e96002948bff6f
  Repository:    https://github.com/kubernetes/ingress-nginx
  nginx version: nginx/1.19.9

-------------------------------------------------------------------------------

Kubernetes版本(使用kubectl version):

代码语言:javascript
运行
复制
Client Version: version.Info{Major:"1", Minor:"21+", GitVersion:"v1.21.2-13+d2965f0db10712", GitCommit:"d2965f0db1071203c6f5bc662c2827c71fc8b20d", GitTreeState:"clean", BuildDate:"2021-06-26T01:02:11Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21+", GitVersion:"v1.21.2-eks-0389ca3", GitCommit:"8a4e27b9d88142bbdd21b997b532eb6d493df6d2", GitTreeState:"clean", BuildDate:"2021-07-31T01:34:46Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}

环境:

  • AWS EKS
  • Amazon 2

ingress控制器安装了ArgoCD / Helm,上面显示了版本信息,没有重写任何值。

代码语言:javascript
运行
复制
$ kubectl describe ingressclasses
Name:         nginx
Labels:       app.kubernetes.io/component=controller
              app.kubernetes.io/instance=ingress-controller
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=ingress-nginx
              app.kubernetes.io/version=1.0.5
              helm.sh/chart=ingress-nginx-4.0.9
Annotations:  <none>
Controller:   k8s.io/ingress-nginx
Events:       <none>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-30 13:50:22

jupyter-proxy需要为该服务背后的工作负载设置它的base_url。现在它不知道它是从子路径服务的,所以当它发送重定向时,它发送的方式就好像它是从根url服务的(而且实际上也是)。

一次快速测试表明

代码语言:javascript
运行
复制
helm install my-jupyterhub jupyterhub/jupyterhub -n jupyterhub \
--create-namespace \
--set hub.baseUrl="/analytics/jupyter/lab" \
--set ingress.enabled=true \
--set ingress.pathType="ImplementationSpecific" \
--set proxy.service.type=NodePort \
--set ingress.annotations.'kubernetes\.io/ingress\.class'=nginx

Ingress为我部署了Ingress,我可以通过<X.X.X.X>/analytics/jupyter/lab/访问它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70163713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档