云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > Kubernetes Gateway API TLS路由

Kubernetes Gateway API TLS路由使用及说明

作者:文静小土豆

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   # 证书名称

在这个配置中,我们定义了两个监听器:

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 终止。

适用场景

配置特点:不需要在 Gateway 上配置证书,简化了 Gateway 配置。

终止模式(Terminate)

工作原理:Gateway 首先使用指定的证书终止 TLS 流,然后将未加密的 TCP 流传递给后端服务。

适用场景

配置特点:需要在 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 为 Kubernetes 集群中的 TLS 流量管理提供了强大而灵活的解决方案。通过选择合适的 TLS 处理模式,我们可以根据实际需求构建安全、高效的服务暴露架构。

无论是需要端到端加密的场景,还是希望集中管理证书的场景,TLSRoute 都能满足我们的需求,帮助我们构建更加可靠的 Kubernetes 网络架构。

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

您可能感兴趣的文章:
阅读全文