首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Istio网关上使用url重写资源的HTTP404

在Istio网关上使用url重写资源的HTTP404
EN

Stack Overflow用户
提问于 2019-01-03 13:17:14
回答 1查看 3.4K关注 0票数 3

我试图在AKS上将一个服务部署到特定的url地址。下面的yaml让我访问所需的地址,比如xxx.europe.Cloudapp.azure.com/ service -a。这很好,我设法将整个服务隐藏在所需的url下面:

代码语言:javascript
复制
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: istio
spec:
  hosts:
  - "*"
  gateways:
  - istio-gateway
  http:
  - match:
    - uri:
        prefix: /service-a
    rewrite:
      uri: /    
    route:
    - destination:
        host: service-a.default.svc.cluster.local

但是,当显示欢迎页面时,我只看到文本。没有加载css/javascript/图像文件。此页面试图加载的所有内容仍然具有原始的url地址,而不需要通过我的网关配置进行任何重写。因此主页请求如下:

代码语言:javascript
复制
http://xxxxx.europe.cloudapp.azure.com/icon.jpg

而不是这样:

代码语言:javascript
复制
http://xxxxx.europe.cloudapp.azure.com/service-a/icon.jpg

处理页面上资源和链接的重写urls的最佳方法是什么?我必须手动更改主页上的urls吗?

编辑:

说得更清楚。

  1. 重写url就像预期的那样,地址就是我想要的(整个服务隐藏在"xxxx.europe.cloudapp.azure.com/ service -a“下面。
  2. 一旦输入“xxx.europe.Cloudapp.azure.com/service”,我就会看到service的欢迎页面,但没有加载任何css/jpegs/js。此外,欢迎页面上可见的链接也不起作用。
  3. 例如,"icon.jpg“未加载。佩奇想从http://xxxx.europe.cloudapp.azure.com/icon.jpg加载它,但它已经不在了。由于重写,它在http://xxxx.europe.cloudapp.azure.com/service-a/icon.jpg上是可用的,正如预期的那样。

我希望http://xxxx.europe.cloudapp.azure.com/icon.jpg请求将自动重写到http://xxxx.europe.cloudapp.azure.com/service-a/icon.jpg。但很明显我搞错了。因此,我想知道如何以一种可管理的方式处理服务本身中的链接--我的意思是,我可以修改应用程序中的每一个可能的链接,但是如果我们再次更改url (从/ service -a到/service-b),该怎么办?该服务是用ASP.NET核心编写的,我将寻找某种可维护的内部重写解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-03 13:47:25

重写的发生是因为配置的这一部分:

代码语言:javascript
复制
  - match:
    - uri:
        prefix: /service-a
    rewrite:
      uri: /  

结果,匹配的前缀将被替换为rewrite.uri属性的值。

示例1: (虚拟服务被激活)

代码语言:javascript
复制
Original: http://www.page.com/service-a/icon.jpg
                             ^--------^
Rewritten: http://www.page.com/icon.jpg

示例2: (此虚拟服务被激活)

代码语言:javascript
复制
Original: http://www.page.com/service-a/service-a/icon.jpg
                             ^--------^
Rewritten: http://www.page.com/service-a/icon.jpg

示例3: (此虚拟服务未激活,返回其他虚拟服务或默认路由,或返回404的黑洞)

代码语言:javascript
复制
Original: http://www.page.com/icon.jpg

Rewriting: DOESN'T HAPPEN

对于重写,没有建议,也不可能,这取决于您的服务。Istio重写道具的文档可以找到这里

如果每个子域都有自己的服务,那么这将是一个选项:

代码语言:javascript
复制
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: istio
spec:
  hosts:
  - "service-a.domain.com"
  gateways:
  - istio-gateway
  http:
  - match:
    - uri:
        prefix: /
    rewrite:
      uri: /service-a
    route:
    - destination:
        host: service-a.default.svc.cluster.local
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54023082

复制
相关文章

相似问题

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