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.pswp.cn/news/916825.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916825.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916825.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實習日志111

第一天 加入內網和內網域,設置自己的操作系統 第二天 安裝常用軟件和平臺 Notepad 是一款免費的源代碼編輯器,支持多種編程語言,其功能強大且界面友好,適用于 Windows 操作系統。WinMerge 是一款開源的差異比較和合并工具&…

Redis 服務掛掉排查與解決

Redis 是一個高性能的鍵值對存儲系統,廣泛應用于緩存、會話存儲、消息隊列等場景。在使用 Redis 的過程中,偶爾會遇到 Redis 服務掛掉或無法連接的情況。本文將通過常見錯誤 RedisException in Redis.php line 63 Connection refused 來講解如何排查并解…

DOM + HTML + HTTP

一、HTML5的新特性 1.語義化標簽:其實就是可以讓標簽有自己的含義 html4之前都是有的,比如:<h1>、<ul>、<li> html5新增了很多語義化標簽:<header>、<nav> html5的語義化標簽的常用頁面布局: 優點: 1.代碼結構清晰,方便閱讀,有利于團…

HTML 音頻/視頻

HTML 音頻/視頻 引言 HTML 音頻和視頻標簽是網頁設計中不可或缺的部分,它們為用戶提供了一種將多媒體內容嵌入到網頁中的方式。本文將詳細介紹 HTML 音頻/視頻標簽的用法、屬性和注意事項,幫助開發者更好地在網頁中嵌入音頻和視頻。 HTML 音頻標簽( ) 1. 標簽基本用法 …

Apache Ignite Cluster Groups的介紹

以下這段內容是 Apache Ignite 官方文檔中關于 Cluster Groups&#xff08;集群組&#xff09; 的介紹。我來用通俗易懂的方式幫你全面理解這個概念。&#x1f310; 什么是 Cluster Group&#xff1f; 簡單來說&#xff1a;Cluster Group 就是一個“節點的子集”。想象一下你的…

github上傳本地項目過程記錄

最近有和別人進行unity項目協作的需求&#xff0c;需要把自己的本地代碼上傳到github已有的一個倉庫里。記錄一下上傳過程&#xff0c;防止后續還需要用。 文章目錄一、把自己的本地代碼上傳到github已有的一個倉庫中二、常用功能一、把自己的本地代碼上傳到github已有的一個倉…

Spring AI Alibaba

目錄 前言&#xff1a; 一、Spring AI 和Spring AI Alibaba 二、Spring AI Alibaba快速入門 1.環境 2.ollama 3.阿里百煉 前言&#xff1a; 2025年真的是AI大爆發的一年&#xff0c;以后無論是什么行業我想都需要AI了&#xff0c;作為一名計算機人&#xff0c;你不學習AI…

【GaussDB】內存資源告急:深度診斷一起“memory temporarily unavailable“故障

【GaussDB】診斷一起內存臨時不可用的問題 &#x1f4cb; 背景 在客戶測試環境中&#xff08;GaussDB 506.0 SPC0100 集中式&#xff09;&#xff0c;一個重度使用存儲過程的系統&#xff0c;頻繁出現內存臨時不可用的問題(ERROR: memory is temporarily unavailable)。令人困…

FastDFS如何提供HTTP訪問電子影像文件

Nginx 作為高性能的 Web 服務器和反向代理服務器&#xff0c;與 FastDFS 結合使用&#xff0c;本文主要介紹用于處理 FastDFS 存儲文件的 HTTP 訪問請求&#xff0c;方便客戶端通過 HTTP 協議直接訪問存儲在 FastDFS 中的文件&#xff0c;在電子影像系統中&#xff0c;Nginx 可…

水面垃圾識別分割數據集labelme格式2111張8類別

數據集中有部分增強圖片&#xff0c;注意為了提供模型泛化識別能力&#xff0c;有很少一部分不是水面垃圾。具體看圖片數據集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;僅僅包含jpg圖片和對應的json文件)圖片數量(jpg文件個數)&#xff1a;2111標注數量(json文件…

北京-4年功能測試2年空窗-報培訓班學測開-第六十二天-模擬未通過,繼續準備自我介紹項目介紹面試題中

今日產出&#xff0c;完成昨天模擬面試錄音的重聽和整理&#xff0c;完成自我介紹梳理&#xff0c;還重寫了三個算法題&#xff0c;寫了4個sql題。和同學打語音提問今天專注力不強&#xff0c;因為焦慮項目和面試題。關于項目&#xff0c;我理解的&#xff0c;老師以前錄屏講的…

自動化輔助工具教程

該工具支持全部平臺使用

里程碑 | 1Panel開源面板GitHub Star數量突破30,000個!

截至2025年7月23日20:00&#xff0c;飛致云旗下開源項目——1Panel開源Linux服務器運維管理面板GitHub Star數超過30,000個&#xff01; 繼Halo之后&#xff0c;1Panel成為飛致云旗下第二個GitHub Star數量超過30,000個的開源項目&#xff0c;也是飛致云旗下最快達成30,000個Gi…

雨雪霧冰全預警:交通氣象站為出行安全筑起“隱形防護網”

冬季濃霧彌漫高速&#xff0c;能見度降至 50 米以下&#xff1b;夏季暴雨傾盆&#xff0c;低洼路段眨眼間積水成河…… 惡劣天氣總是公路交通安全的大敵。關鍵時刻&#xff0c;交通氣象站挺身而出&#xff0c;成為保障道路暢通與行車安全的科技尖兵。交通氣象站專為復雜道路環境…

C++(面向對象之繼承、多態)

一、繼承前言在c里面&#xff0c;繼承是指2個類之間的關系例如&#xff1a;有一個org類&#xff0c;功能很完善&#xff0c;體量很大&#xff0c;突然有一天&#xff0c;需求發生改變&#xff0c;org類不能滿足新的需求&#xff0c;我們的第一想法是&#xff0c;復制 org 類代碼…

【數據可視化-75】北京密云區2025年7月暴雨深度分析:Python + Pyecharts 炫酷大屏可視化(含完整數據、代碼)

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Voxtral Mini:語音轉文本工具,支持超長音頻,多國語音

Voxtral是什么 Mistral AI 推出的 Voxtral 是一款強大的音頻模型&#xff0c;專為語音交互打造&#xff0c;具備卓越的語音轉寫和語義理解能力。它提供 24B 和 3B 兩種版本&#xff0c;分別適用于大規模生產和本地部署。Voxtral 支持多語言、長文本上下文、問答與總結&#xf…

React Native環境配置完整版(超詳細)

目錄 第一步&#xff1a;打開React Native官方網站 第二步&#xff1a;安裝NVM與Node.js 一、安裝NVM 二、使用NVM安裝Node.js 三、NVM使用說明 四、環境變量配置 第三步&#xff1a;安裝JDK 一、JDK介紹 二、下載與安裝JDK 三、環境配置 四、驗證是否配置成功 第四…

Rust 最短路徑、Tide、Partial、Yew、Leptos、數獨實踐案例

基于Rust的Meta和pyrefly相關實例 以下是一些基于Rust的Meta和pyrefly相關實例的示例代碼和用法。這些示例涵蓋了常見的使用場景,包括元編程、代碼生成、Python交互等。 基本元編程示例 使用Rust的宏和元編程功能生成代碼。 macro_rules! greet {($name:expr) => {prin…

Microsoft-DNN NTLM暴露漏洞復現(CVE-2025-52488)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 前…