在 …… 上設定 Open Virtual Network (OVN) 使用者自訂網路 (UDN) 的先決條件 Red Hat OpenShift on IBM Cloud

在 Red Hat OpenShift on IBM Cloud 上,為 Localnet 和第 2 層主要網路設定 OVN 叢集使用者自訂網路 (CUDN) 的一次性先決條件。

本教學指南說明如何在 Red Hat® OpenShift® 上設定 CUDN Localnets 及 Layer 2 Primaries 的先決條件,詳見 IBM Cloud 上的 Kubernetes Service。 本教學中所述的所有任務,均在每個叢集上執行一次。

Localnet 概覽

Red Hat OpenShift Kubernetes Service Localnet 網路需要進行額外的設定,而客戶在 ROVS 中並不會執行這些設定。 本教學將說明所需的步驟。

準備 Red Hat OpenShift on IBM Cloud 叢集

IBM Cloud 叢集上的 Red Hat OpenShift 需要 NMState Operator。 NMState 為橋接器與實體網路提供持久性的網路設定。 此步驟將安裝操作員。

請謹記以下幾點:

  • 套用清單後,安裝過程約需 5 至 10 分鐘即可完成。
  • 每個介面僅能建立一座橋接器。
  • 請勿嘗試變更 eth0 上的橋接設定。

將以下程式碼區塊複製到檔案中,並透過 oc apply -f step0a.yml 執行該檔案,以安裝 NMState Operator。

---
apiVersion: v1
kind: Namespace
metadata:
  name: openshift-nmstate
spec:
  finalizers:
  - kubernetes
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: openshift-nmstate
  namespace: openshift-nmstate
spec:
  targetNamespaces:
  - openshift-nmstate
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: kubernetes-nmstate-operator
  namespace: openshift-nmstate
spec:
  channel: stable
  installPlanApproval: Automatic
  name: kubernetes-nmstate-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace

在建立「NMState」自訂資源之前,請先等待操作員完成「NMState」自訂資源定義 (CRD) 的註冊。 若在建立 CRD 之前套用 NMState 資源,將會看到類似以下錯誤訊息: no matches for kind "NMState" in version "nmstate.io/v1"。

執行以下指令進行輪詢,直到 CRD 出現為止,然後等待其進入「Established」狀態。

until oc get crd nmstates.nmstate.io >/dev/null 2>&1; do echo "Waiting for NMState CRD..."; sleep 10; done
oc wait --for=condition=established crd/nmstates.nmstate.io --timeout=300s

請確認所有 NMState CRD 均已安裝。

oc get crd | grep nmstate

輸出範例:

nmstates.nmstate.io                                               ...
nodenetworkconfigurationenactments.nmstate.io                     ...
nodenetworkconfigurationpolicies.nmstate.io                       ...
nodenetworkstates.nmstate.io                                      ...

當 CRD 準備就緒後,請將以下程式碼區塊複製到檔案中,並透過 oc apply -f step0b.yml 指令套用該程式碼,以建立名為 NMState 的自訂資源。

---
apiVersion: nmstate.io/v1
kind: NMState
metadata:
  name: nmstate
spec:
  probeConfiguration:
    dns:
      host: root-servers.net

套用橋接配置

套用基本橋接設定,以使用第二張周邊元件互連虛擬網路介面(PCI-VNI)網路介面卡(NIC)(eth1 )。

將以下程式碼區塊複製到檔案中,並透過 oc apply -f step1.yml`` 執行。

---
apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: "br-eth1"
spec:
  desiredState:
    interfaces:
    - name: "br-eth1"
      description: A dedicated OVS bridge with a NIC as a port
      type: ovs-bridge
      state: up
      bridge:
        allow-extra-patch-ports: true
        options:
          stp: false
        port:
        - name: "eth1"

請等待此設定套用至所有節點後,再進行下一步。

% oc get NodeNetworkConfigurationPolicy br-eth1
NAME      STATUS      REASON
br-eth1   Available   SuccessfullyConfigured

套用橋接映射設定

套用基本的橋接映射設定。

將以下程式碼區塊複製到檔案中,並透過 oc apply -f step2.yml`` 執行。

---
apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: "vpc-vlans"
spec:
  desiredState:
    ovn:
      bridge-mappings:
      - localnet: "vpc-vlans" # <- use your desired network name
        bridge: "br-eth1"
        state: present

為您的 VPC 建立自訂的次級前綴和子網

Localnets 可以為每個網路使用次級 VPC 子網。 此範例使用來自新 VPC 前綴的三个新子網。 您可以替換任何前綴或網路,或使用 VPC 的預設值。

建立新的 VPC 前綴

