Citrix ADC ingress controller

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

サポートタイプLoadBalancerの Kubernetes サービスは、クラウド環境のクラウドロードバランサによって提供されます。クラウドサービスプロバイダーは、ロードバランサーを自動的に作成し、サービスステータスの一部として表示される IP アドレスを割り当てることで、このサポートを有効にします。外部 IP アドレス宛てのトラフィックは、クラウドロードバランサーによって NodeIP と NodePort で負荷分散されます。

Citrix は、オンプレミス環境でタイプLoadBalancerサービスをサポートするために、次のようなさまざまなオプションを提供しています。

  • 外部のCitrix ADC VPXまたはCitrix ADC MPXをティア1ロードバランサーとして使用して、Kubernetesサービスへの着信トラフィックを負荷分散します。

このようなデプロイメントの詳細については、「 LoadBalancer タイプのサービスを公開する」を参照してください。

  • Kubernetes クラスター内で実行されている Citrix ADC CPX デーモンセットと、ECMP over BGP をサポートするルーターを使用して、Kubernetes クラスターで実行されているアプリケーションを公開します。ECMPルーターは、複数のCitrix ADC CPXインスタンスへのトラフィックを負荷分散します。Citrix ADC CPX インスタンスは、実際のアプリケーションポッドを負荷分散します。このような展開の詳細については、「 LoadBalancerサービスタイプの外部IPアドレスのBGPアドバタイズメント」および「Citrix ADC CPX を使用したイングレス」を参照してください。

  • Citrix ADC CPXサービスを、ノードの外部IPアドレスを持つ外部IPサービスとして公開します。Tier-1 としての外部 ADC が使用できず、BGP ルータが存在しない場合に、このオプションを使用できます。この展開では、Kubernetesはサービスポート上のCitrix ADC CPXサービスのspec.externalIPに着信するトラフィックをCitrix ADC CPXポッドにルーティングします。Ingress リソースは、Citrix ingress controller を使用してSSL(Secure Sockets Layer)オフロードおよび負荷分散アプリケーションを実行するように構成できます。ただし、このデプロイメントには、ノードに障害が発生した場合に信頼性が低くなるという大きな欠点があります。

  • Citrix ADC CPX でレイヤー2モードのベアメタルKubernetesクラスター用のロードバランサー実装であるMetalLBを使用して 、イングレス機能を実現します。

このドキュメントでは、他のソリューションが実現不可能な場合に、Citrix ADC CPX とともに MetallB を活用してベアメタルクラスタでイングレス機能を実現する方法について説明します。レイヤー2モードのMetalLBは、すべてのトラフィックをCitrix ADC CPXサービスに送信するように1つのノードを構成します。MetaLB は、ノードに障害が発生した場合、IP アドレスを別のノードに自動的に移動します。したがって、ExternalIP サービスよりも信頼性が向上します。

注: MetallB はまだベータ版です。プロジェクトの成熟度と制限については、公式ドキュメントを参照してください。

オンプレミスのKubernetesクラスターにCitrix ADC CPXとMetalLBとの統合をレイヤー2モードで展開するには、次の手順を実行します。

  1. MetalLB をインストールして構成する
  2. レイヤ 2 の MetalLB 設定を構成する
  3. Citrix ADC CPXサービスをインストールする

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

まず、MetallB をレイヤー 2 モードでインストールする必要があります。MetalLB のさまざまなタイプのインストールについて詳しくは、 MetalLB のドキュメントを参照してください

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-systemnamespace の下にデプロイします。

MetallB デプロイメント YAML ファイルには、次のコンポーネントが含まれています。

  • metallb システム/コントローラのデプロイ:このコンポーネントは、IP アドレスの割り当てを処理するクラスタ全体のコントローラです。

  • metallb システム/スピーカーデーモンセット。このコンポーネントは、選択したプロトコルを使用して通信し、サービスに到達できるようにします。

  • コントローラとスピーカのサービスアカウント、およびコンポーネントが機能するために必要な RBAC 権限が含まれます。

レイヤ 2 の MetalLB 設定

metallB をインストールしたら、MetallB をレイヤ 2 モードに設定する必要があります。metallB は、LoadBalancer タイプのサービスに割り当てられる IP アドレスの範囲を外部 IP として受け取ります。この展開では、Citrix ADC CPXサービスが他のすべてのアプリケーションのフロントエンドとして機能します。したがって、IP アドレスは 1 つで十分です。

次のコマンドを使用して metallB 用の ConfigMap を作成します。 metallb-config.yaml は metallB 設定を含む YAML ファイルです。

kubectl create –f metallb-config.yaml 

レイヤ 2 モードの MetalLB 設定の例を次に示します。この例では、IP アドレスの範囲として 192.168.1.240-192.168.1.240 が指定されています。


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
<!--NeedCopy-->

Citrix ADC CPX サービスのインストール

Metal LBが正常にインストールされたら、Citrix ADC CPX展開とタイプLoadBalancerのサービスをインストールできます。

Citrix ADC CPX をインストールするには、YAML ファイルまたは Helm チャートを使用できます。

YAMLファイルを使用してCitrix ADC CPXをインストールするには、次の手順に従います。

  1. Citrix ADC CPX 展開マニフェストをダウンロードします。

    wget https://github.com/citrix/citrix-k8s-ingress-controller/blob/master/deployment/baremetal/citrix-k8s-cpx-ingress.yml 
    
  2. Citrix ADC CPX 展開の YAML を編集します。

    • 必要に応じて、レプリカ数を設定します。高可用性を実現するには、複数のレプリカを用意することをお勧めします。
    • サービスタイプをLoadBalancerに変更します。
  3. Kubectl コマンドを使用して、編集した YAML ファイルを適用します。

    kubectl apply –f citrix-k8s-cpx-ingress.yaml 
    
  4. 以下のコマンドを使用して、サービスを表示します。

    kubectl get svc cpx-service -output yaml
    

    MetalLB が外部IPアドレスをCitrix ADC CPXサービスに次のように割り当てていることがわかります。


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

<!--NeedCopy-->

サンプルアプリケーションのデプロイ

サンプルアプリケーションをデプロイし、デプロイを検証するには、次の手順を実行します。

  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  
    

Ingress をテストするには、次のようにcpx-service外部 IP アドレスを使用してアプリケーションにアクセスします。

   curl -v http://192.168.1.240 -H ‘host: testdomain.com’ 

その他の参考資料

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

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