k8s中service概述(二)NodePort

NodePort 是 Kubernetes 中一種用于對外暴露服務的 Service 類型。它通過在集群的每個節點上開放一個靜態端口(NodePort),使得外部用戶可以通過節點的 IP 地址和該端口訪問集群內部的服務。以下是關于 NodePort Service 的詳細說明:


1. NodePort 的核心功能
  • 外部訪問:NodePort 允許外部用戶通過集群中任意節點的 IP 地址和指定的端口訪問服務。

  • 端口映射:NodePort 會在每個節點上開放一個靜態端口(默認范圍是 30000-32767),并將該端口的流量轉發到后端的 Pod。

  • 負載均衡:與 ClusterIP 類似,NodePort 也會自動將流量負載均衡到后端的多個 Pod。

  • 集群內部訪問:NodePort Service 也會分配一個 ClusterIP,因此集群內部仍然可以通過 ClusterIP 訪問服務。


2. NodePort 的工作原理

NodePort 的實現依賴于 Kubernetes 的網絡模型和核心組件:

  1. Service 創建

    • 當創建一個 NodePort Service 時,Kubernetes 會為其分配一個 ClusterIP,并在每個節點上開放一個靜態端口(NodePort)。

    • NodePort 的默認范圍是 30000-32767,但可以手動指定。

  2. Endpoints 創建

    • 與 ClusterIP 類似,Kubernetes 會自動創建與 Service 同名的 Endpoints 對象,其中包含所有匹配 selector 的 Pod 的 IP 和端口。

  3. kube-proxy 的作用

    • 每個節點上的 kube-proxy 組件會監聽 Service 和 Endpoints 的變化。

    • kube-proxy 通過以下方式實現流量轉發:

      • iptables 模式:在節點上配置 iptables 規則,將流量從 NodePort 轉發到后端 Pod。

      • IPVS 模式:使用更高效的 IPVS 實現流量轉發。

    • 無論使用哪種模式,kube-proxy 都會確保流量被正確負載均衡到后端 Pod。

  4. 外部訪問

    • 外部用戶可以通過任意節點的 IP 地址和 NodePort 訪問服務。

    • 例如,如果 NodePort 為 31000,節點的 IP 地址為 192.168.1.100,則外部用戶可以通過 http://192.168.1.100:31000 訪問服務。


3. NodePort 的配置示例

以下是一個典型的 NodePort Service 的 YAML 配置文件:

apiVersion: v1
kind: Service
metadata:name: my-service  # Service 名稱namespace: default  # 命名空間,默認為 default
spec:type: NodePort  # Service 類型selector:app: my-app  # 選擇標簽為 app=my-app 的 Podports:- protocol: TCP  # 協議類型,支持 TCP、UDP、SCTPport: 80  # Service 暴露的端口targetPort: 9376  # 后端 Pod 的端口nodePort: 31000  # 手動指定的 NodePort,范圍為 30000-32767
  • selector:用于選擇后端 Pod,只有匹配標簽的 Pod 才會被納入 Service 的后端。

  • ports

    • port:Service 暴露的端口,集群內的其他服務通過該端口訪問 Service。

    • targetPort:后端 Pod 實際監聽的端口。

    • nodePort:手動指定的 NodePort,范圍為 30000-32767。如果不指定,Kubernetes 會自動分配一個可用的端口。

  • type:Service 類型,這里設置為 NodePort


4. NodePort 的使用場景

NodePort 適用于以下場景:

  1. 開發和測試環境

    • 在開發和測試環境中,NodePort 可以快速暴露服務,方便外部訪問和調試。

  2. 小型生產環境

    • 在小型生產環境中,如果沒有負載均衡器,可以使用 NodePort 暴露服務。

  3. 特殊需求

    • 某些場景下,可能需要直接通過節點的 IP 地址訪問服務,例如某些網絡設備或舊系統。

  4. 與 LoadBalancer 結合使用

    • 在云環境中,NodePort 通常與 LoadBalancer 結合使用,LoadBalancer 會將外部流量導入 NodePort。


5. NodePort 的優缺點

