首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kubernetes NGINX侵入控制器中路径不工作

在Kubernetes NGINX侵入控制器中路径不工作
EN

Stack Overflow用户
提问于 2019-08-13 15:39:39
回答 1查看 1.8K关注 0票数 1

我有一个Spring应用程序,负责让公民和一个NGINX侵入控制器配置了ssl-通道,以便将我的集群公开给外部。

当我这么做时:https://myhostname.com/citizens

效果很好。这是我正在使用的配置:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  rules:
    - host: myhostname.com
      http:
        paths:
          - path: /
            backend:
              serviceName: myservice
              servicePort: 443

但我想要的是:

https://myhostname.com/myservice/citizens

它将类似于kubernetes文档:https://kubernetes.io/docs/concepts/services-networking/ingress/#simple-fanout中描述的数学简单扇出方法。

因此,在我的Spring应用程序中,我配置了一个contextPath,所以在本地配置时:https://localhost:8080/myservice/citizens

我得到了想要的结果

对于NGINX,我设置了以下内容:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: myhostname.com
      http:
        paths:
          - path: /myservice
            backend:
              serviceName: myservice
              servicePort: 443

我做错了什么?

解决方案:我一直在研究,我已经意识到,我试图实现的方法是不可能的,因为代理是盲目的,它不知道到哪里路由流量的路径。

因此,解决方案是使用子域而不是路径,因为由于SNI协议,NGINX控制器将知道客户机试图连接到哪个主机名。

最后的解决方案将类似于

EN

回答 1

Stack Overflow用户

发布于 2019-08-14 11:44:45

如果后端期望整个路径为/myservice/citizens,则只需使用它将其指向没有rewrite-target指令的服务,因为它是只规定如何在后端处理URI。

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  rules:
    - host: myhostname.com
      http:
        paths:
          - path: /myservice/citizens
            backend:
              serviceName: myservice
              servicePort: 443

请注意,这假设您的服务能够将请求重定向到8080,这是您的后端侦听端口,因此它必须匹配它。

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

https://stackoverflow.com/questions/57481168

复制
相关文章

相似问题

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