您需要設定的 NSX-T Data Center 資源包含覆疊傳輸區域、第 0 層邏輯路由器、要連線節點虛擬機器的邏輯交換器、Kubernetes 節點的 IP 區塊,以及 SNAT 的 IP 集區。

重要: 如果您正在使用 NSX-T Data Center 2.4 或更新版本執行,則必須使用 進階網路與安全性索引標籤設定 NSX-T 資源。

在 NCP 組態檔 ncp.ini 中,NSX-T Data Center 資源是使用其 UUID 或名稱指定的。

覆疊傳輸區域

登入 NSX Manager 並導覽至系統 > 網狀架構 > 傳輸區域。尋找用於容器網路的覆疊傳輸區域,或是建立新的覆疊傳輸區域。

透過在 ncp.ini[nsx_v3] 區段中設定 overlay_tz 選項,指定叢集的覆疊傳輸區域。此步驟是可選的。如果沒有設定 overlay_tz,NCP 將自動從第 0 層路由器擷取覆疊傳輸區域識別碼。

第 0 層邏輯路由

登入 NSX Manager 並導覽至進階網路與安全性 > 網路 > 路由器。尋找用於容器網路的路由器,或是建立新的路由器。

透過在 ncp.ini[nsx_v3] 區段中設定 tier0_router 選項,指定叢集的第 0 層邏輯路由器。

備註: 路由器必須在主動備用模式中建立。

邏輯交換器

節點用於資料流量的 vNIC 必須連線至覆疊邏輯交換器。節點的管理介面並非強制連線至 NSX-T Data Center,儘管這麼做可以更輕鬆地進行設定。透過登入 NSX Manager 並導覽至 進階網路與安全性 > 網路 > 交換 > 交換器,可以建立邏輯交換器。在交換器上,建立邏輯連接埠並向其附加節點 vNIC。邏輯連接埠必須具有下列標記:
  • 標籤:<cluster_name>,範圍:ncp/cluster
  • 標籤:<node_name>,範圍:ncp/node_name
<cluster_name> 值必須符合 ncp.ini[coe] 區段中 cluster 選項的值。

Kubernetes 網繭的 IP 區塊

登入 NSX Manager 並導覽至進階網路與安全性 > 網路 > IPAM,以建立一或多個 IP 區塊。以 CIDR 格式指定 IP 區塊。

透過在 ncp.ini[nsx_v3] 區段中設定 container_ip_blocks 選項,指定 Kubernetes 網繭的 IP 區塊。

也可以建立專用於非 SNAT 命名空間 (針對 Kubernetes) 或叢集 (針對 PCF) 的 IP 區塊。

透過在 ncp.ini[nsx_v3] 區段中設定 no_snat_ip_blocks 選項,指定非 SNAT IP 區塊。

如果您在 NCP 執行時建立無 SNAT IP 區塊,則必須重新啟動 NCP。否則,NCP 將會繼續使用共用的 IP 區塊,直到耗盡為止。

備註: 當您建立 IP 區塊時,首碼長度不得大於 NCP 之組態檔 ncp.ini 中的 subnet_prefix 參數值。如需詳細資訊,請參閱 ncp-rc.yml 中適用於 ncp.ini 的 Configmap

SNAT 的 IP 集區

NSX Manager 中的 IP 集區用來配置 IP 位址,從而用於使用 SNAT 規則轉譯網繭 IP,以及用於使用 SNAT/DNAT 規則公開入口控制站,如同 Openstack 浮動 IP。這些 IP 位址也稱為「外部 IP」。

多個 Kubernetes 叢集會使用相同的外部 IP 集區。每個 NCP 執行個體皆會針對其管理的 Kubernetes 叢集使用此集區的子網路。依預設,系統會使用網繭子網路的相同子網路首碼。如需使用不同的子網路大小,請更新 ncp.ini[nsx_v3] 區段中的 external_subnet_prefix 選項。

您可以透過在 ncp.ini[nsx_v3] 區段中設定 external_ip_pools 選項,指定 SNAT 的 IP 集區。

