配置 VPC 子網路

虛擬私有雲

透過在您的 IBM Cloud® Kubernetes Service VPC 叢集中新增子網,來變更可用的可攜式公網或私網 IP 位址池。

本頁面的內容專指 VPC 叢集。 如需標準叢集的相關資訊,請參閱 配置標準叢集的子網路及 IP 位址

IBM Cloud Kubernetes Service 中的 VPC 網路概觀

了解 IBM Cloud Kubernetes Service 叢集中 VPC 網路的基本概念。

子網路

在首次建立 VPC 叢集之前,您必須在每個欲部署工作節點的區域中,建立一個 VPC 子網。 VPC 子網是一個指定的私有 IP 位址範圍(CIDR 區塊),可將一組工作節點和 Pod 配置為彷彿它們連接在同一條實體線路上一般。

建立叢集時,只能為每個區域指定一個現有 VPC 子網路。 在叢集裡新增的每個工作者節點都將使用該區域中 VPC 子網路中的專用 IP 位址進行部署。 佈建工作者節點後,工作者節點 IP 位址會在 reboot 作業之後持續保存,但工作者節點 IP 位址在 replaceupdate 作業之後會變更。

在建立叢集期間或在區域中新增工作者節點時,請勿刪除您連接至叢集的子網路。 如果您刪除叢集使用的 VPC 子網路,則使用子網路中 IP 位址的任何負載平衡器可能會遇到問題,而且您可能無法建立新的負載平衡器。

我的 VPC 子網路需要多少 IP 位址?

當您 建立 VPC 子網路時,請確保為叢集建立具有足夠 IP 位址的子網路,例如 256。 您無法在事後變更 VPC 子網所擁有的 IP 位址數量。

請記住下列 IP 位址保留。

  • 依預設,來自每一個子網路的 5 個 IP 位址 由 VPC 保留
  • 虛擬專用端點(VPE)閘道 需要來自叢集具有工作者節點之每個區域中一個子網路的 1 個 IP 位址。
  • 叢集裡每個工作者節點需要 1 個 IP 位址。
  • 每次更新或取代工作者節點時都需要 1 個 IP 位址。 這些 IP 位址最終會收回並可供重複使用。
  • 每次建立公用或專用負載平衡器時,都會使用 2 個 IP 位址。 如果您具有多區域叢集,則這 2 個 IP 位址會分散在各區域中,因此子網路可能沒有保留 IP 位址。
  • 您為叢集設定的其他網路資源 (例如 VPNaaS 或 LBaaS 自動調整) 可能需要其他 IP 位址或具有其他 服務限制。 例如,LBaaS 自動調整可能會針對每個負載平衡器擴增至 16 個 IP 位址。

我可以將哪些 IP 範圍用於 VPC 子網路?

VPC 子網的預設 IP 位址範圍為 10.0.0.0 – 10.255.255.255。 如需各 VPC 區域的 IP 位址範圍清單,請參閱 VPC 預設位址前綴

如果您需要使用自訂範圍子網路來建立叢集,請參閱 自訂位址字首 的指引。 不過,如果您對工作者節點使用自訂範圍子網路,則必須確保工作者節點子網路的 IP 範圍不會與叢集的 Pod 子網路重疊。 Pod 子網路視叢集建立期間的子網路選項及叢集的基礎架構類型而定:

  • 如果您在叢集建立期間於 --pod-subnet 選項中指定自己的 Pod 子網路,則 Pod 會獲指派此範圍的 IP 位址。
  • 如果您在叢集建立期間未指定自訂 Pod 子網路,則叢集會使用預設 Pod 子網路。 在 VPC 中建立的第一個叢集裡,預設 Pod 子網路為 172.17.0.0/18。 在您於該 VPC 中建立的第二個叢集裡,預設 Pod 子網路為 172.17.64.0/18。 在每一個後續叢集裡,Pod 子網路範圍是下一個可用的非重疊 /18 子網路。

如何建立子網路以進行標準基礎架構存取?

