Kubernetes Gateway API TLS路由使用及说明
什么是 TLSRoute?
TLSRoute 是 Gateway API 中的一个资源类型,专门用于处理 TLS 流量。它可以根据主机名等 TLS 元数据,将流量定向到不同的 Kubernetes 后端服务。
Gateway 配置:TLS 流量的入口
要使用 TLSRoute,首先需要配置 Gateway 作为流量入口点。以下是一个同时支持两种 TLS 处理模式的 Gateway 配置示例:
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: Gateway # 资源类型
metadata:
name: example-gateway # Gateway名称
spec:
gatewayClassName: example-gateway-class # Gateway控制器类型
listeners:
- name: tls # 监听器名称,用于TLSRoute引用
protocol: TLS # 协议类型
port: 443 # 监听端口
tls:
mode: Passthrough # TLS处理模式:透传
- name: tls-terminate # 监听器名称,用于TLSRoute引用
protocol: TLS # 协议类型
port: 8443 # 监听端口
tls:
mode: Terminate # TLS处理模式:终止
certificateRefs:
- name: tls-terminate-certificate # 证书名称
在这个配置中,我们定义了两个监听器:
- 443 端口:使用 Passthrough 模式,直接透传 TLS 流量
- 8443 端口:使用 Terminate 模式,在 Gateway 层面终止 TLS 连接
TLSRoute 配置:精细化的流量路由
透传模式(Passthrough)
当我们需要后端服务直接处理 TLS 连接时,可以使用透传模式:
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: TLSRoute # 资源类型
metadata:
name: foo-route # TLSRoute名称
spec:
parentRefs:
- name: example-gateway # 引用的Gateway名称
sectionName: tls # 引用的监听器名称
hostnames:
- "foo.example.com" # 匹配的主机名
rules:
- backendRefs:
- name: foo-svc # 后端服务名称
port: 443 # 后端服务端口
这个配置会将 foo.example.com 的流量通过 443 端口的透传监听器,直接转发到 foo-svc 服务的 443 端口。
终止模式(Terminate)
当我们希望在 Gateway 层面集中管理 TLS 证书时,可以使用终止模式:
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: TLSRoute # 资源类型
metadata:
name: bar-route # TLSRoute名称
spec:
parentRefs:
- name: example-gateway # 引用的Gateway名称
sectionName: tls-terminate # 引用的监听器名称
hostnames:
- "bar.example.com" # 匹配的主机名
rules:
- backendRefs:
- name: bar-svc # 后端服务名称
port: 8080 # 后端服务端口
这个配置会将 bar.example.com 的流量通过 8443 端口的终止监听器,在 Gateway 层面终止 TLS 连接后,转发到 bar-svc 服务的 8080 端口。
两种 TLS 模式的对比
透传模式(Passthrough)
工作原理:Gateway 将加密的 TCP 流直接传递给后端服务,由后端服务负责 TLS 终止。
适用场景:
- 后端服务需要直接处理 TLS 连接
- 后端服务需要访问客户端证书信息
- 实现端到端加密
配置特点:不需要在 Gateway 上配置证书,简化了 Gateway 配置。
终止模式(Terminate)
工作原理:Gateway 首先使用指定的证书终止 TLS 流,然后将未加密的 TCP 流传递给后端服务。
适用场景:
- 集中管理 TLS 证书,减少证书维护成本
- 减少后端服务的 TLS 处理开销
- 需要在 Gateway 层进行流量检查或修改
配置特点:需要在 Gateway 上配置 certificateRefs 指定证书。
生产环境推荐配置
Gateway 生产环境配置
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: Gateway # 资源类型
metadata:
name: production-gateway # Gateway名称
namespace: ingress # 建议使用单独的命名空间
spec:
gatewayClassName: production-gateway-class # 生产环境专用Gateway控制器
listeners:
- name: https # 监听器名称
protocol: TLS # 协议类型
port: 443 # 标准HTTPS端口
tls:
mode: Terminate # 生产环境推荐使用终止模式
certificateRefs:
- name: production-tls # 生产环境证书
kind: Secret # 证书存储类型
group: core # API组
- name: tls-passthrough # 透传模式监听器
protocol: TLS # 协议类型
port: 8443 # 透传模式端口
tls:
mode: Passthrough # 透传模式
TLSRoute 生产环境配置
apiVersion: gateway.networking.k8s.io/v1 # API版本
kind: TLSRoute # 资源类型
metadata:
name: production-app-route # TLSRoute名称
namespace: app-namespace # 应用命名空间
spec:
parentRefs:
- name: production-gateway # 引用生产环境Gateway
namespace: ingress # Gateway所在命名空间
sectionName: https # 引用终止模式监听器
hostnames:
- "app.example.com" # 生产环境域名
rules:
- backendRefs:
- name: app-service # 后端服务名称
port: 8080 # 后端服务端口
weight: 100 # 流量权重
常见问题及解决方案
- 路由不生效:检查 TLSRoute 的
parentRefs是否正确引用了 Gateway 和监听器 - TLS 握手失败:检查证书配置是否正确,特别是在 Terminate 模式下
- 后端服务不可达:检查网络连接和后端服务状态
- 主机名匹配失败:确保 TLSRoute 中的
hostnames配置与实际请求的主机名匹配
总结
TLSRoute 为 Kubernetes 集群中的 TLS 流量管理提供了强大而灵活的解决方案。通过选择合适的 TLS 处理模式,我们可以根据实际需求构建安全、高效的服务暴露架构。
无论是需要端到端加密的场景,还是希望集中管理证书的场景,TLSRoute 都能满足我们的需求,帮助我们构建更加可靠的 Kubernetes 网络架构。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
基于云服务MRS构建DolphinScheduler2调度系统的案例详解
这篇文章主要介绍了基于云服务MRS构建DolphinScheduler2调度系统,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-05-05
Rainbond网络治理插件ServiceMesh官方文档说明
这篇文章主要为大家介绍了Rainbond网络治理插件ServiceMesh官方文档说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-04-04


最新评论