優點

  • 簡單易用,快速暴露服務。

  • 不需要額外的負載均衡器,適合小型環境。

  • 可以在任意節點上訪問服務,具有較高的可用性。

缺點

  • 端口范圍有限(30000-32767),可能與現有服務沖突。

  • 直接暴露節點的 IP 地址,可能存在安全風險。

  • 需要手動管理節點的 IP 地址,不適合大規模生產環境。


6. NodePort 的調試和排查
  1. 查看 Service 信息

    kubectl get svc <service-name>

    輸出示例:

    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    my-service   NodePort    10.96.123.45    <none>        80:31000/TCP   5m
  2. 查看 Endpoints

    kubectl get endpoints <service-name>

    輸出示例:

    NAME         ENDPOINTS                         AGE
    my-service   10.244.1.2:9376,10.244.2.3:9376   5m
  3. 檢查節點端口

    • 登錄到節點,檢查 NodePort 是否正常開放:

      netstat -tuln | grep 31000
  4. 檢查 kube-proxy 和 iptables/IPVS 規則

    • 登錄到節點,檢查 iptables 或 IPVS 規則是否正常配置。


7. 總結

NodePort 是 Kubernetes 中用于對外暴露服務的 Service 類型,它通過在集群的每個節點上開放一個靜態端口,使得外部用戶可以通過節點的 IP 地址和該端口訪問集群內部的服務。NodePort 簡單易用,適合開發和測試環境,但在生產環境中通常需要結合 LoadBalancer 或 Ingress 使用,以提供更高的可用性和安全性。

使用 NodePort 暴露 Nginx 服務的示例

以下是一個完整的示例,展示如何在 Kubernetes 中使用 NodePort Service 暴露一個 Nginx 服務。這個示例包括:

  1. 部署一個 Nginx Pod。

  2. 創建一個 NodePort Service 來暴露 Nginx 服務。


1. 創建 Nginx 部署

首先,創建一個 Deployment 來運行 Nginx Pod。以下是一個簡單的 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment  # 部署名稱labels:app: nginx  # 標簽,用于 Service 選擇
spec:replicas: 3  # 副本數selector:matchLabels:app: nginx  # 選擇器,匹配 Pod 標簽template:metadata:labels:app: nginx  # Pod 標簽spec:containers:- name: nginx  # 容器名稱image: nginx:latest  # 使用官方 Nginx 鏡像ports:- containerPort: 80  # 容器監聽的端口

將上述內容保存為 nginx-deployment.yaml,然后使用以下命令創建 Deployment:

kubectl apply -f nginx-deployment.yaml

2. 創建 NodePort Service

接下來,創建一個 NodePort Service 來暴露 Nginx 服務。以下是一個簡單的 YAML 文件:

apiVersion: v1
kind: Service
metadata:name: nginx-service  # Service 名稱
spec:type: NodePort  # Service 類型selector:app: nginx  # 選擇標簽為 app=nginx 的 Podports:- protocol: TCP  # 協議類型port: 80  # Service 暴露的端口targetPort: 80  # 后端 Pod 的端口nodePort: 30080  # 手動指定的 NodePort,范圍為 30000-32767

將上述內容保存為 nginx-service.yaml,然后使用以下命令創建 Service:

kubectl apply -f nginx-service.yaml

3. 驗證部署和 Service
  1. 查看 Deployment 狀態

    kubectl get deployments

    輸出示例:

    
    
  2. 查看 Pod 狀態

    kubectl get pods
    
    
    
  3. 查看 Service 狀態

    kubectl get svc nginx-service
    
    
    

4. 訪問 Nginx 服務
  1. 獲取節點的 IP 地址

    使用kubect get nodes -o wide獲取節點信息
    • 輸出示例:

      
      
    • 可以發現節點ip
    • 如果你在云環境或物理機中,可以使用節點的公網或內網 IP。

  2. 通過 NodePort 訪問 Nginx

    • 打開瀏覽器,訪問 http://<NodeIP>:30080

    • 例如,如果節點 IP 是 192.168.30.130,則訪問 http://192.168.30.130:30080

    • 你應該會看到 Nginx 的默認歡迎頁面。

    • 可以在外部瀏覽器看到ngnix的頁面


