2

相关问题

Istio 特使正在丢弃带有 Host 标头的请求

上面的问题是唯一一个与我的问题很相似的问题。但是,我的标题中的主机是service-b.myns.svc.cluster.local,我不明白为什么这应该是一个问题。

情况

我有一个包含许多Deployments 和Services 的名称空间。对于每一个Service我还定义了一个VirtualService. 例子:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  labels:
    app: service-b
  name: service-b
  namespace: myns
spec:
  gateways:
  - myns.myns.svc.cluster.local
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /.well-known
    - uri:
        prefix: /robots.txt
    - uri:
        prefix: /apple-app-site-association
    - uri:
        prefix: /favicon.ico
    - uri:
        prefix: /content/
    route:
    - destination:
        host: service-b.myns.svc.cluster.local
        port:
          number: 80

问题

我有另一个服务,调用它service-a应该能够检索/.well-knownrobots.txt/content/header/content/footer。我假设,因为我已经为这些路径定义了一条直接通往 的路线service-b,它们应该可以通过 检索service-a。但是,日志是这样说的:

[2019-02-22T01:07:54.557Z] "GET /content/headerHTTP/1.1" 404 NR 0 0 0 - "-" "curl/7.52.1" "789b3b81-9f61-43c3-b01a-b66d35c1d635" "service-b" "-" - - 10.x.x.x:80 10.y.y.y:47526

问题 #1

根据Envoy 文档NR意味着没有路线。我没有在我的 中定义路线VirtualService吗?

问题2

200如果我只是将它们插入浏览器中的 URL 栏(即。<istio-ingressgateway-ip-address>/robots.txt) ,我可以获得每个路径的响应。为什么?

一些进展

我已将问题范围缩小到 pod 上的 istio 代理service-a。我通过一次删除一个 istio-proxy 边车来做到这一点。有两种情况我从中获得了200成功service-a

[SVCA][ISTIOPROXY] ---> X [ISTIOPROXY][SVCB]  # Does not work
[SVCA][ISTIOPROXY] ---> X             [SVCB]  # Does not work
[SVCA]             ---> ✓             [SVCB]  # Does work
[SVCA]             ---> ✓ [ISTIOPROXY][SVCB]  # Does work
4

1 回答 1

1

您没有配置默认路由。

默认路由示例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  labels:
    app: service-b
  name: service-b
  namespace: myns
spec:
  gateways:
  - myns.myns.svc.cluster.local
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /.well-known
    - uri:
        prefix: /robots.txt
    - uri:
        prefix: /apple-app-site-association
    - uri:
        prefix: /favicon.ico
    - uri:
        prefix: /content/
    route:
    - destination:
        host: service-a.myns.svc.cluster.local
        port:
          number: 80
  - route:
    - destination:
        host: service-b.myns.svc.cluster.local
        port:
          number: 80
于 2021-01-18T11:03:43.533 回答