12. ネットワーク ブートストラップ

推定所要時間: 240 分

操作可能なコンポーネントのオーナー: PNET

スキル プロファイル: デプロイ エンジニア

このページでは、ネットワークをブートストラップしてスイッチを構成する手順について説明します。

ネットワーク システムには、次のコンポーネントが含まれています。

  • 管理ネットワーク: 次の 2 種類のスイッチを含むアウトオブバンド管理ネットワーク。

    • 管理スイッチ
    • 管理集約スイッチ
  • データプレーン ネットワーク: ユーザー トラフィックを伝送するネットワーク。次の 3 種類のスイッチが含まれます。

    • トップオブラック(TOR)スイッチ
    • アグリゲーション スイッチ
    • ボーダー リーフスイッチ

スイッチの現在のファームウェアが想定されるバージョンでない場合、ネットワーク ブートストラップは、Google Distributed Cloud(GDC)エアギャップ バージョンの想定されるスイッチ OS バージョンにスイッチを移行しようとします。

12.1. 始める前に

スイッチは出荷時のデフォルト設定で出荷される場合があります。始める前に、すべてのスイッチをリセットして、既存の構成を削除します。これを行うには、シリアル コンソールを使用して接続し、次のコマンドを実行します。

write erase

既存のスイッチ構成を削除したら、スイッチを再読み込みします。

reload in 5

12.2. ネットワークのインストール

ネットワークのインストールは、次の手順で行います。

  1. すべてのスイッチをオンにします。
  2. ブートストラップ マシンで sudo root アクセスを使用してネットワーク ブートストラップ プログラムを開始します。

    gdcloud system network install --config PATH_TO_CELLCFG --upgrade-switch-os
    

    PATH_TO_CELLCFG は、cellcfg ファイルのパスに置き換えます。

    1. このコマンドが失敗し、次のエラー メッセージが表示された場合:

      root@bootstrapper:~/hams/gdc/output/cellcfg# gdcloud system network install --config /root/hams/gdc/output/cellcfg --upgrade-switch-os
      Error: failed to initialize KIND: could not determine harbor address (no match between local and docker hostnames): could not find a match
      
    2. このエラーを解決するには、init コマンドをもう一度実行します。

      gdcloud system network init --config PATH_TO_CELLCFG
      
  3. スイッチをオンのままにします。スイッチは PowerOn Auto Provisioning(POAP)起動シーケンスを実行して、ブートストラップ マシンから自動的にリモート インストールされます。

  4. ブートストラップ プログラムのログをモニタリングして、スイッチが次の順序で起動していることを確認します。

    1. 管理スイッチ 1
    2. その他の管理スイッチと管理アグリゲーション スイッチ。
    3. データ ネットワーク スイッチ。
  5. ブートストラップ ログのモニタリングを続けます。上記の手順を完了すると、スイッチが接続されます。ブートストラップ プログラムは、API を介して管理スイッチとデータスイッチに追加の構成をインストールします。

  6. ブートストラップ ログに Successfully bootstrapped all switches. というメッセージが表示されるまで待ちます。

12.3. ブートストラップの詳細

POAP 起動シーケンスを使用して、ネットワーク内のすべてのスイッチを次のようにブートストラップします。

  1. ブートストラップ マシンを管理スイッチに接続します。
  2. 管理アグリゲーション スイッチを管理スイッチに接続します。
  3. 同じラック内の残りのスイッチを接続します。
  4. 管理アグリゲーション スイッチを別のラックに接続します。
  5. 他のすべてのスイッチを接続します。

ブートストラップ マシンは、./cellcfg パスにあるスイッチの YAML ファイルを使用してスイッチ構成を生成します。すべてのスイッチは、PowerOn Auto Provisioning(POAP)ブート シーケンスを使用して構成を受け取ります。ハードウェア 3.0 では、ネットワーク スイッチは最終構成を含む POAP ファイルを受け取ります。スイッチが POAP を完了すると、スイッチは自動的に再起動します。

再起動後、スイッチは ./cellcfg パスのスイッチの YAML ファイルと一致している必要があります。ブートストラップ マシンは、スイッチの接続と構成が正常に行われるように、すべてのスイッチにリクエストを送信します。

12.4. ブートストラップ後のルート構成

ネットワーク ブートストラップ プロセスの後、ブートストラップのルートを構成して、今後のブートストラップ タスクに備えます。

12.4.1. データプレーン ゲートウェイを見つける

データプレーン ゲートウェイは、データプレーン ネットワークのゲートウェイ IP アドレスです。データプレーン ネットワーク内の他のサービスと通信するようにゲートウェイ IP アドレスを設定します。

