|
テストを容易にするため、Ingress コントローラーに LoadBalaner タイプのサービスを構成する準備をしました。これはローカルのプライベート環境なので、このサービスタイプをサポートするロードバランサーをデプロイする必要があります。現在、コミュニティで最も人気のあるプロジェクトは MetalLB です。これは CNCF サンドボックスプロジェクトでもあります。2017 年末に開始され、4 年間の開発を経てコミュニティで広く採用されています。しかし、私がテストしたところ、MetalLB は常に不安定で、変更を有効にするためにコントローラーの再起動が必要になることがよくありました。そこで、中国の QingCloud が最近オープンソース化した別のロードバランサーである OpenELB に注目しました。 OpenELB(旧称PorterLB)は、ベアメタル、エッジ、プライベート環境向けに設計されたロードバランサプラグインです。Kubernetes、K3s、KubeSphereのロードバランサプラグインとして使用し、クラスタ外部にLoadBalancerタイプのサービスを公開できます。現在、CNCFサンドボックスプロジェクトとして公開されており、そのコア機能には以下が含まれます。
MetaLBと比較して新進気鋭のOpenELBは、Kubernetesネイティブな実装を採用しており、CRDを介して直接設定・管理できます。以下は、OpenELBとMetaLBの簡単な比較です。 クラウドネイティブアーキテクチャOpenELBでは、CRDを使用してアドレス管理とBGP設定の両方を設定できます。Kubectlに慣れているユーザーにとって、OpenELBは非常に使いやすいです。MetalLBでは、設定はConfigMapを介して行われ、その状態を監視するには監視システムまたはログを確認する必要があります。 柔軟な住所管理OpenELBは、EIPと呼ばれるカスタムリソースオブジェクトを通じてアドレスを管理します。EIPは、アドレス割り当てステータスを保存するためのStatusと呼ばれるサブリソースを定義し、アドレス割り当て時にレプリカ間の競合を防ぎます。 gobgpを使用してルートを公開する独自のBGPプロトコルを実装するMetalLBとは異なり、OpenELBは標準のgobgpを使用してルートをアドバタイズします。これには以下の利点があります。
シンプルなアーキテクチャ、低リソース消費OpenELBは現在、デプロイメントのデプロイのみを必要とし、複数のレプリカを通じて高可用性を実現しています。一部のレプリカに障害が発生しても、確立された通常の接続には影響しません。 BGPモードでは、デプロイメントの各レプリカはルータとの接続を確立し、等コストルートを発行します。そのため、通常は2つのレプリカをデプロイするだけで済みます。レイヤー2モードでは、Kubernetesが提供するリーダー選出メカニズムを通じて、異なるレプリカがリーダーを選出し、ARP/NDPリクエストに応答します。 インストールKubernetes クラスターでは、OpenELB は一度だけインストールすれば済みます。インストール後、クラスターに `openelb-manager` デプロイメントがインストールされ、1 つの `openelb-manager` ポッドが含まれます。`openelb-manager` ポッドは、Kubernetes クラスター全体に OpenELB の機能を実装します。インストール後、`openelb-manager` デプロイメントを拡張して、複数の OpenELB レプリカ(`openelb-manager` ポッド)を複数のクラスターノードに分散し、高可用性を確保できます。詳細については、「複数の OpenELB レプリカの設定」をご覧ください。 OpenELB のインストールと使用は非常に簡単です。次のコマンドを使用して 1 回のクリックでインストールできます。 # k8s.gcr.io イメージを取得できない場合は、その中のイメージを置き換える必要があることに注意してください。☸ ➜ kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml 上記のリソースマニフェストは、「openelb-manager」という名前のデプロイメントリソースオブジェクトをデプロイします。「openelb-manager」Podは、Kubernetesクラスター全体にOpenELB機能を実装します。高可用性を確保するため、このコントローラーは2つのレプリカに拡張できます。初期インストールでは、アドミッションWebhook用のHTTPS証明書も構成されます。インストール後、Podのステータスが正常かどうかを確認してください。 ☸ ➜ kubectl ポッドを取得- n openelb-system さらに、関連する CRD ユーザー OpenELB 構成がいくつかインストールされます。 ☸ ➜ kubectl get crd | grep kubesphere 構成次に、OpenELBをレイヤー2モードで使用する方法を説明します。まず、すべてのKubernetesクラスタノードが同じレイヤー2ネットワーク(同じルーター)上にあることを確認する必要があります。私のテスト環境には合計3つのノードがあり、ノード情報は以下の通りです。 ☸ ➜ kubectl ノードを取得- o ワイド 3 つのノードの IP アドレスは、192.168.0.109、192.168.0.110、192.168.0.111 です。 まず、kube-proxy に対して strictARP を有効にして、Kubernetes クラスター内のすべてのネットワーク インターフェースが他のネットワーク インターフェースからの ARP 要求に応答しなくなり、代わりに OpenELB が ARP 要求を処理できるようにする必要があります。 ☸ ➜ kubectl edit configmap kube-proxy - n kube-system 次に、次のコマンドを実行して、kube-proxy コンポーネントを再起動します。 ☸ ➜ kubectl ロールアウトdaemonset kube-proxy - n kube-system を再起動します OpenELBがインストールされたノードに複数のネットワークインターフェースがある場合、OpenELBがレイヤー2モードで使用するネットワークインターフェースを指定する必要があります。ノードにネットワークインターフェースが1つしかない場合は、この手順を省略できます。OpenELBがインストールされたmaster1ノードに2つのネットワークインターフェース(eth0 192.168.0.2とens33 192.168.0.111)があり、eth0 192.168.0.2をOpenELBで使用すると仮定すると、master1ノードにネットワークインターフェースを指定するためのアノテーションを追加する必要があります。 ☸ ➜ kubectl annotate nodes master1 layer2 .openelb .kubesphere .io / v1alpha1 = "192.168.0.2" 次に、OpenELBのIPアドレスプールとして機能するEipオブジェクトを作成します。以下のようにリソースオブジェクトを作成します。 api バージョン: ネットワーク.kubesphere.io / v1alpha2 ここでは、`address` 属性を使ってIPアドレスプールを指定します。OpenELBで使用される1つ以上のIPアドレスを入力できます(異なるEIPオブジェクトのIP範囲は重複できないことに注意してください)。値の形式は以下のとおりです。
`protocol` 属性は、EIP オブジェクトが使用される OpenELB モードを指定します。Layer2 または BGP に設定でき、デフォルトは BGP です。ここでは Layer2 モードを使用するため、明示的に指定する必要があります。`interface` 属性は、OpenELB が ARP または NDP 要求をリッスンするネットワークインターフェースを指定します。このフィールドは、protocol が Layer2 に設定されている場合にのみ有効です。私の環境では、ens33 ネットワークインターフェースです。`disable` 属性は、EIP オブジェクトを無効にするかどうかを示します。 EIP オブジェクトを作成した後、Status パラメータを使用して IP プールの特定のステータスを表示できます。 ☸ ➜ kubectl でeip を取得 ロード バランサーのアドレス プールが準備できたので、次に示すように、単純なサービスを作成し、ロード バランサーを通じて公開します。 # openelb-nginx .yaml シンプルな nginx サービスをデプロイする方法は次のとおりです。 ☸ ➜ kubectl apply -f openelb -nginx .yaml 次に、次に示すように、LoadBalancer タイプのサービスを作成して、nginx サービスを公開します。 # openelb-nginx-svc .yaml ここで、サービスにいくつかの注釈を追加したことに注意してください。
同様に、上記のサービスを直接作成します。 ☸ ➜ kubectl apply -f openelb -nginx-svc .yaml 作成後、サービスに EXTERNAL-IP が割り当てられていることがわかります。これを使用して、nginx サービスにアクセスできます。 ☸ ➜ 192.168.0.101 をカールする さらに、OpenElbはBGPモードとマルチルートクラスタシナリオもサポートしています。アップデート方法と使用方法の詳細については、公式ドキュメント(https://openelb.github.io/docs/)をご覧ください。 参考資料
|