您可以透過變更組態檔並重新啟動 NCP,變更為不同的 IP 集區。

限制 SNAT IP 集區為特定的 Kebernetes 命名空間或 PCF 組織

您可以透過將下列標記新增至 IP 集區,指定可從 SNAT IP 集區配置 IP 的 Kubernetes 命名空間或 PCF 組織。
  • 對於 Kubernetes 命名空間:scope: ncp/owner, tag: ns:<namespace_UUID>
  • 對於 PCF 組織:scope: ncp/owner, tag: org:<org_UUID>
您可以使用下列其中一個命令取得命名空間或組織 UUID:
kubectl get ns -o yaml
cf org <org_name> --guid
請注意下列事項:
  • 每個標籤應指定一個 UUID。您可以為同一個集區建立多個標記。
  • 如果您根據舊標記為一些命名空間或組織配置 IP 後變更標記,將不會回收這些 IP,直到 Kubernetes 服務或 PCF 應用程式的 SNAT 組態變更或 NCP 重新啟動為止。
  • 命名空間和 PCF 組織擁有者標記是可選的。如果沒有這些標記,則可從 SNAT IP 集區配置 IP 給任何命名空間或 PCF 組織。

為服務設定 SNAT IP 集區

您也可以透過新增註解至服務來為服務設定 SNAT IP 集區。例如,
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

ncp/snat_pool 指定的 IP 集區必須有標籤 scope: ncp/owner, tag: cluster:<cluster_name>

NCP 將針對此服務設定 SNAT 規則。規則的來源 IP 為後端網繭集。目的地 IP 是從指定的外部 IP 集區進行配置的 SNAT IP。如果 NCP 設定 SNAT 規則時發生錯誤,將會使用 ncp/error.snat: <error> 標註服務。可能的錯誤如下:
  • IP_POOL_NOT_FOUND - 在 NSX Manager 中找不到 SNAT IP 集區。
  • IP_POOL_EXHAUSTED - SNAT IP 集區已用盡。
  • IP_POOL_NOT_UNIQUE - ncp/snat_pool 所指定的集區指的是 NSX Manager 中的多個集區。
  • SNAT_POOL_ACCESS_DENY - 集區的擁有者標籤不符合正在傳送配置要求之服務的命名空間。
  • SNAT_RULE_OVERLAPPED - 建立新的 SNAT 規則,但 SNAT 服務的網繭也屬於另一個 SNAT 服務,也就是,同一個網繭具有多個 SNAT 規則。
  • POOL_ACCESS_DENIED - ncp/snat_pool 所指定的 IP 集區沒有標籤 scope: ncp/owner, tag: cluster:<cluster_name>,或集區的擁有者標籤不符合正在傳送配置要求的服務的命名空間。
請注意下列事項:
  • ncp/snat_pool 所指定的集區應在服務設定之前已存在於 NSX-T Data Center 中。
  • NSX-T Data Center 中,服務的 SNAT 規則優先順序高於專案的優先順序。
  • 如果網繭已設定多個 SNAT 規則,則只有一個規則適用。
  • 您可以透過變更註解並重新啟動 NCP,變更為不同的 IP 集區。

為命名空間設定 SNAT IP 集區

您可以透過新增註解至命名空間,來為命名空間設定 SNAT IP 集區。例如,
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-sample
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
    ...
NCP 將針對此命名空間設定 SNAT 規則。規則的來源 IP 為後端網繭集。目的地 IP 是從指定的外部 IP 集區進行配置的 SNAT IP。如果 NCP 設定 SNAT 規則時發生錯誤,將會使用 ncp/error.snat: <error> 標註命名空間。可能的錯誤如下:
  • IP_POOL_NOT_FOUND - 在 NSX Manager 中找不到 SNAT IP 集區。
  • IP_POOL_EXHAUSTED - SNAT IP 集區已用盡。
  • IP_POOL_NOT_UNIQUE - ncp/snat_pool 所指定的集區指的是 NSX Manager 中的多個集區。
  • POOL_ACCESS_DENIED - ncp/snat_pool 所指定的 IP 集區沒有標籤 scope: ncp/owner, tag: cluster:<cluster_name>,或集區的擁有者標籤不符合正在傳送配置要求的命名空間。