如果您在建立 VPC 時啟用標準存取權,則 標準存取預設位址字首 會自動決定您所建立任何子網路的 IP 範圍。 不過,標準存取 VPC 子網路的預設 IP 範圍與 IBM Cloud Kubernetes Service 控制平面的子網路相衝突。 相反地,您必須 建立不含自動預設位址字首的 VPC,然後為叢集建立自己的位址字首及那些範圍內的子網路

我可以指定叢集裡 Pod 及服務的子網路嗎?

如果您計劃透過 IBM Cloud Direct Link 或 VPN 服務將叢集連接至內部部署網路,則可以透過指定為 Pod 提供專用 IP 位址的自訂子網路 CIDR,以及為服務提供專用 IP 位址的自訂子網路 CIDR,來避免子網路衝突。

若要在建立叢集期間指定自訂 Pod 及服務子網路,請使用 ibmcloud ks cluster create CLI 指令中的 --pod-subnet--service-subnet 選項。

若要查看叢集使用的 Pod 及服務子網路,請在 ibmcloud ks cluster get 的輸出中尋找 Pod SubnetService Subnet 欄位。

Pods

預設範圍

在 VPC 中建立的第一個叢集裡,預設 Pod 子網路為 172.17.0.0/18。 在您於該 VPC 中建立的第二個叢集裡,預設 Pod 子網路為 172.17.64.0/18。 在每一個後續叢集裡,Pod 子網路範圍是下一個可用的非重疊 /18 子網路。

大小需求

在指定自訂子網時,請考量您計劃建立的叢集規模,以及未來可能新增的執行節點數量。 子網的 CIDR 範圍必須至少為 /23,這能為叢集中最多四個工作節點提供足夠的 Pod IP 位址。 若為較大的叢集,請使用 /22,以具有八個工作者節點的足夠 Pod IP 位址,/21 以具有 16 個工作者節點的足夠 Pod IP 位址,依此類推。

對於 VPC 叢集,您可以在 --pod-subnet 選項中包括子網路大小來指定子網路大小。 例如: --pod-subnet 0.0.0.0/X,其中 X 是必要的 Pod 子網路大小。 然後會自動選取 Pod 子網路。 自動分配 Pod 子網路時,會從 172.17.0.0 開始分配,最大子網路限制為 13,最小子網路限制為 23

工作節點有全局限制。 一個區域內所有群集的工作節點數量不能超過 500 個。

範圍需求

Pod 和服務子網路無法彼此重疊,且 Pod 子網路無法重疊工作者節點的 VPC 子網路。 您選擇的子網路必須在下列其中一個範圍內。

  • 172.17.0.0 - 172.17.255.255

  • 172.21.0.0 - 172.31.255.255

  • 192.168.0.0 - 192.168.255.255

  • 198.18.0.0 - 198.19.255.255

服務

預設範圍
預設情況下,所有部署至叢集的服務都會被指派一個位於 172.21.0.0/16 範圍內的私有 IP 位址。
大小需求
當您指定自訂子網路時,必須以 CIDR 格式指定子網路,大小至少為 /24,這容許叢集裡最多 255 個服務,或更大。
範圍需求
Pod 和服務子網路不能彼此重疊。 您選擇的子網路必須在下列其中一個範圍內。
  • 172.17.0.0 - 172.17.255.255

  • 172.21.0.0 - 172.31.255.255

  • 192.168.0.0 - 192.168.255.255

  • 198.18.0.0 - 198.19.255.255

公用閘道

公用閘道可啟用子網路及連接至子網路的所有工作者節點,以建立網際網路的出埠連線。 如果您的工作節點必須存取叢集外的公開端點,您可以於工作節點所部署的 VPC 子網中啟用 公開閘道

如果 IBM Cloud 服務不支援私有雲服務端點,您的工作節點必須連接到一個已連接公共閘道的子網。 這些工作者節點上的 Pod 可以透過子網路的公用閘道在公用網路上安全地與服務進行通訊。 請注意,子網路上無需公用閘道來容許從網際網路到 LoadBalancer 服務或 ALB 的入埠網路資料流量。

