通配任意主机的出口流量的 mTLS 发起

时间:2021-07-23 15:51:46

标签: istio istio-gateway

是否可以使用 istio 为通配符任意主机的出口流量创建 mTLS 源,并具有以下限制:

  1. 应用程序 Pod 必须发出简单的 HTTP 请求,而不是 HTTPS。
  2. mTLS 发起应该发生在出口网关。
  3. 必须使用自定义客户端和 CA 证书。

基本上这个场景与官方文档 Egress using wildcard arbitrary hosts with SNI proxy 中的示例有以下不同:

  1. 应用程序 pod 使用 HTTP 而不是 HTTPS:curl http:\\host1.example.com。因此,mTLS 发起应该发生在出口网关,而不是应用程序 pod。
  2. 使用自定义客户端和 CA 证书。

我尝试了所需的场景,但存在一个问题,即当出口网关将流量路由到 SNI nginx 代理 (sni-proxy) 时,它无法从 SNI TLS 标头中提取主机名。错误是:*18 no host in upstream ":443"。 SNI 不是由应用程序 pod (sleep) 设置的,因为它使用简单的 HTTP,而不是官方示例中的 HTTPS。未设置 SNI 时,SNI 代理无法将流量转发到特定主机。

在这种情况下,是否可以将 istio 出口网关配置为仅使用 ServiceEntryDestinationRuleVirtualService 等资源中的通配符主机名向特定主机发起 mTLS?例如:应用程序 pod 传递 HTTP 请求头参数,如 Host,出口网关使用它来发起 mTLS 并设置 SNI 头,然后 SNI 代理将使用该参数将流量转发到具体主机?在这种情况下,出口网关将根据 HTTP 请求头动态地向特定主机发起 mTLS 流量?

0 个答案:

没有答案