GKE可扩展服务代理需要访问哪些URL

What URLs does the GKE extensible service proxy need to access

我是 运行 Kubenetes 引擎中的 Istio。我的应用程序使用 gRPC 并有一个可扩展服务代理容器 link 到 Google Enpoints 服务。

默认情况下,GKE 上的 Istio 会阻止所有出口请求,但这会破坏 ESP 容器,因为它需要从 Istio 网格外部请求一些数据。

来自 ESP 的日志告诉我它正在尝试访问 IP 169.254.169.254 以获取一些元数据,因此我从 Istio 打开了一个出口通道以实现这一点,这很好。

但 ESP 的下一步尝试是 "fetch the service config ID from the rollouts service"。这再次被阻止,但这次日志错误没有告诉我它试图访问的 URL,只有路径。所以不知道要开什么url出口

这是日志条目:

WARNING:Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', error(104, 'Connection reset by peer'))': /v1/services/rev79.endpoints.rev79-232812.cloud.goog/rollouts?filter=status=SUCCESS

谁能告诉我 ESP 需要访问什么才能工作?URL

我最终通过谷歌搜索部分路径和一些关键词偶然发现了我正在寻找的东西。 这看起来像 ESP 试图访问的内容: https://servicemanagement.googleapis.com/v1/services/{serviceName}/rollouts/{rolloutId}

确实打开到该主机的路由会启动 ESP 并且 运行。

对于遇到此问题的任何其他人。

ESP 需要访问两个独立的端点才能 运行 不崩溃。他们是

  • servicemanagement.googleapis.com (HTTPS)
  • 169.254.269.254 (HTTP)

要正常运行,还需要

  • servicecontrol.googleapis.com (HTTPS)

如果您在 Istio 网格中有严格的出口过滤,您将需要两个 ServiceEntry 资源来实现这一点。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: endpoints-cert
spec:
  hosts:
  - metadata.google # this field does not matter
  addresses:
  - 169.254.169.254/32
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: NONE
  location: MESH_EXTERNAL

---

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: endpoints-metadata
spec:
  hosts:
  - "servicemanagement.googleapis.com"
  - "servicecontrol.googleapis.com"
  ports:
  - number: 80 # may not be necessary
    name: http
    protocol: HTTP
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS
  location: MESH_EXTERNAL

如果您使用的是出口网关,则需要为两者进行额外配置 这些端点。