請注意下列事項:
  • 您只能在註解中指定一個 SNAT IP 集區。
  • 不需要在 ncp.ini 中設定 SNAT IP 集區。
  • ncp/snat_pool 指定的 IP 集區必須有標籤 scope: ncp/owner, tag: cluster:<cluster_name>
  • ncp/snat_pool 所指定的 IP 集區也可具有命名空間標籤 scope: ncp/owner, tag: ns:<namespace_UUID>
  • 如果缺少 ncp/snat_pool 註解,命名空間會將 SNAT IP 集區用於叢集。
  • 您可以透過變更註解並重新啟動 NCP,變更為不同的 IP 集區。

為 PAS 應用程式設定 SNAT 集區

依預設,NCP 會為 PAS (Pivotal Application Service) 組織設定 SNAT IP。您可以透過使用包含 SNAT IP 集區資訊的 manifest.xml 建立應用程式,來為應用程式設定 SNAT IP。例如,
    applications:
      - name: frontend
        memory: 32M
        disk_quota: 32M
        buildpack: go_buildpack
        env:
          GOPACKAGENAME: example-apps/cats-and-dogs/frontend
          NCP_SNAT_POOL: <external IP pool ID or name>
    ...
NCP 將針對此應用程式設定 SNAT 規則。規則的來源 IP 是執行個體的 IP 集合,規則的目的地 IP 是從外部 IP 集區配置的 SNAT IP。請注意下列事項:
  • NCP_SNAT_POOL 所指定的集區應在推送應用程式之前已存在於 NSX-T Data Center 中。
  • 應用程式的 SNAT 規則的優先順序高於組織的 SNAT 規則。
  • 一個應用程式只能設定一個 SNAT IP。
  • 您可以透過變更組態並重新啟動 NCP,變更為不同的 IP 集區。

為 PCF 第 3 版設定 SNAT

透過 PCF 第 3 版,您可以採用兩種方式設定 SNAT:

  • 建立應用程式時在 manifest.yml 中設定 NCP_SNAT_POOL
    例如,應用程式名為 bread,並且 manifest.yml 具有下列資訊:
    applications:
    - name: bread
      stack: cflinuxfs2
      random-route: true
      env:
        NCP_SNAT_POOL: AppSnatExternalIppool
      processes:
      - type: web
        disk_quota: 1024M
        instances: 2
        memory: 512M
        health-check-type: port
      - type: worker
        disk_quota: 1024M
        health-check-type: process
        instances: 2
        memory: 256M
        timeout: 15
    執行下列命令:
    cf v3-push bread
    cf v3-apply-manifest -f manifest.yml
    cf v3-apps
    cf v3-restart bread
  • 使用 cf v3-set-env 命令設定 NCP_SNAT_POOL
    執行下列命令 (假設應用程式名為 app3):
    cf v3-set-env app3 NCP_SNAT_POOL AppSnatExternalIppool
    (optional) cf v3-stage app3 -package-guid <package-guid> (You can get package-guid with "cf v3-packages app3".)
    cf v3-restart app3

(選用) (僅限 Kubernetes) 防火牆標記區段

若要允許管理員建立防火牆規則同時不影響 NCP 根據網路原則建立的防火牆區段,請登入 NSX Manager,導覽至安全性 > 分散式防火牆 > 一般,然後建立兩個防火牆區段。

透過在 ncp.ini[nsx_v3] 區段中設定 bottom_firewall_section_markertop_firewall_section_marker 選項,指定標記防火牆區段。

底部防火牆區段必須位於頂部防火牆區段下方。建立這些防火牆區段之後,由 NCP 建立用於隔離的所有防火牆區段將建立於底部防火牆區段之上,而 NCP 建立用於原則的所有防火牆區段將建立於頂部防火牆區段之下。如果沒有建立這些標記區段,則所有隔離規則將會在底部建立,而所有原則區段將會在頂部建立。每個叢集的各個標記防火牆區段的值必須是唯一的,否則將導致錯誤。