在同一個 VPC 內,每個區域只能建立一個公共閘道,但該公共閘道可連接至該區域內的多個子網。 如需公用閘道的相關資訊,請參閱 VPC 網路說明文件

虛擬專用端點 (VPE)

檢視「了解預設安全的群集 VPC 網路」,以取得有關 VPE 的資訊。

網路分段

網路區隔說明將網路分成多個子網路的方式。 在某個子網路中運行的應用程式無法看見或存取另一個子網路中的應用程式。 如需 VPC 子網路的網路分段選項的相關資訊,請參閱 此叢集安全主題

子網路提供了一個頻道,用於連線功能叢集內的工作者節點。 此外,任何連接至相同 VPC 中任何專用子網路的系統都可以與工作者節點進行通訊。 例如,一個 VPC 中的所有子網路都可以透過專用第 3 層遞送與內建 VPC 路由器進行通訊。

如果您有多個叢集必須相互通訊,則可以在相同 VPC 中建立這些叢集。 不過,如果您的叢集無需相互通訊,您可以透過在不同的 VPC 中建立叢集,來實現更完善的網路分段。 此外,還可以為 VPC 子網路建立存取控制清單 (ACL),以調解專用網路上的資料流量。 ACL 由入埠和出埠規則組成,這些規則定義了每個 VPC 子網路允許的 Ingress 和 Egress。

VPC 網路限制

為叢集建立 VPC 子網路時,請記住下列特性和限制。

  • 每個 VPC 子網路的預設 CIDR 大小為 /24,最多可支援 253 個工作者節點。 如果計劃在一個叢集裡每個區域部署 250 個以上的工作者節點,請考慮建立更大的子網路。
  • 建立 VPC 子網後,您將無法調整其大小或變更其 IP 範圍。
  • 同一 VPC 中的多個叢集可以共用 VPC 子網。 不過,無法在多個叢集之間共用自訂 Pod 及服務子網路。
  • VPC 子網會綁定至單一校園的多區域區域,且無法橫跨多個區域或區域。
  • 建立子網後,您無法將其移至其他區域、區域或 VPC。
  • 若您有工作節點已連接到某個區域中的現有子網,則無法在叢集中變更該區域的子網。
  • 禁止使用 172.16.0.0/16172.18.0.0/16172.19.0.0/16172.20.0.0/16 範圍。
  • 在同一個 VPC 內,每個區域只能建立一個公共閘道,但該公共閘道可連接至該區域內的多個子網。
  • 標準存取預設位址字首 與 IBM Cloud Kubernetes Service 控制平面的子網路衝突。 您必須 建立不含自動預設位址字首的 VPC,然後為叢集建立您自己的位址字首及那些範圍內的子網路

建立 VPC 子網路並連接公用閘道

為叢集建立 VPC 子網路,並選擇性地將公用閘道連接至子網路。

在主控台中建立 VPC 子網路

使用 IBM Cloud 控制台為您的叢集建立 VPC 子網,並可選擇性地將公共閘道附加至該子網。

  1. VPC 子網路儀表板 中,按一下 建立
  2. 輸入子網路的名稱,然後選取已建立的 VPC 的名稱。
  3. 選取要在其中建立子網路的位置和區域。
  4. 指定要建立的 IP 位址數。
    • VPC 子網會為叢集中的工作節點和負載平衡服務提供 IP 位址,因此 請建立一個具備足夠 IP 位址的 VPC 子網,例如 256 個。 您無法在事後變更 VPC 子網所擁有的 IP 位址數量。
    • 如果您輸入特定的 IP 範圍,請不要使用下列保留範圍: 172.16.0.0/16172.18.0.0/16172.19.0.0/16172.20.0.0/16
  5. 選擇是否要將公用網路閘道連接到子網路。 當您希望叢集存取公開端點時(例如其他應用程式的公開 URL,或是僅支援公有雲服務端點的 IBM Cloud 服務),則需要一個公開網路閘道。
  6. 按一下建立子網路
  7. 使用子網路來 建立叢集建立新的工作者節點儲存區將子網路新增至現有工作者節點儲存區。> 在建立叢集期間或在區域中新增工作者節點時,請勿刪除您連接至叢集的子網路。 如果您刪除叢集使用的 VPC 子網路,則使用子網路中 IP 位址的任何負載平衡器可能會遇到問題,而且您可能無法建立新的負載平衡器。