5. 清理資源

完成測試后,可以刪除 Deployment 和 Service:

kubectl delete -f nginx-deployment.yaml
kubectl delete -f nginx-service.yaml

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

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

相關文章

HTML5 Video標簽詳細教程

HTML5 Video標簽詳細教程 簡介 HTML5引入的<video>標簽為網頁提供了原生視頻播放功能&#xff0c;無需依賴Flash等第三方插件。它使得在網頁中嵌入和控制視頻內容變得簡單而強大。本教程將詳細介紹<video>標簽的使用方法、屬性、事件以及相關技術。 基本用法 最…

Linux系統崩潰破案實錄

現代計算環境中&#xff0c;系統的穩定性和可靠性至關重要。然而&#xff0c;即使是最優化的系統也可能會由于硬件故障、軟件漏洞或配置錯誤而崩潰。為了解決這一問題&#xff0c;Linux系統提供了強大的內核崩潰轉儲機制&#xff0c;本文介紹如何收集和分析崩潰日志&#xff0c…

tcping 命令的使用,ping IP 和端口

1. ?Windows系統安裝? ?下載tcping工具?&#xff1a;根據系統位數&#xff08;32位或64位&#xff09;下載對應的tcping.exe文件。?安裝步驟?&#xff1a; 將下載的tcping.exe文件復制到C:\Windows\System32目錄下。如果下載的是64位版本&#xff0c;需將文件名改為tcpi…

深度學習框架PyTorch——從入門到精通(6.1)自動微分

使用torch.autograd自動微分 張量、函數和計算圖計算梯度禁用梯度追蹤關于計算圖的更多信息張量梯度和雅可比乘積 在訓練神經網絡時&#xff0c;最常用的算法是反向傳播。在該算法中&#xff0c;參數&#xff08;模型權重&#xff09;根據損失函數的梯度相對于給定參數進行調整…

跟我學C++中級篇——std::not_fn

一、std::not_fn定義和說明 std::not_fn這個模板函數非常有意思&#xff0c;在前面我們學習過wrapper&#xff08;包裝器&#xff09;&#xff0c;其實它就是通過封裝一個包裝器來實現返回值的非。它的基本定義如下&#xff1a; template< class F > /* 未指定 */ not_…

階躍星辰開源300億參數視頻模型Step-Video-TI2V:運動可控+102幀長視頻生成

階躍星辰&#xff08;StepFun&#xff09;正式開源其新一代圖生視頻模型 Step-Video-TI2V &#xff0c;該模型基于300億參數的Step-Video-T2V訓練&#xff0c;支持文本與圖像聯合驅動生成長達102幀的高質量視頻&#xff0c;在運動控制與場景適配性上實現突破。 核心亮點 …

java查詢es超過10000條數據

java查詢es超過10000條數據 背景:需要每天零點導出es中日志數據到數據庫中給數據分析人員做清洗&#xff0c;然后展示給業務人員。但在es中默認一次最多只能查詢10000條數據。 在這里我就只貼一下關鍵代碼 SearchRequest searchRequest new SearchRequest("索引名"…

使用 libevent 構建高性能網絡應用

使用 libevent 構建高性能網絡應用 在現代網絡編程中&#xff0c;高性能和可擴展性是開發者追求的核心目標。為了實現這一目標&#xff0c;許多開發者選擇使用事件驅動庫來管理 I/O 操作和事件處理。libevent 是一個輕量級、高性能的事件通知庫&#xff0c;廣泛應用于網絡服務…

HeyGem.ai 全離線數字人生成引擎加入 GitCode:開啟本地化 AIGC 創作新時代

在人工智能技術飛速演進的時代&#xff0c;數據隱私與創作自由正成為全球開發者關注的焦點。硅基智能旗下開源項目 HeyGem.ai 近日正式加入 GitCode&#xff0c;以全球首個全離線數字人生成引擎的顛覆性技術&#xff0c;重新定義人工智能生成內容&#xff08;AIGC&#xff09;的…

【leetcode hot 100 39】組合總和

