探索 Kubernetes 網絡穿透:如何從外部訪問 K8s Pod 地址

文章目錄

  • 探索 Kubernetes 網絡穿透:如何從外部訪問 K8s Pod 地址
  • 為什么需要外部訪問 Pod 地址?
  • 常見的網絡穿透方案
    • NodePort
    • LoadBalancer
    • Ingress
    • Port-Forward
    • HostNetwork
    • kt-connect:為開發調試提供便捷穿透
  • 實踐建議與注意事項
  • 各方案對比表
  • 總結


探索 Kubernetes 網絡穿透:如何從外部訪問 K8s Pod 地址

Kubernetes 內部的網絡模型設計旨在實現 Pod 之間的高效通信,但在實際生產和開發過程中,我們往往需要從集群外部訪問 Pod 內部的服務。本文將深入探討實現這一需求的各種方法,并分享最佳實踐。


為什么需要外部訪問 Pod 地址?

在 Kubernetes 集群中,Pod 默認擁有內部 IP 地址,這些地址僅在集群內可見。然而,在以下場景中,外部訪問 Pod 地址就顯得尤為重要:

  • 調試與開發:在開發階段,我們可能需要直接調試 Pod 內運行的服務,而不必進行完整的鏡像構建與部署。
  • 灰度測試:部分用戶流量需要路由到開發環境或者預發布版本,從而驗證新功能或配置的效果。
  • 特定場景:一些應用需要直接訪問 Pod 的網絡,如實時日志采集、性能測試等場景。

為了滿足這些需求,我們可以采用多種網絡穿透技術,下面逐一介紹。


常見的網絡穿透方案

NodePort

原理
通過 Service 的 NodePort 類型,將集群內的服務暴露在每個節點的固定端口上。外部訪問時,可以直接使用任一節點的 IP 地址和指定端口訪問服務。

優點

  • 實現簡單,適用于小型集群或開發測試環境。

缺點

  • 暴露的端口范圍有限(30000~32767)。
  • 生產環境下安全性和管理難度較高。

示例

apiVersion: v1
kind: Service
metadata:name: my-app
spec:type: NodePortselector:app: my-appports:- protocol: TCPport: 80          # 集群內部訪問端口targetPort: 8080  # Pod 內部容器端口nodePort: 30080   # 外部訪問端口

訪問方式:

http://<任一節點IP>:30080

LoadBalancer

原理
在云環境中,Service 類型為 LoadBalancer 會自動創建云廠商的負載均衡器,并分配外部 IP,從而將外部流量路由到集群內部。

優點

  • 自動管理外部 IP,配置簡單。
  • 與云平臺原生負載均衡深度集成,適合生產環境。

缺點

  • 裸機環境不支持,可結合 MetalLB 解決。
  • 成本較高,依賴云服務提供商。

示例

apiVersion: v1
kind: Service
metadata:name: my-app
spec:type: LoadBalancerselector:app: my-appports:- protocol: TCPport: 80targetPort: 8080

訪問方式:
通過 kubectl get svc my-app 獲取外部 IP,然后直接訪問即可。


Ingress

原理
Ingress 通過配置路由規則,將外部域名或 URL 映射到后端 Service,通常與反向代理(如 NGINX、Traefik)配合使用。

優點

  • 支持 HTTPS、域名路由等高級功能。
  • 可以集中管理多個服務的外部訪問入口。

缺點

  • 需要部署 Ingress Controller,配置較復雜。
  • 對于簡單場景來說,可能顯得大材小用。

示例

  1. 部署 Ingress Controller(以 NGINX Ingress 為例):
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
    
  2. 創建 Ingress 規則
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:name: my-app-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
    spec:rules:- host: myapp.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-appport:number: 80
    

訪問方式:
通過域名 myapp.example.com 訪問前提是 DNS 指向 Ingress Controller 的外部 IP。


Port-Forward

原理
使用 kubectl port-forward 命令,將本地端口與指定 Pod 端口進行映射,從而實現臨時訪問。

優點

  • 非常適合調試和臨時訪問,無需額外暴露服務。

缺點

  • 僅適用于開發或運維人員的臨時使用,不適合生產環境。

示例

kubectl port-forward pod/my-app-pod 8080:80

訪問方式:

