Kubernetes Gateway API TLS路由使用及说明

 更新时间:2026年03月03日 09:08:04   作者:文静小土豆  
TLSRoute是GatewayAPI中的一个资源类型,用于处理TLS流量,可以根据主机名等TLS元数据将流量定向到不同的Kubernetes后端服务,通过配置Gateway和TLSRoute,可以实现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 网络架构。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在 k8s 中部署Jenkins的实践指南(最新推荐)

    在 k8s 中部署Jenkins的实践指南(最新推荐)

    本文介绍了在Kubernetes(K8s)中部署Jenkins的方法和步骤,包括准备K8s集群、选择Jenkins镜像、创建存储资源、账号授权、部署Jenkins、创建Service以及访问测试,Jenkins在K8s中的部署可以实现动态资源管理、提高可靠性和容错能力、快速响应变化和统一环境等优势
    2025-03-03
  • kubernetes k8s 存储动态挂载配置详解

    kubernetes k8s 存储动态挂载配置详解

    这篇文章主要为大家介绍了kubernetes k8s 存储动态挂载配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • K8S 中 kubectl 命令详解

    K8S 中 kubectl 命令详解

    这篇文章主要介绍了K8S 中 kubectl 命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Ubuntu22.04的Kubernetes环境中加载桥接网络模块方式

    Ubuntu22.04的Kubernetes环境中加载桥接网络模块方式

    在Ubuntu 22.04的Kubernetes环境中,解决sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables错误的步骤包括加载br_netfilter模块、持久化配置、设置sysctl参数以及验证配置,同时,确保Kubernetes组件和CNI插件依赖这些参数,防火墙配置也要同步
    2026-01-01
  • Google Kubernetes Engine 集群实战详解

    Google Kubernetes Engine 集群实战详解

    这篇文章主要为大家介绍了Google Kubernetes Engine 集群实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 云原生与k8s集群构建全过程

    云原生与k8s集群构建全过程

    这篇文章主要介绍了云原生与k8s集群构建全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Kubernetes如何限制不同团队只能访问各自namespace实现

    Kubernetes如何限制不同团队只能访问各自namespace实现

    这篇文章主要为大家介绍了Kubernetes如何限制不同团队只能访问各自namespace实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • k8s部署并测试ingress-nginx的详细过程

    k8s部署并测试ingress-nginx的详细过程

    这篇文章主要介绍了k8s部署并测试ingress-nginx的详细过程,本文通过一个demo示例给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • k8s之ingress-nginx详解和部署方案

    k8s之ingress-nginx详解和部署方案

    Ingress是一种向k8s集群外部的客户端公开服务的方法,下面这篇文章主要给大家介绍了关于k8s之ingress-nginx详解和部署方案的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • kubernetes调度之NodeSelector使用解读

    kubernetes调度之NodeSelector使用解读

    本文介绍Kubernetes中两种简单调度策略:NodeName通过指定节点名称强制调度,跳过调度器;NodeSelector基于节点标签匹配,需为节点打标签并在Pod定义中配置,两者均为强制约束机制
    2025-08-08

最新评论