Kubernetes – NodePort 服務

wongchaofan發表於2024-06-05

Kubernetes 中的 NodePort 服務是一種用於將應用程式公開到網際網路的服務,終端使用者可以從網際網路訪問它。如果您建立 NodePort 服務,Kubernetes 將分配 (30000-32767) 範圍內的埠。終端使用者可以使用節點的 IP 地址訪問該應用程式。

Kubernetes 服務的型別

Kubernetes 中,有 3 種型別的服務用於提供 pod 之間的發現和路由。

1. ClusterIP:它是預設服務,其可見性是叢集內部的,這意味著無法使用 clusterIP 服務從叢集外部從網際網路訪問微服務。

2. NodePort: NodePort 擴充套件了 ClusterIP 服務,其可見性在叢集內部和外部均可。您可以使用 NodePort屬性設定 NodePort ,這是服務將從叢集外部監聽的埠。使用 NodePort 有一個要求,即節點必須具有公共 IP 地址。埠必須在 30000 到 32767 之間,如果您不指定 NodePort 值,Kubernetes 將隨機分配它。

3. LoadBalancer:它在傳輸層(TCP)即第 4 層執行。這意味著它無法根據內容做出決策,而是使用簡單的演算法,例如在選定的路徑上使用迴圈。而Ingress在應用程式層(第 7 層)執行。它能夠根據每條訊息的實際內容做出決策。更智慧的負載平衡決策和內容最佳化。換句話說,Ingress就像一個LoadBalancer,但更智慧。

Kubernetes NodePort 服務

Kubernetes NodePort 服務用於將叢集中可用的節點暴露給叢集外部。它還將暴露節點中正在執行的應用程式,並允許外部流量藉助 NodePort 到達應用程式。

NodePort 服務示例

以下是 kubernetes NodePort 服務的示例 YAML 檔案。

apiVersion: v1
kind: Service
metadata:
  name: <Name Of the Service> 
spec:
  type: NodePort
  ports:
  - port: 80          # Port exposed within the cluster
    targetPort: 8080  # Port on the pods
    nodePort: 30000   # Port accessible externally on each node
  selector:
    app: example-app  # Select pods with this label

NodePort 服務如何工作?

NodePort 服務會將節點的 pod 暴露給另一個節點,並且還會將 pod 暴露給叢集外部,使用者可以從那裡使用節點的 IP 地址和埠從網際網路訪問。

以下是 NodePort 服務的示例 YAML 檔案。

apiVersion: v1

kind: Service

metadata:

name: my-service

spec:

selector:

app: my-app

type: NodePort

ports:

– protocol: TCP

port: 80

targetPort: 80

使用 NodePort 服務的步驟

步驟 1.建立部署。出於演示目的,我選擇 Nginx 作為我們的應用程式,並設定 2 個副本,您可以根據需要進行更改。

$ kubectl create deploy 
--image=nginx:1.23 nginx 
--replicas=2

步驟 2.使用 NodePort 公開服務

kubectl expose deploy nginx 
--type=NodePort --port=8080 
-target-port=80

我們將部署公開名為nginx-service 的NodePort服務

檢查您的服務(可選):

$ kubectl get svc nginx
-service -o wide

您可以看到我們已經成功使用NodePort公開了我們的服務

第 3 步:訪問您的應用程式

$ minikube service 
nginx-service --url

呼叫此函式後,您可以在瀏覽器中看到它:

正如您在上圖中所看到的,我們可以在叢集上執行的機器上訪問我們的應用程式,這隻有透過NodePort服務才有可能。

NodePort和ClusterIP之間的區別

節點埠

叢集IP

NodePort 服務將在每個 IP 地址上公開靜態埠,並且允許來自網際網路的流量訪問 pod。

在叢集內可訪問的內部 IP 地址上公開該服務。

如果您想將 pod 暴露給外部並且也想在叢集內部使用它,那麼您可以使用 NodePort。

如果您不想將 pod 暴露到外部並且需要將其用於內部用途,則可以使用 ClusterIP。

如果你需要像 Web 應用程式一樣公開應用程式,那麼你可以使用 NodePort 服務

主要用於內部目的,例如用於內部目的的資料庫 API 服務。

NodePort 服務用於在叢集外部公開應用程式,而 ClusterIP 僅用於內部訪問。

NodePort 服務常見問題解答

1.為什麼要使用NodePort?

NodePort 將應用程式公開到網際網路,終端使用者可以從那裡訪問在 kubernetes 叢集的 pod 內執行的應用程式。

2.NodePort 有外部 IP 嗎?

NodePort 服務使用叢集中節點的 IP 地址,它不包含任何外部 IP 地址。

3. Kubernetes NodePort 範圍

預設的nodeport範圍是30000-32767。這些是kubernetes將叢集中每個節點暴露給叢集外部的埠。

4. Kubernetes NodePort 服務無法訪問

以下是 Kubernetes 無法訪問的一些原因。

  • 埠對映不正確
  • 防火牆規則阻止流量
  • NodePort 未分配

相關文章