Kubernetes Gateway API-3-TLS配置
1 简介
Gateway API 允许使用多种方式配置 TLS。本文档列出了各种TLS设置,并给出了如何有效使用它们的一般指南。
尽管本文档涵盖了 Gateway API 最常见的TLS配置形式,但某些实现也可能提供特定于实现的扩展,允许不同或更高级形式的TLS配置。除此文档外,值得阅读你所使用 Gateway API 的任何实现的TLS文档。
下面描述的
TLSRoute
和BackendTLSPolicy
资源目前仅包含在网关API的“测试”通道中。有关发布渠道的更多信息,请参阅版本指南。
2 客户端/服务器和TLS
对于网关,涉及两个连接:
-
下游(downstream):这是 Client 和 Gateway 之间的连接。
-
上游(upstream):这是 Gateway 和 路由指定的后端资源之间的连接。这些后端资源通常是服务。
通过 Gateway API,对下游和上游连接的TLS配置进行独立管理。
对于下游连接,根据侦听器协议,支持不同的TLS模式和路由类型。
监听器协议 | TLS Mode | 支持的路由类型 |
---|---|---|
TLS | Passthrough(通过) | TLSRoute |
TLS | Terminate(终止) | TCPRoute |
HTTPS | Terminate | HTTPRoute |
GRPC | Terminate | GRPCRoute |
请注意,在 Passthrough
TLS模式下,TLS设置没有作用,因为来自 Client 的TLS会话不会在 Gateway 终止,而是通过 Gateway 加密。
对于上游连接,使用 BackendTLSPolicy
,侦听器协议和TLS模式都不适用于上游TLS配置。对于 HTTPRoute
,支持同时使用 Terminate
TLS模式和 BackendTLSPolicy
。将这些结合使用可以提供通常所说的连接,该连接在网关处终止并重新加密。
3 下游 TLS
下游TLS设置是使用 Gateway 级别的 listeners(侦听器)配置的。
3.1 Listeners 和 TLS
侦听器在每个域或子域的基础上公开TLS设置。侦听器的TLS设置应用于满足 hostname
条件的所有域。
在以下示例中,网关为所有请求提供 default-cert
Secret资源中定义的TLS证书。虽然该示例涉及HTTPS协议,但也可以将相同的功能与TLSRoute一起用于 TLS-only 协议。
listeners:
- protocol: HTTPS # 其他可能的值是`TLS`
port: 443
tls:
mode: Terminate # 如果 protocol 是“TLS”,则“Passthrough”是一种可能的模式
certificateRefs:
- kind: Secret
group: ""
name: default-cert
3.2 示例
3.2.1 持有多个不同证书的监听器
在此示例中,Gateway 被配置为服务 foo.example.com
和 bar.example.com
域。这些域的证书在 Gateway 中指定。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata