オンプレミスKubernetesクラスター向けMetalLBレイヤー2モードでのNetScaler CPX統合

最終公開日 : Oct 02, 2026
クラウド環境では、LoadBalancerタイプのKubernetesサービスサポートはクラウドロードバランサーによって提供されます。クラウドサービスプロバイダーは、ロードバランサーを自動的に作成し、サービスステータスの一部として表示されるIPアドレスを割り当てることで、このサポートを有効にします。外部IPアドレス宛てのトラフィックはすべて、クラウドロードバランサーによってNodeIPとNodePortでロードバランシングされます。
NetScalerは、オンプレミス環境でLoadBalancerタイプのサービスをサポートするためのさまざまなオプションを提供します。
  • 外部のNetScaler VPXまたはNetScaler MPXをティア1ロードバランサーとして使用し、Kubernetesサービスへの受信トラフィックをロードバランシングする。
このようなデプロイメントの詳細については、LoadBalancerタイプのサービスを公開するを参照してください。
  • Kubernetesクラスター内で実行されているNetScaler CPXデーモンセットと、BGP経由のECMPをサポートするルーターを使用して、Kubernetesクラスター内で実行されているアプリケーションを公開する。ECMPルーターは、複数のNetScaler CPXインスタンスにトラフィックをロードバランシングします。NetScaler CPXインスタンスは、実際のアプリケーションポッドをロードバランシングします。このようなデプロイメントの詳細については、NetScaler CPXを使用したLoadBalancerタイプのサービスおよびIngressの外部IPアドレスのBGPアドバタイズを参照してください。
  • NetScaler CPXサービスを、ノードの外部IPアドレスを持つ外部IPサービスとして公開する。ティア1として外部ADCが実現不可能で、BGPルーターが存在しない場合に、このオプションを使用できます。このデプロイメントでは、Kubernetesはサービスポート上のNetScaler CPXサービスのspec.externalIPに来るトラフィックをNetScaler CPXポッドにルーティングします。Ingressリソースは、NetScaler Ingress Controllerを使用して、SSL(Secure Sockets Layer)オフロードとアプリケーションのロードバランシングを実行するように構成できます。ただし、このデプロイメントには、ノード障害が発生した場合に信頼性が低いという大きな欠点があります。
  • NetScaler CPXと連携してレイヤー2モードでベアメタルKubernetesクラスター用のロードバランサー実装であるMetalLBを使用し、Ingress機能を実現する。
このドキュメントでは、他のソリューションが実現不可能な場合に、MetalLBとNetScaler CPXを連携させてベアメタルクラスターでIngress機能を実現する方法を示します。レイヤー2モードのMetalLBは、すべてのトラフィックをNetScaler CPXサービスに送信するように1つのノードを構成します。ノード障害が発生した場合、MetalLBはIPアドレスを別のノードに自動的に移動します。これにより、ExternalIPサービスよりも優れた信頼性が提供されます。
注: MetalLBはまだベータ版です。プロジェクトの成熟度と制限事項については、公式ドキュメントを参照してください。
オンプレミスKubernetesクラスター向けに、レイヤー2モードでMetalLBとのNetScaler CPX統合をデプロイするには、次の手順を実行します。
  1. MetalLBをインストールして構成する
  2. レイヤー2用のMetalLB構成を構成する
  3. NetScaler CPXサービスをインストールする

MetalLBをインストールして構成する

まず、MetalLBをレイヤー2モードでインストールする必要があります。MetalLBのさまざまなインストールタイプに関する詳細については、MetalLB documentationを参照してください。
MetalLBをインストールするには、以下の手順を実行します。
  1. MetalLBをデプロイするための名前空間を作成します。
    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
  2. 以下のコマンドを使用してMetalLBをデプロイします。
    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
  3. 初めてインストールを実行する場合は、以下の手順を実行します。
    kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
  4. 以下のコマンドを使用して、MetalLBのインストールを確認し、スピーカーとコントローラーが実行状態であることを確認します。
    kubectl get pods -n metallb-system
これらの手順により、MetalLBはmetallb-system名前空間の下にクラスターにデプロイされます。
MetalLBデプロイメントYAMLファイルには、以下のコンポーネントが含まれています。
  • metallb-system/controllerデプロイメント: このコンポーネントは、IPアドレスの割り当てを処理するクラスター全体のコントローラーです。
  • metallb-system/speakerデーモンセット: このコンポーネントは、選択したプロトコルを使用して通信し、サービスに到達可能にします。
  • コントローラーとスピーカーのサービスアカウント、およびコンポーネントが機能するために必要なRBAC権限。

レイヤー2のMetalLB構成

MetalLBがインストールされたら、レイヤー2モード用にMetalLBを構成する必要があります。MetalLBは、タイプLoadBalancerサービスに外部IPとして割り当てられるIPアドレスの範囲を受け取ります。このデプロイメントでは、NetScaler CPXサービスが他のすべてのアプリケーションのフロントエンドとして機能します。したがって、単一のIPアドレスで十分です。
以下のコマンドを使用してMetalLBのConfigMapを作成します。ここで、metallb-config.yamlはMetalLB構成を含むYAMLファイルです。
kubectl create –f metallb-config.yaml
以下は、レイヤー2モードのMetalLB構成のサンプルです。この例では、192.168.1.240-192.168.1.240がIPアドレス範囲として指定されています。

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.240

NetScaler CPX サービスインストール

MetalLB が正常にインストールされたら、NetScaler CPX デプロイメントと LoadBalancer タイプのサービスをインストールできます。
NetScaler CPX をインストールするには、YAML ファイルまたは Helm チャートを使用できます。
YAML ファイルを使用して NetScaler CPX をインストールするには、次の手順を実行します。
  1. NetScaler CPX デプロイメントマニフェストをダウンロードします。
    wget https://github.com/citrix/citrix-k8s-ingress-controller/blob/master/deployment/baremetal/citrix-k8s-cpx-ingress.yml
  2. NetScaler CPX デプロイメント YAML を編集します。
    • 必要に応じてレプリカ数を設定します。高可用性を実現するには、複数のレプリカを持つ方が適切です。
    • サービスタイプを LoadBalancer に変更します。
  3. 編集した YAML ファイルを Kubectl コマンドを使用して適用します。
    kubectl apply –f citrix-k8s-cpx-ingress.yaml
  4. 次のコマンドを使用してサービスを表示します。
    kubectl get svc cpx-service -output yaml
    MetalLB が NetScaler CPX サービスに外部 IP アドレスを次のように割り当てていることがわかります。

apiVersion: v1
kind: Service
metadata:
  name: cpx-service
  namespace: default
spec:
  clusterIP: 10.107.136.241
  externalTrafficPolicy: Cluster
  healthCheckNodePort: 31916
  ports:
  - name: http
    nodePort: 31528
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 31137
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: cpx-ingress
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.168.1.240

サンプルアプリケーションをデプロイする

サンプルアプリケーションをデプロイし、デプロイメントを検証するには、次の手順を実行します。
  1. sample-deployment.yaml ファイルを使用してサンプルデプロイメントを作成します。
    kubectl create –f sample-deployment.yaml
  2. sample-service.yaml ファイルを使用して、サービスでアプリケーションを公開します。
    kubectl create –f sample-service.yaml
  3. サービスが作成されたら、sample-ingress.yamlを使用してイングレスリソースを追加できます。
    kubectl create –f sample-ingress.yaml
次のようにcpx-service外部IPアドレスを使用してアプリケーションにアクセスすることで、イングレスをテストできます。
curl -v http://192.168.1.240 -H ‘host: testdomain.com’

その他のリファレンス

MetalLBの構成とトラブルシューティングの詳細については、次のリンクを参照してください。