ポータブルサブネットを削除したところ、Classicクラスターのロードバランサーが正常に動作しなくなりました。 リカバリーするにはどうすればよいですか?

クラシック

クラスタネットワーク内のサブネットを復元する際のトラブルシューティングを行います。

クラスタにネットワークエラーが発生しています。

ポータブル・サブネットが削除されました。

以下のステップを実行します。

  1. 問題が発生しているクラスターについて、以下のコマンドを実行し、クラスター ID をメモします。

    ibmcloud oc cluster ls
    
  2. クラスターが使用しているサブネットをリストします。 出力の中で、クラスターが使用しているサブネットをメモします。

    ibmcloud oc subnets --provider PROVIDER | grep CLUSTER-ID
    
  3. アカウント内のサブネットをリストします。 ステップ 1 で見つけたサブネットが、アカウント内のサブネットのリストから欠落していないかどうかを確認します。 これは、クラスターが削除されたサブネットを使用しているため、Load Balancer が失敗したことを意味します。

    ibmcloud sl subnet list
    
    ibmcloud sl subnet detail SUBNET-ID
    
  4. 削除されたサブネットごとに、サブネットを再作成します。 ALBまたは「LoadBalancers,」にパブリックIPアドレスが必要な場合は、ワーカーノードのパブリックVLAN IDを指定し、プライベートIPの場合は、ワーカーノードのプライベートVLAN IDを指定します。

    ibmcloud oc cluster subnet create -c CLUSTER --size 8 --vlan VLAN-ID
    
  5. 削除されたポータブル・サブネット内の IP アドレスを使用する LoadBalancers を見つけ、保存してから削除します。 openshift-ingress 名前空間内の LoadBalancers は、後のステップで削除されるため、削除しないでください。

    1. LoadBalancer の詳細を見つけて、使用する IP アドレスをメモします。
        kubectl get svc -A -o wide | grep LoadBalancer
        ```
    1. ポータブル IP アドレスを使用する `openshift-ingress` 名前空間内にない LoadBalancer ごとに、設定を YAML ファイルに保存します。
      ```sh {: pre}
      kubectl get svc -o yaml -n LB-NAMESPACE LB-NAME > LB-NAMESPACE.LB-NAME.yaml
    
    1. LoadBalancerを削除します。
     ```sh {: pre}
     kubectl delete svc -n LB-NAMESPACE LB-NAME
     ```
    
  6. openshift-ingress-operator ポッドが再始動して LoadBalancersを再作成する前にポータブル・サブネットを切り離す必要があるため、以下の手順を素早く実行してください。

    1. 「Ingress」オペレーターの規模を縮小する。
        kubectl scale deploy -n openshift-ingress-operator ingress-operator --replicas 0
        ```
    1. `openshift-ingress` 名前空間内の LoadBalancers を削除します。
    ```sh {: pre}
        kubectl delete svc -n openshift-ingress LB-NAME
        ```
    1. クラスターからポータブル・サブネットを切り離します。
    ```sh {: pre}
        ibmcloud oc cluster subnet detach -c CLUSTER-ID --subnet-id SUBNET-ID
        ```
    
    
  7. detach コマンドが終了するまで数分待ってから、サブネットと IP アドレスを保管する ibm-cloud-provider-vlan-ip-config ConfigMap を調べて、それらが切り離されたことを確認してください。

    kubectl get cm -n kube-system ibm-cloud-provider-vlan-ip-config -o yaml
    

    切り離しが完了するまで、5~10分ほどかかる場合があります。 待っている間に、このクラスタ用に作成した新しいポータブル・サブネットも ConfigMap に表示されるようにします。

  8. openshift-ingress 名前空間内の LoadBalancers が再作成されているかどうかを確認し、再作成されている場合は、使用されている IP アドレスが新しいサブネットからのものであるかどうかを確認します。 古いサブネットからのものである場合は、 kubectl delete svc -n openshift-ingress LOADBALANCER_NAME コマンドを使用して再度削除してください。

  9. openshift-ingress LoadBalancers が新しいサブネットからの IP アドレスを使用して再作成されたら、新しい IP アドレスを DNS レコードに追加します。

    1. DNS エントリーをリストします。
        ibmcloud oc nlb-dns ls -c CLUSTER-ID
        ```
    1. 出力で、 `openshift-ingress` エントリーを見つけ、以下のコマンドを使用してそれらのエントリーに新しい IP アドレスを追加します。
    ```sh {: pre}
        ibmcloud ks nlb-dns add -c CLUSTER-ID --ip NEW-LOADBALANCE-IP --nlb-host INGRESS-DOMAIN-NAME
        ```
    1. 古い IP を削除します。
    ```sh {: pre}
        ibmcloud oc nlb-dns rm classic -c CLUSTER-ID --ip OLD-LOADBALANCER-IP --nlb-host INGRESS-DOMAIN-NAME
        ```
    
  10. 手順 3 で削除した、 openshift-ingress 名前空間に属さないすべての LoadBalancers について、先ほど保存しておいた YAML ファイルを使用して再作成してください。

    kubectl apply -f LB-NAMESPACE.LB-NAME.yaml