為每個區域建立一個新的前綴。 此範例使用超級網 198.18.0.0/16,並建立三個 /18 前綴(子網),每個區域各一個。

ic is vpc-addrc my-vpc-zone-1-vms my-vpc us-south-1 198.18.0.0/18 --default true
ic is vpc-addrc my-vpc-zone-2-vms my-vpc us-south-2 198.18.64.0/18
ic is vpc-addrc my-vpc-zone-3-vms my-vpc us-south-3 198.18.128.0/18

建立新的 VPC 子網

為區域 1 建立三個 VPC 子網(prod、db 以及 app )。

ic is subnetc zone1-vm-prod my-vpc us-south-1 --ipv4-cidr-block 198.18.0.0/24
ic is subnetc zone1-vm-db my-vpc us-south-1 --ipv4-cidr-block 198.18.1.0/24
ic is subnetc zone1-vm-app my-vpc us-south-1 --ipv4-cidr-block 198.18.2.0/24

視需要連接公共閘道

請確保每個區域都已連接一個公共閘道。 否則,該子網仍屬私有。

取得每個子網的 ID。 在此範例中,已選取「zone1-vm-prod」子網。

ic is subnets | awk ' $8 ~ /yourVPC-NAME_GOES-HERE/'

輸出範例:

0716-16da748a-5159-480c-b809-5f9e4750028b   zone1-vm-app    available   198.18.2.0/24   249/256   stone-likeness-bagging-headcount   pgw-0ec02020-2f74-11f1-b0c5-bfe21078e55b   potato-farm   us-south-1   Default
0716-74a2d06b-de5c-40c2-8311-38dbff74ce62   zone1-vm-db     available   198.18.1.0/24   249/256   stone-likeness-bagging-headcount   -                                          potato-farm   us-south-1   Default
0716-efd14367-eed3-429d-b390-ea17f0e8cfb1   zone1-vm-prod   available   198.18.0.0/24   249/256   stone-likeness-bagging-headcount   pgw-0ec02020-2f74-11f1-b0c5-bfe21078e55b   potato-farm   us-south-1   Default

將公共閘道連接到子網

使用子網 ID 0716-efd14367-eed3-429d-b390-ea17f0e8cfb1,將一個公共閘道連接到 zone1-vm-prod 子網。

ic is subnet-public-gateway-attach zone1-vm-prod --pgw r134-053cb8b1-d966-4b02-9f20-5fcbeda76048

您必須針對每個新的子網和每個區域重複此步驟。 公共閘道是按每個 VPC 和每個區域設定的。

第 2 層 主要管路系統

第 2 層主要網路在終端使用者能夠使用之前,需要先進行一些初步的基礎架設工作。

在使用第 2 層主要網路之前,您必須先完成一些初始設定。

安裝 FRR OVN 路由器模組

對 IBM Cloud 叢集上的 Red Hat OpenShift 進行修補,以在 Open Virtual Networking (OVN) pod 中啟用 Free Range Routing (FRR) 選項。 請套用以下修補程式,以在 OVN- Kubernetes 配置中啟用 FRR 作為額外的路由提供者,並進行路由廣播。

oc patch Network.operator.openshift.io cluster --type=merge -p='{"spec":{"additionalRoutingCapabilities":{"providers":["FRR"]},"defaultNetwork":{"ovnKubernetesConfig":{"routeAdvertisements":"Enabled"}}}}'

啟用命名空間間網路連線

套用基礎網路配置,以允許透過邊界閘道協定 (BGP) 進行通告的叢集使用者自訂網路 (CUDN) 進行命名空間間的網路通訊。 此設定會放寬預設的「使用者定義網路」(UDN)隔離行為。 將以下清單儲存為檔案,並透過 oc apply -f step0.yml`` 指令套用該清單。

# Permit intra-CUDN-namespace traffic
---
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: openshift-network-operator
  name: ovn-kubernetes-config-overrides
data:
  advertised-udn-isolation-mode: "loose"

啟用路由通告選擇器

新增路由廣告,以設定 OVN 透過 BGP 與 OVN FRR Pod 協同運作,藉此宣傳 Pod 網路。 將以下清單儲存為檔案,並透過 oc apply -f step1.yml`` 指令套用該清單。

網路必須具有標籤 advertise: true。

# Add the RouteAdvertisements
---
kind: RouteAdvertisements
apiVersion: k8s.ovn.org/v1
metadata:
  name: default
spec:
  nodeSelector: {}
  frrConfigurationSelector: {}
  networkSelectors:
    - networkSelectionType: ClusterUserDefinedNetworks
      clusterUserDefinedNetworkSelector:
        networkSelector:
          matchLabels:
            advertise: "true"
  advertisements:
    - "PodNetwork"
---