錯誤解法一&#xff1a;每一次回溯都遍歷提供的數組 class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integer> te…

VSCODE右下角切換環境沒用

VSCODE惦記右下角python版本&#xff0c;切換別的虛擬環境時&#xff0c;始終切換不了&#xff0c;同時右下角彈出&#xff1a; Client Pylance: connection to server is erroring. 取消繼承環境也改了。https://www.cnblogs.com/coreylin/p/17509610.html 還是不行&#xf…

【sql靶場】第23、25,25a關過濾繞過保姆級教程

目錄 【sql靶場】第23、25-28關過濾繞過保姆級教程 第二十三關 第二十五關 1.爆出數據庫 2.爆出表名 3.爆出字段 4.爆出賬號密碼 【sql靶場】第23、25&#xff0c;25a關過濾繞過保姆級教程 第二十三關 從本關開始又是get傳參&#xff0c;并且還有了對某些字符或字段的過…

python每日十題(5)

保留字&#xff0c;也稱關鍵字&#xff0c;是指被編程語言內部定義并保留使用的標識符。Python 3.x版本中有35個保留字&#xff0c;分別為&#xff1a;and, as,assert,async,await,break,class,continue,def,del,elif,else, except, False, finally,for,from,global, if,import…

Pytorch使用手冊—自定義 C++ 和 CUDA 擴展(專題五十二)

提示 從 PyTorch 2.4 開始,本教程已被廢棄。請參考 PyTorch 自定義操作符,了解關于通過自定義 C++/CUDA 擴展擴展 PyTorch 的最新指南。 PyTorch 提供了大量與神經網絡、任意張量代數、數據處理等相關的操作。然而,您可能仍然會發現自己需要一個更自定義的操作。例如,您可能…

CHM(ConcurrentHashMap)中的 sizeCtl 的作用與值變化詳解

學海無涯&#xff0c;志當存遠。燃心礪志&#xff0c;奮進不輟。愿諸君得此雞湯&#xff0c;如沐春風&#xff0c;學業有成。若覺此言甚善&#xff0c;煩請賜贊一枚&#xff0c;共勵學途&#xff0c;同鑄輝煌 ConcurrentHashMap常簡寫為CHM&#xff0c;尤其是在討論并發編程時。…

VLAN綜合實驗報告

一、實驗拓撲 網絡拓撲結構包括三臺交換機&#xff08;LSW1、LSW2、LSW3&#xff09;、一臺路由器&#xff08;AR1&#xff09;以及六臺PC&#xff08;PC1-PC6&#xff09;。交換機之間通過Trunk鏈路相連&#xff0c;交換機與PC、路由器通過Access或Hybrid鏈路連接。 二、實驗…

OpenGL ES ->計算多個幀緩沖對象(Frame Buffer Object)+疊加多個濾鏡作用后的Bitmap

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"><…

Java線程池深度解析:從使用到調優

適合人群&#xff1a;Java中級開發者 | 并發編程入門者 | 系統調優實踐者 目錄 一、引言&#xff1a;為什么線程池是Java并發的核心&#xff1f; 二、線程池核心知識點詳解 1. 線程池核心參數與原理 2. 線程池的創建與使用 (1) 基礎用法示例 (2) 內置線程池的隱患 3. 線…

【工具變量】全國地級市地方ZF債務數據集(2014-2023年)

地方ZF債務是地方財政運作的重要組成部分&#xff0c;主要用于基礎設施建設、公共服務及經濟發展&#xff0c;是衡量地方財政健康狀況的重要指標。近年來&#xff0c;我國地級市的地方ZF債務規模不斷變化&#xff0c;涉及一般債務和專項債務等多個方面&#xff0c;對金融市場、…

大模型訓練的調參與算力調度技術分析

大模型訓練的調參與算力調度 雖然從網絡上&#xff0c;還有通過和大模型交流&#xff0c;了解了很多訓練和微調的技術。但沒有實踐&#xff0c;也沒有什么機會實踐。因為大模型訓練門檻還是挺高的&#xff0c;想要有一手資料比較困難。如果需要多機多卡&#xff0c;硬件成本小…