http://localhost:8080

HostNetwork

原理
將 Pod 配置為使用宿主機的網絡命名空間,這樣 Pod 將直接使用節點的 IP 地址。

優點

  • 直接、快速,適用于某些特殊場景。

缺點

  • 會導致 Pod 與宿主機共享 IP,可能引起端口沖突。
  • 安全性和隔離性較差,不推薦在生產環境中使用。

示例

apiVersion: v1
kind: Pod
metadata:name: my-app
spec:hostNetwork: truecontainers:- name: my-appimage: my-app-imageports:- containerPort: 80

訪問方式:

http://<節點IP>:80

kt-connect:為開發調試提供便捷穿透

可以看專欄,有一個博文專門寫了個這個部署以及應用

原理
kt-connect 是一款由阿里巴巴開源的網絡穿透工具,它通過在集群中創建 Shadow Pod,將本地網絡與 Kubernetes 集群內部網絡打通,支持雙向穿透。

應用場景

  • 本地調試:讓本地開發環境直接訪問集群內部服務。
  • 灰度測試:本地服務替換集群中的部分服務,驗證新功能或調試問題。

安裝方式

  • Linux / Mac
    curl -L https://github.com/alibaba/kt-connect/releases/latest/download/ktctl -o ktctl
    chmod +x ktctl
    sudo mv ktctl /usr/local/bin/
    
  • Windows:下載 ktctl.exe 并將其加入 PATH

使用示例

  1. 將本地網絡穿透至 Kubernetes 集群

    ktctl connect
    

    此命令會在集群內創建一個 Shadow Pod,從而讓本機變成集群的一部分。這樣,你可以直接通過集群內部 DNS 或 IP 訪問內部服務:

    curl http://my-service.default.svc.cluster.local:8080
    
  2. 將本地服務暴露給集群

    ktctl serve -d 8080
    

    當本地啟動一個服務(例如使用 python3 -m http.server 8080),集群中的 Pod 可以通過代理服務訪問本地服務:

    curl http://my-local-app.default.svc.cluster.local:8080
    

優點

  • 實現快速穿透,無需重復打包和部署。
  • 靈活適用于開發調試和局部灰度測試。

缺點

  • 不建議在正式生產環境中使用,僅限調試場景。

實踐建議與注意事項

在選擇合適的網絡穿透方案時,應考慮以下幾個因素:

  • 使用場景:如果是開發調試,可以優先選擇 Port-Forward 或 kt-connect;若需正式對外服務,則建議使用 Ingress 或 LoadBalancer。
  • 安全性:暴露內部服務到外部網絡會帶來潛在安全風險,務必做好訪問控制和防火墻配置。
  • 性能與擴展性:大規模生產環境應優先考慮負載均衡和高可用方案,確保系統穩定。
  • 成本與運維:云平臺的負載均衡器可能產生額外費用;裸機環境下則需考慮額外部署解決方案(如 MetalLB)。

各方案對比表

方案類型適用場景優點缺點備注
NodePort小規模集群、開發調試配置簡單,直接使用任一節點 IP 和固定端口即可訪問端口范圍有限,安全性和運維管理較弱適合臨時測試,不推薦生產環境使用
LoadBalancer云環境生產部署自動分配外部 IP,與云平臺負載均衡服務深度集成裸機環境不適用(可借助 MetalLB 替代),依賴云服務成本較高,適用于云平臺
Ingress生產環境、支持域名路由與 HTTPS支持多域名、HTTPS、靈活的 URL 路由,集中管理外部訪問入口需部署 Ingress Controller,配置較復雜推薦在生產環境中使用,可結合 Cert-Manager 實現自動證書管理
Port-Forward臨時調試和排查問題實現快速穿透,無需額外暴露服務僅適用于開發和運維人員的臨時使用,不適合長期或大規模使用主要用于調試和測試
HostNetwork特定場景或性能調優直接使用宿主機網絡,訪問延遲低安全性較差,容易引發端口沖突,不利于網絡隔離不建議用于生產環境,僅適合少數特殊需求
kt-connect本地開發調試、灰度測試快速穿透集群網絡,支持雙向映射(本地 ? 集群),無需重復部署僅適用于調試和灰度測試場景,不建議用于正式對外服務適合開發調試場景,可減少頻繁打包和部署的開銷