在 CLI 中建立 VPC 子網路

使用命令列介面 IBM Cloud (CLI) 為您的叢集建立 VPC 子網,並可選擇性地將公共閘道附加至該子網。

開始之前

  1. 在命令列中,登入您的 IBM Cloud 帳戶,並選取您要建立 VPC 叢林的 IBM Cloud 區域及資源群組。 如需支援的地區,請參閱在其他地區中建立 VPC。 叢集資源群組可能與 VPC 資源群組不同。 系統提示時,請輸入您的 IBM Cloud 認證。 如果您擁有聯邦式身分識別,請使用「--sso」選項進行登入。
    ibmcloud login -r REGION [-g <resource_group>] [--sso]
    
  2. 在要建立叢集的地區中建立 VPC

若要建立 VPC 子網,請依照以下步驟操作。

  1. 取得您要建立子網的 VPC 的 ID。

    ibmcloud ks vpcs
    
  2. 建立子網路。 如需此指令中選項的相關資訊,請參閱 CLI 參考資料

    ibmcloud is subnet-create SUBNET_NAME VPC_ID --zone VPC_ZONE --ipv4-address-count NUMBER_OF_IP_ADDRESS
    
    • VPC 子網會為叢集中的工作節點和負載平衡服務提供 IP 位址,因此 請建立一個具備足夠 IP 位址的 VPC 子網,例如 256 個。 您無法在事後變更 VPC 子網所擁有的 IP 位址數量。
    • 請勿使用下列保留範圍: 172.16.0.0/16172.18.0.0/16172.19.0.0/16172.20.0.0/16
  3. 檢查您要在其中建立叢集的區域中是否有公用閘道。 在同一個 VPC 內,每個區域只能建立一個公共閘道,但該公共閘道可連接至該區域內的多個子網。

    ibmcloud is public-gateways
    

    輸出範例

    ID                                     Name                                       VPC                          Zone         Floating IP                  Created                     Status      Resource group
    26426426-6065-4716-a90b-ac7ed7917c63   test-pgw                                   testvpc(36c8f522-.)          us-south-1   169.xx.xxx.xxx(26466378-.)   2019-09-20T16:27:32-05:00   available   -
    2ba2ba2b-fffa-4b0c-bdca-7970f09f9b8a   pgw-73b62bc0-b53a-11e9-9838-f3f4efa02374   team3(ff537d43-.)            us-south-2   169.xx.xxx.xxx(2ba9a280-.)   2019-08-02T10:30:29-05:00   available   -
    
    • 如果您在每一個區域中已有公用閘道,請記下公用閘道的 ID
    • 如果每個區域中都沒有公用閘道,請建立公用閘道。 建議將公共閘道命名為「<cluster>-<zone>-gateway」此類格式。 記下輸出中的公用閘道 ID
    ibmcloud is public-gateway-create <gateway_name> <VPC_ID> <zone>
    

    輸出範例

    ID               26466378-6065-4716-a90b-ac7ed7917c63
    Name             mycluster-us-south-1-gateway
    Floating IP      169.xx.xx.xxx(26466378-6065-4716-a90b-ac7ed7917c63)
    Status           pending
    Created          2019-09-20T16:27:32-05:00
    Zone             us-south-1
    VPC              myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
    Resource group   -
    
  4. 使用公用閘道及子網路的 ID,將公用閘道連接至子網路。

    ibmcloud is subnet-update <subnet_ID> --public-gateway-id <gateway_ID>
    

    輸出範例

    ID                  91e946b4-7094-46d0-9223-5c2dea2e5023
    Name                mysubnet1
    IPv4 CIDR           10.240.xx.xx/24
    Address available   250
    Address total       256
    ACL                 allow-all-network-acl-36c8f522-4f0d-400c-8226-299f0b8198cf(585bc142-5392-45d4-afdd-d9b59ef2d906)
    Gateway             mycluster-us-south-1-gateway(26466378-6065-4716-a90b-ac7ed7917c63)
    Created             2019-08-21T09:43:11-05:00
    Status              available
    Zone                us-south-1
    VPC                 myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
    
  5. 使用子網路來 建立叢集建立新的工作者節點儲存區將子網路新增至現有工作者節點儲存區。 在建立叢集期間或在區域中新增工作者節點時,請勿刪除您連接至叢集的子網路。 如果您刪除叢集使用的 VPC 子網路,則使用子網路中 IP 位址的任何負載平衡器可能會遇到問題,而且您可能無法建立新的負載平衡器。

