如何设置 SNI?

SNI 仅被 v2 配置/API 支持。

目前的实现中要求所有过滤器链中的过滤器 必须是相同的。在以后的发布中,这个约束将会放宽,我们将可以将SNI运用到完全不同的过滤器链中。 我们还可以将 域名匹配 运用到HTTP 连接管理中去选择不同的路由路线。

这是截至目前最常见的 SNI 使用场景。

以下是一个满足上述条件的 YAML 范例。

  1. address:
  2. socket_address: { address: 127.0.0.1, port_value: 1234 }
  3. filter_chains:
  4. - filter_chain_match:
  5. sni_domains: "example.com"
  6. tls_context:
  7. common_tls_context:
  8. tls_certificates:
  9. - certificate_chain: { filename: "example_com_cert.pem" }
  10. private_key: { filename: "example_com_key.pem" }
  11. filters:
  12. - name: envoy.http_connection_manager
  13. config:
  14. route_config:
  15. virtual_hosts:
  16. - routes:
  17. - match: { prefix: "/" }
  18. route: { cluster: service_foo }
  19. - filter_chain_match:
  20. sni_domains: "www.example.com"
  21. tls_context:
  22. common_tls_context:
  23. tls_certificates:
  24. - certificate_chain: { filename: "www_example_com_cert.pem" }
  25. private_key: { filename: "www_example_com_key.pem" }
  26. filters:
  27. - name: envoy.http_connection_manager
  28. config:
  29. route_config:
  30. virtual_hosts:
  31. - routes:
  32. - match: { prefix: "/" }
  33. route: { cluster: service_foo }