總結

在 Kubernetes 中實現網絡穿透、外部訪問 Pod 地址可以通過多種方式實現,每種方案各有優缺點。

  • NodePortPort-Forward 適合開發調試。
  • LoadBalancerIngress 更適合生產環境;
  • HostNetwork 用于特殊場景;
  • kt-connect 為開發者提供了快速而靈活的調試手段。

選擇合適的方案需要根據實際場景權衡安全性、擴展性和易用性。希望本文能為你在 Kubernetes 網絡穿透領域提供有價值的參考與啟示!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74191.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74191.shtml

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

相關文章

深入理解 Apache Dagster:數據管道編排實戰指南

本文系統介紹了 Apache Dagster 的核心概念與實踐方法&#xff0c;涵蓋環境搭建、管道定義、運行調試及高級功能&#xff0c;幫助開發者快速掌握這一現代化數據編排工具&#xff0c;提升數據工程效率。 1. 背景與核心優勢 隨著數據驅動應用的復雜化&#xff0c;傳統工具在可維…

Minio集群部署

Minio集群部署 資源規劃 IP服務規劃配置192.168.116.138minio-116核32G磁盤10T192.168.116.139minio-216核32G磁盤10T192.168.116.140minio-316核32G磁盤10T192.168.116.141minio-416核32G磁盤10T192.168.116.128nginx代理8核16G磁盤500G 基本環境配置 下面命令minio4臺設備…

操作系統高頻(六)linux內核

操作系統高頻&#xff08;六&#xff09;linux內核 1.內核態&#xff0c;用戶態的區別??? 內核態和用戶態的區別主要在于權限和安全性。 權限&#xff1a;內核態擁有最高的權限&#xff0c;可以訪問和執行所有的系統指令和資源&#xff0c;而用戶態的權限相對較低&#x…

強大而易用的JSON在線處理工具

強大而易用的JSON在線處理工具&#xff1a;程序員的得力助手 在當今的軟件開發世界中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已經成為了數據交換的通用語言。無論是前端還是后端開發&#xff0c;我們都經常需要處理、驗證和轉換JSON數據。今天&a…

【學習記錄】pytorch載入模型的部分參數

需要從PointNet網絡框架中提取encoder部分的參數&#xff0c;然后賦予自己的模型。因此&#xff0c;需要從一個已有的.pth文件讀取部分參數&#xff0c;加載到自定義模型上面。做了一些嘗試&#xff0c;記錄如下。 關于模型保存與載入 torch.save(): 使用Python的pickle實用程…

【藍橋杯14天沖刺課題單】Day 8

1.題目鏈接&#xff1a;19714 數字詩意 這道題是一道數學題。 先考慮奇數&#xff0c;已知奇數都可以表示為兩個相鄰的數字之和&#xff0c;2k1k(k1) &#xff0c;那么所有的奇數都不會被計入。 那么就需要考慮偶數什么情況需要被統計。根據打表&#xff0c;其實可以發現除了…

鴻蒙ArkTS開發:微信/系統來電通話監聽功能實現

本文將介紹如何在鴻蒙應用中使用ArkTS實現通話監聽和錄音功能&#xff0c;利用harmony-utils工具庫簡化開發流程。 工具庫地址 一、功能概述 本實現包含以下核心功能&#xff1a; 通話狀態監聽&#xff1a;檢測來電、去電和通話中狀態 音頻流監控&#xff1a;通過麥克風使用…

NFS 重傳次數速率監控

這張圖展示的是 NFS 重傳次數速率監控&#xff0c;具體解釋如下&#xff1a; 1. 指標含義 監控指標 node_nfs_rpc_retransmissions_total 統計 NFS&#xff08;網絡文件系統&#xff09;通信中 RPC&#xff08;遠程過程調用&#xff09;的重傳次數&#xff0c;rate(node_nfs_…

【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的國際化:支持多語言的 RESTful API

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、開篇整…

黑帽SEO之搜索引擎劫持-域名劫持原理分析

問題起源 這是在《Web安全深度剖析》的第二章“深入HTTP請求流程”的2.3章節“黑帽SEO之搜索引擎劫持”提到的內容&#xff0c;但是書中描述并不詳細&#xff0c;沒有講如何攻擊達到域名劫持的效果。 書中對SEO搜索引擎劫持的現象描述如下&#xff1a;直接輸入網站的域名可以進…

