IBM Cloud Docs
使用 NodePort 測試對應用程式的存取

使用 NodePort 測試對應用程式的存取

Virtual Private Cloud 標準基礎架構 Satellite

使用 Kubernetes 叢集裡任何工作者節點的公用 IP 位址,並公開 NodePort,將容器化應用程式設為可在網際網路上進行存取。 使用此選項,在 IBM Cloud® Kubernetes Service 進行測試,以及進行短期公用存取。

關於 NodePorts

公開工作者節點上的公用埠,並使用工作者節點的公用 IP 位址,從網際網路中公開存取您在叢集裡的服務。

當您建立 Kubernetes NodePort 類型服務來公開應用程式時,會將 30000 到 32767 範圍內的 NodePort 及內部叢集 IP 位址指派給服務。 NodePort 服務是作為應用程式送入要求的外部進入點。 所指派的 NodePort 會以公用方式公開叢集裡每個工作者節點的 kubeproxy 設定。 每個工作者節點都會開始接聽所指派的 NodePort,來取得服務的送入要求。 若要從 Internet 存取該服務,您可以使用在叢集建立期間指派的任何工作節點的公用 IP 位址以及格式為 <IP_address>:<nodeport> 的NodePort。 如果要存取專用網路上的服務,請使用任何工作者節點的專用 IP 位址,而不要使用公用 IP 位址。

下圖顯示配置 NodePort 服務時,通訊如何從網際網路導向至應用程式。

使用 NodePort 公開IBM Cloud Kubernetes Service中的應用
使用NodePort公開應用

  1. 使用工作者節點的公用 IP 位址以及工作者節點上的 NodePort,將要求傳送至應用程式。

  2. 要求會自動轉遞至 NodePort 服務的內部叢集 IP 位址及埠。 內部叢集 IP 位址只能在叢集內部存取。

  3. kube-proxy 會將要求遞送至應用程式的 Kubernetes NodePort 服務。

  4. 要求會轉遞至應用程式部署所在 Pod 的專用 IP 位址。 如果叢集裡已部署多個應用程式實例,則 NodePort 服務會在應用程式 Pod 之間遞送要求。

工作者節點的公用 IP 位址不是永久性的。 移除或重建工作者節點時,會將新的公用 IP 位址指派給工作者節點。 NodePort 服務可以用於測試應用程式的公用存取,也可以用於僅短時間需要公用存取時。 當您需要服務有穩定的公用 IP 位址及更高可用性時,請使用網路負載平衡器 (NLB) 服務Ingress 來公開應用程式。

使用 NodePort 服務來啟用應用程式的存取

將應用程式公開為 Kubernetes NodePort 服務。

由於 VPC 叢集中的工作執行緒節點沒有公用 IP 位址,因此只有當您連接到私人 VPC 網路(例如透過 VPN 連線)時,您才可以透過NodePort存取應用程式。 若要從網際網路存取應用程式,必須改為使用 VPC 負載平衡器Ingress 服務。

如果您還沒有準備好應用程序,則可以使用名為 Guestbook的Kubernetes範例應用程式。

開始之前

要使用NodePort,

  1. 在應用程式的設定檔中,定義一個 服務部分。

    就 Guestbook 範例而言,配置檔中存在前端服務區段。 若要讓 Guestbook 應用程式可在外部使用,請新增 NodePort 類型及範圍 30000 - 32767 內的 NodePort 至前端服務區段。

    範例

    apiVersion: v1
    kind: Service
    metadata:
      name: <my-nodeport-service>
      labels:
        <my-label-key>: <my-label-value>
    spec:
      selector:
        <my-selector-key>: <my-selector-value>
      type: NodePort
      ports:
       - port: <8081>
         # nodePort: <31514>
    
    
    瞭解 NodePort 服務元件
    元件 說明
    name <my-nodeport-service> 替換為您的NodePort服務的名稱。 進一步瞭解使用 Kubernetes 資源時如何保護個人資訊安全
    labels <my-label-key><my-label-value> 替換為您要用於服務的標籤。
    selector <my-selector-key><my-selector-value> 替換為您在部署 YAML 的 spec.template.metadata.labels 部分中使用的鍵/值對。 若要建立服務與部署的關聯,選取器必須符合部署標籤。
    port <8081> 替換為您的服務偵聽的連接埠。
    nodePort 可選:將 <31514> 替換為 30000 - 32767 範圍內的NodePort。 請不要指定另一個服務已在使用中的 NodePort。 如果未指派 NodePort,則會自動指派一個隨機 NodePort。
    若要指定NodePort並查看哪些NodePorts已在使用中,請執行 kubectl get svc 指令。 使用中的任何 NodePort 會出現在欄位下。
  2. 儲存已更新的配置檔。

  3. 部署應用程式時,您可以使用任何工作者節點的公用 IP 位址以及 NodePort 來形成可在瀏覽器中存取應用程式的公用 URL。 如果您的工作者節點只連接至專用 VLAN,則已建立專用 NodePort 服務,而且可以透過工作者節點的專用 IP 位址進行存取。

    1. 取得叢集裡工作者節點的公用 IP 位址。 如果您想存取私網的worker節點或擁有VPC集群,請取得私網IP位址。

      ibmcloud ks worker ls --cluster <cluster_name>
      

      輸出

      ID                                                Public IP   Private IP    Size     State    Status
      prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w1  192.0.2.23  10.100.10.10  u3c.2x4  normal   Ready
      prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w2  192.0.2.27  10.100.10.15  u3c.2x4  normal   Ready
      
    2. 如果已指派隨機 NodePort,請找出已指派的 NodePort。

      kubectl describe service <service_name>
      

      輸出

      NAME:                   <service_name>
      Namespace:              default
      Labels:                 run=<deployment_name>
      Selector:               run=<deployment_name>
      Type:                   NodePort
      IP:                     10.10.10.8
      Port:                   <unset> 8080/TCP
      NodePort:               <unset> 30872/TCP
      Endpoints:              172.30.171.87:8080
      Session Affinity:       None
      No events.
      

      在此範例中,NodePort 是 30872

      如果端點部分顯示 <none>,請檢查您在NodePort服務的 spec.selector 部分中使用的 <selectorkey><selectorvalue>。 確保它與您在部署 YAML 的 spec.template.metadata.labels 部分中使用的_鍵/值_對相同。

    3. 形成具有其中一個工作者節點 IP 位址及 NodePort 的 URL。 例:http://192.0.2.23:30872。 若為 VPC 叢集,您必須連接至專用網路 (例如透過 VPN 連線),才能存取工作者節點專用 IP 位址及 NodePort。