データプレーン ゲートウェイの IP アドレスを確認する手順は次のとおりです。

  1. cellcfg フォルダで、kub-ipam.yaml ファイルに移動します。
  2. control-plane-subnet という名前の SubnetClaim リソースを見つけます。

    yq eval -r '
    select(.kind == "SubnetClaim" and .metadata.name == "control-plane-subnet") |
    .spec.ipv4Spec.staticReservedIpRanges[] |
    select(.type == "GatewayReservation") |
    .ipRange.startIPAddress
    ' PATH_TO_KUB_IPAM_FILE
    

    PATH_TO_KUB_IPAM_FILE は、cellcfg/kub-ipam.yaml ファイルのパスに置き換えます。

  3. spec.ipv4Spec セクションで、type: GatewayReservation としてリストされているゲートウェイ IP アドレスを見つけます。たとえば、データプレーン インターフェースのゲートウェイ IP アドレスは 172.19.0.1 です。

    # Source: kub-ipam-assets/templates/subnet_claims.yaml
    apiVersion: system.private.gdc.goog/v1alpha1
    kind: SubnetClaim
    metadata:
      name: control-plane-subnet
      namespace: root
      labels:
        subnetclaims.system.private.gdc.goog/usage: "server"
      annotations:
        lcm.private.gdc.goog/claim-by-force: "true"
        helm.sh/resource-policy: keep
    spec:
      category: ExternalOverlayNetwork
      overlayNetwork: External
      cidrClaimName: control-plane-cidr
      ipv4Spec:
        staticReservedIpRanges:
          - ipRange:
              size: 1
              startIPAddress: 172.19.0.1
            type: GatewayReservation
    

12.4.2. ブートストラッパーでルートのスクリプトを作成する

ルートを作成するスクリプトを作成します。

bash << 'EOF'
#!/bin/bash

SCRIPT_PATH="/usr/local/sbin/add-routes.sh"
SERVICE_PATH="/usr/lib/systemd/system/add-routes.service"
MGMT_GATEWAY=MGMT_GATEWAY
MGMT_CIDR=MGMT_CIDR
MGMT_INTERFACE=MGMT_INTERFACE
BOND_GATEWAY=DATA_GATEWAY

rm -rf "$SCRIPT_PATH" 2>/dev/null
touch "$SCRIPT_PATH"
rm -rf "$SERVICE_PATH" 2>/dev/null
touch "$SERVICE_PATH"

echo -e '#!/bin/bash\n' > "$SCRIPT_PATH"
echo "ip route del $MGMT_CIDR via $MGMT_GATEWAY dev $MGMT_INTERFACE proto static" >> "$SCRIPT_PATH"
echo "ip route add $MGMT_CIDR via $MGMT_GATEWAY dev $MGMT_INTERFACE proto static" >> "$SCRIPT_PATH"
echo "ip route del default via $BOND_GATEWAY dev bond0 proto static" >> "$SCRIPT_PATH"
echo "ip route add default via $BOND_GATEWAY dev bond0 proto static" >> "$SCRIPT_PATH"

chmod +x "$SCRIPT_PATH"

echo -e "[Unit]\nDescription=Add Routes Service\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/sbin/add-routes.sh\n\n[Install]\nWantedBy=default.target" > "$SERVICE_PATH"

systemctl daemon-reload
systemctl enable add-routes.service
systemctl restart add-routes.service

echo -e "\n ### add-routes.sh script file path ###"
ls -l $SCRIPT_PATH
echo -e "\n ### add-routes.service file path ###"
ls -l $SERVICE_PATH
echo -e "\n ### add-routes.service status ###"
systemctl status add-routes.service
echo -e "\n ### Show if add-routes.service is enabled at boot ###"
systemctl is-enabled add-routes.service
echo -e "\n ### Show the just added route to ens15f0 ###"
ip route show | grep ens15f0
echo -e "\n ### Show the just added default route  ###"
ip route show | grep default
EOF

次のように置き換えます。

このスニペットは、次のように systemd サービスとスクリプトを作成します。

SCRIPT_PATH="/usr/local/sbin/add-routes.sh
SERVICE_PATH="/usr/lib/systemd/system/add-routes.service

systemd サービスは、システムを再起動した後もルートを維持するために必要です。追加されるルートは次のとおりです。

  • bond0 インターフェースを介したデータ ネットワークへのデフォルト ルート。
  • 管理インターフェースを介した管理ネットワークへのルート。

12.5. マルチゾーン接続を確立する

GDC インスタンスが既存のマルチゾーン ユニバースに参加する場合は、マルチゾーン相互接続を構成するの手順に沿って、ゾーンごとに既存のゾーンと現在デプロイ中のゾーン間のネットワーク接続を確立します。

12.6. トラブルシューティング

ネットワーク ブートストラップのトラブルシューティングについては、ネットワーク ブートストラップのトラブルシューティングをご覧ください。

12.7. 発生する可能性のある問題

バージョン 9.3.10 より前のバージョンがプリロードされているネットワーク スイッチは、ブートストラップに失敗する可能性があります。

詳細については、既知の問題をご覧ください。