当前位置: 首页 > news >正文

K8s集群两者不同的对外暴露服务的方式

在工作中,我们暴露集群内的服务通常有几种方式,对于普通的http或者https,我们通常使用​Ingress + Nginx​ ,对于原始的TCP或者UDP端口服务,可能需要选择 ​LoadBalancer​ ,它们的核心区别在于工作层级、协议支持和流量处理逻辑


1. 架构层级与协议支持

特性Ingress + NginxLoadBalancer
OSI 层级应用层(L7)传输层(L4)
支持的协议HTTP/HTTPS/HTTP2/WebSocketTCP/UDP(原始协议透传)
TLS 终止✅ 可在 Ingress 层终止 HTTPS(解密后转HTTP)❌ 需后端自行处理加密
URL 路径路由✅ 支持 /path 路由到不同服务❌ 只能通过端口区分服务

2. 流量处理逻辑对比

Ingress + Nginx 的工作流程
HTTPS
解密为HTTP
Client
Ingress-Nginx
Backend-Pod
  1. 客户端发起 HTTPS 请求(如 https://example.com
  2. Nginx Ingress Controller:
    • 终止 TLS(使用配置的证书解密流量)
    • 根据 Ingress 规则路由到对应 Service
    • 默认以 HTTP 协议转发到后端 Pod(除非配置 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  3. 后端 Pod 收到明文 HTTP 请求
LoadBalancer 的工作流程
原始协议
透传流量
直接转发
Client
Cloud-LB
Service
Pod
  1. 客户端直接发送原始流量(TCP/UDP)
  2. 云厂商的 LoadBalancer(如 AWS NLB、GCP LB):
    • 不解析应用层内容(无法识别 HTTP/HTTPS)
    • 单纯转发数据包到后端节点的 NodePort
  3. Pod 直接收到原始流量(需自行处理 TLS 解密)

3. 关键差异场景

场景 1:HTTPS 服务
  • Ingress + Nginx

    # Ingress 配置示例(自动 HTTPS 终止)
    spec:tls:- hosts:- example.comsecretName: my-tls-secretrules:- host: example.comhttp:paths:- path: /backend:serviceName: my-serviceservicePort: 80
    
    • 客户端 ↔ Nginx:HTTPS(加密)
    • Nginx ↔ Pod:HTTP(明文)
  • LoadBalancer

    # Service 配置示例(需 Pod 自己处理 TLS)
    spec:ports:- name: httpsport: 443targetPort: 443protocol: TCP
    
    • 客户端 ↔ Pod:全程 HTTPS(Pod 需加载证书)
场景 2:UDP 服务(如 STUN/VoIP)
  • Ingress + Nginx
    ❌ 不支持(Nginx Ingress 仅限 HTTP 系协议)

  • LoadBalancer
    ✅ 完美支持(如 Coturn 的 UDP 3478 端口)

    ports:
    - name: stun-udpport: 3478protocol: UDP
    

4. 性能与高级功能

特性Ingress + NginxLoadBalancer
负载均衡算法支持加权轮询、最少连接等通常仅限轮询(依赖云厂商实现)
WAF 集成✅ 可集成 Web 应用防火墙❌ 无法解析 HTTP 内容
流量镜像✅ 支持❌ 不支持
客户端真实 IP需配置 X-Forwarded-For需设置 externalTrafficPolicy: Local

5. 如何选择?

  • 选择 Ingress + Nginx 当

    • 暴露 HTTP/HTTPS 服务
    • 需要基于域名或路径的路由
    • 希望集中管理 TLS 证书
    • 需要 L7 功能(如重定向、速率限制)
  • 选择 LoadBalancer 当

    • 暴露非 HTTP 协议(如数据库、STUN/UDP、游戏服务器)
    • 需要直接透传原始 TCP/UDP 流量
    • 云厂商负载均衡器满足性能需求

常见误区

  1. “LoadBalancer 也能处理 HTTPS?”

    • ❌ 不能。云厂商的 L4 LB 只做端口转发,HTTPS 解密必须由后端完成。
  2. “Ingress 能替代 LoadBalancer?”

    • ❌ 不能。Ingress 本身需要 LoadBalancerNodePort 类型的 Service 作为底层支撑。
  3. “为什么 Coturn 不能用 Ingress?”

    • STUN/TURN 依赖 UDP 协议和原始数据包,而 Ingress 是 HTTP 网关,无法处理此类流量。
http://www.lryc.cn/news/604059.html

相关文章:

  • 2025年JCR一区新算法-回旋镖气动椭圆优化算法Boomerang Aerodynamic Ellipse(BAE)-附Matlab免费代码
  • 小程序发票合并功能升级!发票夹直接选,操作更便捷
  • Python爬虫03_Requests破解百度翻译
  • 三步给小智ESP32S3智能语音硬件接入小程序打通MCP服务
  • ClickHouse MergeTree引擎:从核心架构到三级索引实战
  • 数字ic后端设计从入门到精通13(含fusion compiler, tcl教学)全定制版图设计
  • 通过双网口实现两台设备共享网络与文件传输
  • python线性回归:从原理到实战应用
  • 负载均衡、算法/策略
  • 【iOS】类扩展与关联对象
  • 深入解析RocksDB的MVCC和LSM Tree level
  • Vulnhub-NAPPING: 1.0.1靶机
  • 汉得班翎流程平台V1.20.0正式发布:AI智慧赋能,集成效率跃升!
  • ZKmall开源商城架构工具链:Docker、k8s 部署与管理技巧
  • 基于三台主机搭建 Web 服务环境:Nginx、NFS 与 DNS 配置全流程
  • 机械学习--线性回归---三个小案例
  • Kun_Tools(全能文档工具)V0.4.6 便携版
  • 2025年中科院与JCR期刊分区深度对比(第一期):TON中科院分区3区不变,JCR分区升至Q1;TOSEM重回中科院1区!
  • I2C 与 SMBus:同根同源,各有千秋
  • 学习Python中Selenium模块的基本用法(3:下载浏览器驱动续)
  • 美国股市高频tick级分时交易数据解码与订单簿及交易指令分析
  • 使用 Spring AI Alibaba MCP 结合 Nacos 实现企业级智能体应用
  • win10 环境删除文件提示文件被使用无法删除怎么办?
  • Aura_P41_PXX GameplayEffect
  • iOS仿写 —— 计算器
  • Python包架构设计与模式应用:构建可扩展的企业级组件
  • 车载诊断架构 --- 关于诊断时间参数P4的浅析
  • ABP VNext + GraphQL Federation:跨微服务联合 Schema 分层
  • 落霞归雁思维框架应用(十一) ——开发如何选语言与架构:把“技术洪流”修成顺势河道
  • 【Mac版】Linux 入门命令行快捷键+联想记忆