Kubernetes 中的 NodePort 服務是一種用於將應用程式公開到網際網路的服務,終端使用者可以從網際網路訪問它。如果您建立 NodePort 服務,Kubernetes 將分配 (30000-32767) 範圍內的埠。終端使用者可以使用節點的 IP 地址訪問該應用程式。
Kubernetes 服務的型別
在Kubernetes 中,有 3 種型別的服務用於提供 pod 之間的發現和路由。
1. ClusterIP:它是預設服務,其可見性是叢集內部的,這意味著無法使用 clusterIP 服務從叢集外部從網際網路訪問微服務。
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 未分配