建立 VPC 子網路以進行標準存取

如果您在建立 VPC 時啟用標準存取權,則 標準存取預設位址字首 會自動決定您所建立任何子網路的 IP 範圍。 不過,標準存取 VPC 子網路的預設 IP 範圍與 IBM Cloud Kubernetes Service 控制平面的子網路相衝突。 您必須改為建立不含自動預設位址字首的 VPC,並建立您自己的位址字首。 然後,每當您為叢集建立子網路時,都會在您建立的位址字首範圍內建立子網路。

在主控台中建立 VPC 子網路以進行標準存取

  1. 建立不含預設位址字首的標準存取 VPC。
    1. Virtual Private Clouds 儀表板 中,按一下 建立
    2. 輸入名稱、資源群組及任何標籤的詳細資料。
    3. 選取 啟用標準資源的存取權的勾選框,並清除 為每一個區域建立預設字首的勾選框。
    4. 選取 VPC 的區域。
    5. 按一下建立虛擬專用雲端
  2. 在每一個區域中建立位址字首。
    1. 按一下 VPC 的名稱以檢視其詳細資料。
    2. 按一下 位址字首 標籤,然後按一下 建立
    3. 對於計劃在其中建立子網路的每個區域,建立一個以上的位址字首。 位址字首必須在下列其中一個範圍內: 10.0.0.0 - 10.255.255.255172.17.0.0 - 172.17.255.255172.21.0.0 - 172.31.255.255192.168.0.0 - 192.168.255.255
  3. 建立使用您的位址字首的子網路。
    1. VPC 子網路儀表板 中,按一下 建立
    2. 輸入子網路的名稱,並選取標準存取 VPC 的名稱。
    3. 選取要在其中建立子網路的位置和區域。
    4. 選取您為此區域建立的位址字首。
    5. 指定要建立的 IP 位址數。 VPC 子網會為叢集中的工作節點和負載平衡服務提供 IP 位址,因此 請建立一個具備足夠 IP 位址的 VPC 子網,例如 256 個。 您無法在事後變更 VPC 子網所擁有的 IP 位址數量。
    6. 選擇是否要將公用網路閘道連接到子網路。 當您希望叢集存取公開端點時(例如其他應用程式的公開 URL,或是僅支援公有雲服務端點的 IBM Cloud 服務),則需要一個公開網路閘道。
    7. 按一下建立子網路
  4. 使用子網路來 建立叢集。 在建立叢集期間或在區域中新增工作者節點時,請勿刪除您連接至叢集的子網路。 如果您刪除叢集使用的 VPC 子網路,則使用子網路中 IP 位址的任何負載平衡器可能會遇到問題,而且您可能無法建立新的負載平衡器。