theos工具來編譯xcode的swiftUI項目為ipa文件

Theos 是一個開源的開發工具套件&#xff0c;主要用于為 iOS/macOS 平臺開發和編譯 越獄插件&#xff08;Tweaks&#xff09;、動態庫、命令行工具等。它由 Dustin Howett 創建&#xff0c;并被廣泛用于越獄社區的開發中。但這里我主要使用它的打包ipa功能&#xff0c;因為我的…

25.4.1學習總結【Java】

動態規劃題 2140. 解決智力問題https://leetcode.cn/problems/solving-questions-with-brainpower/ 給你一個下標從 0 開始的二維整數數組 questions &#xff0c;其中 questions[i] [pointsi, brainpoweri] 。 這個數組表示一場考試里的一系列題目&#xff0c;你需要 按順…

計算機網絡知識點匯總與復習——(二)物理層

Preface 計算機網絡是考研408基礎綜合中的一門課程&#xff0c;它的重要性不言而喻。然而&#xff0c;計算機網絡的知識體系龐大且復雜&#xff0c;各類概念、協議和技術相互關聯&#xff0c;讓人在學習時容易迷失方向。在進行復習時&#xff0c;面對龐雜的的知識點&#xff0c…

string的底層原理

一.構造函數 我們來看一下&#xff0c;string的底層就是一個字符型指針和一個size來表示string的大小&#xff0c;capacity來表示分配的內存大小。 我們來看我們注釋掉的第一個構造函數&#xff0c;我們是通過初始化列表來初始化size的大小&#xff0c;再通過size的大小來初始化…

Python FastAPI + Celery + RabbitMQ 分布式圖片水印處理系統

FastAPI 服務器Celery 任務隊列RabbitMQ 作為消息代理定時任務處理 首先創建項目結構&#xff1a; c:\Users\Administrator\Desktop\meitu\ ├── app/ │ ├── __init__.py │ ├── main.py │ ├── celery_app.py │ ├── tasks.py │ └── config.py…

【藍橋杯】每日練習 Day18

目錄 前言 動態求連續區間和 分析 代碼 數星星 分析 代碼 星空之夜 分析 代碼 前言 接下來是今天的題目&#xff08;本來是有四道題的但是有一道題是前面講過&#xff08;逆序數的&#xff0c;感興趣的小伙伴可以去看我歸并排序的那一篇&#xff09;的我就不再過多贅…

基于銀河麒麟桌面服務器操作系統的 DeepSeek本地化部署方法【詳細自用版】

一、3種方式使用DeepSeek 1.本地部署 服務器操作系統環境進行,具體流程如下(桌面環境步驟相同): 本例所使用銀河麒麟高級服務器操作系統版本信息: (1)安裝ollama 方式一:按照ollama官網的下載指南,執行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…

Python入門(7):Python序列結構-字典

字典Dictionary 字典(dictionary)和列表類似&#xff0c;也是可變序列&#xff0c;不過與列表不同&#xff0c;它是無序的可變序列&#xff0c;保存的為容是以“鍵-值對”的形式存放的。 Python 中的字典相當于 Java 或者 C中的 Map 對象。在C#中,就是Dictionary<TKey,TVa…

Flutter項目之構建打包分析

目錄&#xff1a; 1、準備部分2、構建Android包2.1、配置修改部分2.2、編譯打包 3、構建ios包3.1、配置修改部分3.2、編譯打包 1、準備部分 2、構建Android包 2.1、配置修改部分 2.2、編譯打包 執行flutter build apk命令進行打包。 3、構建ios包 3.1、配置修改部分 3.2、編譯…

不用再付費~全網書源一鍵下載,實現閱讀自由!!!

現在市面上有許多免費你看書的軟件&#xff0c;但都軟件內太多廣告彈窗&#xff0c;這無疑是很煩&#xff0c;有事一不小心點進去就下載了軟件&#xff0c;簡直讓人頭大&#xff01; 如果你遇到這樣的難題那么就應該看下本文~ 這是一款能一鍵將在線連載小說整合下載成標準格式&…