0

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

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

基本上,这种情况与官方文档Egress 中的示例不同,该示例使用带有 SNI 代理的通配符任意主机,具有以下内容:

  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 egress gateway 以仅使用资源中的通配符主机名(如ServiceEntry, DestinationRule,VirtualService等)将 mTLS 发起到特定主机?例如:应用程序 pod 传递 HTTP 请求头参数,如Host,由 egress 网关使用来发起 mTLS 并设置 SNI 头,然后将由 SNI 代理将流量转发到特定主机?在这种情况下,出口网关将根据 HTTP 请求标头动态地将 mTLS 流量发起到特定主机?

4

0 回答 0