從 CLI 建立 VPC 子網路以進行標準存取

  1. 在命令列中,登入您的 IBM Cloud 帳戶,並選取您要建立 VPC 叢林的 IBM Cloud 區域及資源群組。 如需支援的地區,請參閱在其他地區中建立 VPC。 叢集資源群組可能與 VPC 資源群組不同。 系統提示時,請輸入您的 IBM Cloud 認證。 如果您擁有聯邦式身分識別,請使用「--sso」選項進行登入。
    ibmcloud login -r <region> [-g <resource_group>] [--sso]
    
  2. 建立不含預設位址字首的標準存取 VPC。 在輸出中,複製 VPC ID。
    ibmcloud is vpc-create <name> --classic-access --address-prefix-management manual
    
  3. 對於計劃在其中建立子網路的每個區域,建立一個以上的位址字首。 位址字首必須在下列其中一個範圍內: 10.0.0.0 - 10.255.255.255172.17.0.0 - 172.17.255.255172.21.0.0 - 172.31.255.255192.168.0.0 - 192.168.255.255
    ibmcloud is vpc-address-prefix-create <prefix_name> <vpc_id> <zone> <prefix_range>
    
  4. 在每一個區域中建立使用您位址字首的子網路。 如需此指令中選項的相關資訊,請參閱 CLI 參考資料。 VPC 子網會為叢集中的工作節點和負載平衡服務提供 IP 位址,因此 請建立一個擁有足夠 IP 位址的 VPC 子網,例如 256 個。 您無法在事後變更 VPC 子網所擁有的 IP 位址數量。
    ibmcloud is subnet-create <subnet_name> <vpc_id> --zone <vpc_zone> --ipv4-address-count <number_of_ip_address> --ipv4-cidr-block <prefix_range>
    
  5. 選用項目: 將公用網路閘道連接至子網路。 當您希望叢集存取公開端點時(例如其他應用程式的公開 URL,或是僅支援公有雲服務端點的 IBM Cloud 服務),則需要一個公開網路閘道。
    1. 在每一個區域中建立公用閘道。 建議將公共閘道命名為「<cluster>-<zone>-gateway」此類格式。 記下輸出中的公用閘道 ID
        ibmcloud is public-gateway-create <gateway_name> <VPC_ID> <zone>
        ```
        輸出範例
        ```sh {: screen}
        ID               26466378-6065-4716-a90b-ac7ed7917c63
        Name             mycluster-us-south-1-gateway
        Floating IP      169.xx.xx.xxx(26466378-6065-4716-a90b-ac7ed7917c63)
        Status           pending
        Created          2019-09-20T16:27:32-05:00
        Zone             us-south-1
        VPC              myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
        Resource group   -
        ```
    2. 請使用公共閘道和子網的 ID,將公共閘道附加至該子網。
    ```sh {: pre}
        ibmcloud is subnet-update <subnet_ID> --public-gateway-id <gateway_ID>
        ```
        輸出範例
        ```sh {: screen}
        ID                  91e946b4-7094-46d0-9223-5c2dea2e5023
        Name                mysubnet1
        IPv4 CIDR           10.240.xx.xx/24
        Address available   250
        Address total       256
        ACL                 allow-all-network-acl-36c8f522-4f0d-400c-8226-299f0b8198cf(585bc142-5392-45d4-afdd-d9b59ef2d906)
        Gateway             mycluster-us-south-1-gateway(26466378-6065-4716-a90b-ac7ed7917c63)
        Created             2019-08-21T09:43:11-05:00
        Status              available
        Zone                us-south-1
        VPC                 myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
        ```
    
  6. 使用子網路來 建立叢集。 在建立叢集期間或在區域中新增工作者節點時,請勿刪除您連接至叢集的子網路。 如果您刪除叢集使用的 VPC 子網路,則使用子網路中 IP 位址的任何負載平衡器可能會遇到問題,而且您可能無法建立新的負載平衡器。

使用公用閘道限制對子網路的公用網路資料流量

藉由透過 VPC 子網路公用閘道,允許較少工作者節點具有外部存取權,而改善 IBM Cloud® Kubernetes Service 叢集的安全。

如果工作者節點上的 pod 需要連接至公用外部端點,則可以將公用閘道連接至這些工作者節點所在的子網路。 例如,您的 VPC 叢集可以自動連線至其他 支援私有雲服務端點的 IBM Cloud 服務, 例如 IBM Cloud Container Registry。 不過,如果您需要存取僅支援公有雲服務端點的 IBM Cloud 服務,可以將公有網關繫結至子網,以便您的 Pod 能透過公有網路發送請求。

您可以將公用閘道只連接至叢集裡的一個子網路,以便在叢集裡隔離此網路資料流量。 然後,您便可以使用應用程式親緣性,將需要存取外部端點的應用程式 Pod,僅部署至具有已連接之公用閘道的子網路。

在 VPC 叢集裡,子網路限制為一個區域。 當您將公用閘道只連接至一個子網路,並將需要公用存取權的應用程式 Pod 只排定到該子網路上的工作者節點時,這些 Pod 便會隔離到您叢集裡的一個區域。

  1. 將您的叢集部署到的 VPC 地區設定為目標。

    ibmcloud target -r <region>
    
  2. 檢查您在有工作者節點的區域中是否有公用閘道。 在同一個 VPC 內,每個區域只能建立一個公共閘道,但該公共閘道可連接至該區域內的多個子網。

    ibmcloud is public-gateways
    

    輸出範例

    ID                                     Name                                       VPC                          Zone         Floating IP                  Created                     Status      Resource group
    26426426-6065-4716-a90b-ac7ed7917c63   test-pgw                                   testvpc(36c8f522-.)          us-south-1   169.xx.xxx.xxx(26466378-.)   2019-09-20T16:27:32-05:00   available   -
    2ba2ba2b-fffa-4b0c-bdca-7970f09f9b8a   pgw-73b62bc0-b53a-11e9-9838-f3f4efa02374   team3(ff537d43-.)            us-south-2   169.xx.xxx.xxx(2ba9a280-.)   2019-08-02T10:30:29-05:00   available   -
    
    • 如果您已在具有工作者節點的區域,和您叢集所在的 VPC 中具有公用閘道,請記下閘道的 ID
    • 如果您在部署工作節點的區域以及叢集所在的 VPC 中尚未擁有公共閘道,請建立一個公共閘道。 建議將公共閘道命名為「<cluster>-<zone>-gateway」此類格式。 記下輸出中的公用閘道 ID
        ibmcloud is public-gateway-create <gateway_name> <VPC_ID> <zone>
        ```
        輸出範例
    
        ```sh {: screen}
        ID               26466378-6065-4716-a90b-ac7ed7917c63
        Name             mycluster-us-south-1-gateway
        Floating IP      169.xx.xx.xxx(26466378-6065-4716-a90b-ac7ed7917c63)
        Status           pending
        Created          2019-09-20T16:27:32-05:00
        Zone             us-south-1
        VPC              myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
        Resource group   -
        ```
    
  3. 列出叢集裡的工作者節點。 針對您已啟用公用閘道的區域,記下一個工作者節點的 Primary IP

    ibmcloud ks worker ls -c <cluster_name_or_ID>
    

    輸出範例

    ID                                                   Primary IP     Flavor   State    Status   Zone         Version
    kube-bl25g33d0if1cmfn0p8g-vpctest-default-000005ac   10.240.02.00   c2.2x4   normal   Ready    us-south-2   1.35.7
    kube-bl25g33d0if1cmfn0p8g-vpctest-default-00000623   10.240.01.00   c2.2x4   normal   Ready    us-south-1   1.35.7
    
  4. 說明工作者節點。 在 Labels 輸出中,記下標籤 ibm-cloud.kubernetes.io/subnet-id 中的子網路 ID,例如下列範例的 5f5787a4-f560-471b-b6ce-20067ac93439

    kubectl describe node <worker_primary_ip>
    

    輸出範例

    NAME:               10.240.01.00
    Roles:              <none>
    Labels:             arch=amd64
    beta.kubernetes.io/arch=amd64
    beta.kubernetes.io/instance-type=c2.2x4
    beta.kubernetes.io/os=linux
    failure-domain.beta.kubernetes.io/region=us-south
    failure-domain.beta.kubernetes.io/zone=us-south-1
    ibm-cloud.kubernetes.io/ha-worker=true
    ibm-cloud.kubernetes.io/iaas-provider=gc
    ibm-cloud.kubernetes.io/internal-ip=10.240.0.77
    ibm-cloud.kubernetes.io/machine-type=c2.2x4
    ibm-cloud.kubernetes.io/os=UBUNTU_20_64
    ibm-cloud.kubernetes.io/region=us-south
    ibm-cloud.kubernetes.io/sgx-enabled=false
    ibm-cloud.kubernetes.io/subnet-id=5f5787a4-f560-471b-b6ce-20067ac93439
    ibm-cloud.kubernetes.io/worker-id=kube-bl25g33d0if1cmfn0p8g-vpcprod-default-00001093
    ibm-cloud.kubernetes.io/worker-pool-id=bl25g33d0if1cmfn0p8g-5aa474f
    ibm-cloud.kubernetes.io/worker-pool-name=default
    ibm-cloud.kubernetes.io/worker-version=1.15.3_1517
    ibm-cloud.kubernetes.io/zone=us-south-1
    kubernetes.io/arch=amd64
    kubernetes.io/hostname=10.240.0.77
    kubernetes.io/os=linux
    Annotations:        node.alpha.kubernetes.io/ttl: 0
    ...
    
  5. 請使用公共閘道和子網的 ID,將公共閘道附加至該子網。 在此區域中部署至這個子網路的工作者節點,現在可以存取外部端點。

    ibmcloud is subnet-update <subnet_ID> --public-gateway-id <gateway_ID>
    

    輸出範例

    ID                  91e946b4-7094-46d0-9223-5c2dea2e5023
    Name                mysubnet1
    IPv4 CIDR           10.240.xx.xx/24
    Address available   250
    Address total       256
    ACL                 allow-all-network-acl-36c8f522-4f0d-400c-8226-299f0b8198cf(585bc142-5392-45d4-afdd-d9b59ef2d906)
    Gateway             mycluster-us-south-1-gateway(26466378-6065-4716-a90b-ac7ed7917c63)
    Created             2019-08-21T09:43:11-05:00
    Status              available
    Zone                us-south-1
    VPC                 myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
    
  6. 在應用程式的部署檔案中,針對您在步驟 4 中找到的子網 ID 標籤 ,新增一則親和性規則

    在此範例 YAML 的「親和性」區段中,ibm-cloud.kubernetes.io/subnet-id 為「key」,而 <subnet_ID> 則為「value」。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: with-node-affinity
    spec:
      template:
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: ibm-cloud.kubernetes.io/subnet-id
                    operator: In
                    values:
                    - <subnet_ID>
    ...
    
  7. 套用已更新的部署配置檔。

    kubectl apply -f with-node-affinity.yaml
    
  8. 驗證應用程式 Pod 已部署至正確的工作者節點。

    1. 列出叢集裡的 Pod。 在輸出中,識別應用程式的 Pod。 記下 Pod 所在工作者節點的 NODE 專用 IP 位址。
        kubectl get pods -o wide
        ```
        在這個輸出範例中,應用程式 Pod `cf-py-d7b7d94db-vp8pq` 位於 IP 位址為 `10.240.01.00` 的工作者節點上。
        ```sh {: screen}
        NAME                   READY     STATUS              RESTARTS   AGE       IP               NODE
        cf-py-d7b7d94db-vp8pq  1/1       Running             0          15d       172.30.xxx.xxx   10.240.01.00
        ```
    2. 列出叢集裡的工作者節點。 在輸出中,尋找您在其中連接公用閘道之區域中的工作者節點。 驗證具有您在前一個步驟中所識別之專用 IP 位址的工作者節點,已部署在此區域。
    
    ```sh {: pre}
        ibmcloud ks worker ls --cluster <cluster_name_or_ID>
        ```
        輸出範例
        ```sh {: screen}
        ID                                                   Primary IP     Flavor   State    Status   Zone         Version
        kube-bl25g33d0if1cmfn0p8g-vpctest-default-000005ac   10.240.02.00   c2.2x4   normal   Ready    us-south-2   1.35.7
        kube-bl25g33d0if1cmfn0p8g-vpctest-default-00000623   10.240.01.00   c2.2x4   normal   Ready    us-south-1   1.35.7
        ```
    
  9. 選用項目:如果您使用存取控制清單 (ACL) 來控制您的叢集網路資料流量,請在這個子網路的 ACL 中建立入埠及出埠規則,以允許對您 Pod 必須存取之外部公用端點的進入和輸出資料流量。