【问题标题】:404 hitting `metadata.google.internal` from K8s pod with Istio404 使用 Istio 从 K8s pod 中点击 `metadata.google.internal`
【发布时间】:2019-02-07 16:40:15
【问题描述】:

我们有一个应用程序正在尝试迁移到 Istio 网格中。其中一项服务向metadata.google.internal 发出请求以完成环境配置。

我创建了ServiceEntry类型的对象到白名单metadata.google.internal,如下(尝试了不同的组合):

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: google-metadata-server
spec:
  hosts:
  - metadata.google.internal
  location: MESH_EXTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: DNS

由于某种原因,我无法获得正确的响应,因此服务失败。在服务中检查istio-proxy 容器上的日志时,这是我得到的错误:

[2019-02-07T15:29:22.834Z] "GET /computeMetadata/v1/project/project-idHTTP/1.1" 200 - 0 14 2 1 "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "513f6e25-57ce-4cf0-a273-d391b3da604b" "metadata.google.internal" "169.254.169.254:80" outbound|80||metadata.google.internal - 169.254.169.254:80 10.16.0.29:58790
[2019-02-07T15:29:22.865Z] "GET /HTTP/1.1" 404 NR 0 0 0 - "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "490fe0dd-e03a-4460-a63b-7ed84a168d39" "169.254.169.254" "-" - - 169.254.169.254:80 10.16.0.29:58794
[2019-02-07T15:29:22.883Z] "GET /HTTP/1.1" 404 NR 0 0 0 - "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "dac0e762-d799-4457-ae48-75179e2f0b82" "169.254.169.254" "-" - - 169.254.169.254:80 10.16.0.29:58794
[2019-02-07T15:29:22.886Z] "GET /HTTP/1.1" 404 NR 0 0 0 - "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "3411a0be-6d29-42f3-b01a-567edf2cc3e2" "169.254.169.254" "-" - - 169.254.169.254:80 10.16.0.29:58794
[2019-02-07T15:29:47.781Z] "GET /computeMetadata/v1/project/project-idHTTP/1.1" 200 - 0 14 4 3 "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "7115bf46-e7e9-4b2f-ba37-10cd6b8c9dea" "metadata.google.internal" "169.254.169.254:80" outbound|80||metadata.google.internal - 169.254.169.254:80 10.16.0.29:58876

如您所见,我收到了 200 个对 /computeMetadata/v1/project/project-id 的请求,但对 / 的请求却失败了。不知道为什么。

有了istio-sidecar-injector pod,一切似乎都很好。日志中没有需要指出的内容。

我所做的是使用 Istio 在同一个集群、同一个命名空间中创建一个简单的部署,然后手动远程登录元数据服务器:

root@demo-675c758c68-vrbcv:/# telnet metadata.google.internal 80
Trying 169.254.169.254...
Connected to metadata.google.internal.
Escape character is '^]'.
GET / HTTP/1.1      
Host: metadata.google.internal

HTTP/1.1 200 OK
metadata-flavor: Google
content-type: application/text
date: Thu, 07 Feb 2019 16:35:52 GMT
server: envoy
content-length: 22
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
x-envoy-upstream-service-time: 1

0.1/
computeMetadata/

我不明白为什么会收到这些 404。知道发生了什么吗?

【问题讨论】:

  • 你能发布你的网关和你的虚拟服务吗?
  • 一切都搞定了。如果您检查日志,该应用程序正在向metadata.google.internal 发出一些请求,其他则向169.254.169.254 发出请求。因此,我将 IP 也添加到了主机列表中。
  • 是的,你需要添加- addresses 169.254.169.254(这是元数据地址)你可以通过你的回答来帮助社区
  • 分辨率是非常特定于应用程序的。这就是为什么我没有。现在,我还没有添加addresses,我将地址添加为主机。我应该在addresses 下添加它吗?
  • 我通过了我的答案检查它应该如何添加。

标签: kubernetes google-kubernetes-engine istio envoyproxy


【解决方案1】:

这就是应该添加地址的方式。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: google-metadata-server
spec:
  hosts:
  - metadata.google.internal
  addresses:
  - 169.254.169.254
  ports:
  - number: 80
    name: http
    protocol: HTTP
  location: MESH_INTERNAL
  resolution: DNS

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 2018-01-02
    • 2020-12-21
    • 2021-11-19
    • 2019-04-05
    • 2021-12-01
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多