Citrix ADC ingress controller

Citrix ingress controller を OpenShift ルータープラグインとしてデプロイする

OpenShift クラスターでは、外部クライアントに Pod が提供するサービスにアクセスする方法が必要です。OpenShift には、クラスターで実行されているサービスと通信するための 2 つのリソース、 ルートとIngressが用意されています。

OpenShift クラスターでは、ルートは特定のドメイン名のサービスを公開したり、ドメイン名をサービスに関連付けたりします。OpenShift ルーターは、routes で指定されたルールに従って OpenShift クラスター内のサービスに外部リクエストをルーティングします。OpenShift ルーターを使用する場合は、トラフィックがルーターに到達するように外部 DNS も設定する必要があります。

Citrix ingress controller は、OpenShift クラスターにルータープラグインとしてデプロイし、環境にデプロイされた Citrix ADC と統合できます。Citrix ingress controller を使用すると、Citrix ADC の高度な負荷分散およびトラフィック管理機能を OpenShift クラスターで使用できます。

OpenShift ルートはセキュリティで保護されている場合と保護されていない場合がありますセキュアなルートは、ルートの TLS 終端を指定します。

Citrix ingress controller は以下の OpenShift ルートをサポートします。

  • セキュリティで保護されていないルート:セキュリティで保護されていないルートの場合、HTTP トラフィックは暗号化されません。

  • エッジターミネーション:エッジターミネーションでは、TLS はルーターで終端されます。内部ネットワーク上のルータからエンドポイントへのトラフィックは暗号化されません。

  • パススルーターミネーション:パススルーターミネーションでは、ルーターは TLS オフロードに関与せず、暗号化されたトラフィックは宛先に直接送信されます。

  • 再暗号化の終了:再暗号化の終了では、ルーターは TLS 接続を終了し、エンドポイントへの別の TLS 接続を確立します。

ルートの詳細については、 OpenShift のドキュメントを参照してください

Citrix ADC MPX または VPX アプライアンスをOpenShiftクラスターの外部にデプロイすることも、Citrix ADC CPXをクラスター内のポッドとしてデプロイすることもできます。Citrix ingress controller は、Citrix ADC を OpenShift クラスターと統合し、ルートで指定されたルールに基づいて Citrix ADC を自動的に構成します。

Citrix ADC の使用方法に基づいて、Citrix Ingress Controller を OpenShift クラスターにルータープラグインとしてデプロイするには、次の 2 つの方法があります。

Citrix ingress controller をデプロイして OpenShift イングレスを制御する方法については、 Kubernetes 用 Citrix ingress controllerを参照してください。

Citrix ADC を使用して、OpenShift コントロールプレーン(マスターノード)の負荷分散を行うことができます。Citrixは、Citrix ADCを手動で構成する代わりに、Terraformを使用してCitrix ADC 構成を自動化するソリューションを提供しています。詳しくは、「 OpenShift コントロールプレーンのロードバランサーとしての Citrix ADC」を参照してください。

代替バックエンドサポート

OpenShift 代替バックエンドが Citrix ingress controller でサポートされるようになりました。

Citrix ADCは、ルート定義で指定された重みに従って構成され、トラフィックはその重みに基づいてサービスポッド間で分散されます。

代替バックエンドを持つルートマニフェストの例を次に示します。

 kind: Route
 apiVersion: route.openshift.io/v1
 metadata:
   name: r1
   labels:
     name: apache
   annotations:
     ingress.citrix.com/frontend-ip: "<Frontend-ip>"
 spec:
   host: some.alternate-backends.com
   to:
     kind: Service
     name: apache-1
     weight: 30
   alternateBackends:
     - kind: Service
       name: apache-2
       weight: 20
     - kind: Service
       name: apache-3
       weight: 50
   port:
     targetPort: 80
   wildcardPolicy: None
<!--NeedCopy-->

このルートでは、ルートマニフェストで指定された重みに基づいて、トラフィックの 30% がサービス apache-1 に、20% がサービス apache2 に、50% がサービス apache-3 に送信されます。

OpenShift でサポートされている Citrix コンポーネント

Citrix コンポーネント バージョン
Citrix ingress controller 最新バージョン
Citrix ADC VPX 12.1 50.x およびそれ以降
Citrix ADC CPX 13.0–36.28

注:

Citrix ingress controller に提供されたCRD は、OpenShift ルートではサポートされていません。OpenShift イングレスを使用して CRD を使用できます。

Citrix ADC CPX を OpenShift クラスター内のルーターとしてデプロイする

このデプロイメントでは、Citrix ADC CPX インスタンスを使用して、OpenShift クラスター内のマイクロサービスへの North-South トラフィックの負荷分散を行うことができます。Citrix ingress controller は、 cpx_cic_side_car.yaml ファイルを使用して、同じポッド内の Citrix ADC CPX コンテナとともにサイドカーとして展開されます

始める前に:Citrix ADC CPX をルーターとしてデプロイすると、OpenShift のデフォルトルーターとポートの競合が発生する可能性があります。Citrix ADC CPX をルーターとしてデプロイする前に、OpenShift でデフォルトルーターを削除する必要があります。OpenShift でデフォルトルーターを削除するには、次の手順に従います。

  1. 次のコマンドを使用して、デフォルトのルーター構成をバックアップします。

    oc get -o yaml dc/router clusterrolebinding/router-router-role serviceaccount/router > default-router-backup.yaml
    
  2. 次のコマンドを使用して、デフォルトルーターを削除します。

    oc delete -f default-router-backup.yaml
    

Citrix ADC CPX をルーターとして展開し、Citrix ingress controller をサイドカーとして展開するには、次の手順を実行します。

  1. 以下のコマンドを使用して cpx_cic_side_car.yaml ファイルをダウンロードします。

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/openshift/manifest/cpx_cic_side_car.yaml
    
  2. OpenShift の特権付きセキュリティーコンテキスト制約 (SCC) にサービスアカウントを追加します。

    oc adm policy add-scc-to-user privileged system:serviceaccount:default:citrix
    
  3. 次のコマンドを使用して、Citrix ingress controller を展開します。

    oc create -f cpx_cic_side_car.yaml
    
  4. 次のコマンドを使用して、Citrix ingress controller が正常に展開されたかどうかを確認します。

    oc get pods --all-namespaces
    

Citrix ADC MPX/VPX を OpenShift クラスターの外部にルーターとしてデプロイする

このデプロイメントでは、スタンドアロンポッドとして実行されるCitrix ingress controller により、OpenShiftクラスターからCitrix ADC MPX、またはVPXアプライアンスを制御できます。 このデプロイメントには cic.yaml ファイルを使用できます。

注: Citrix ADC MPXまたはVPXは、 スタンドアロン高可用性またはクラスタ化モードで展開できます

前提条件

  • Citrix ADCアプライアンスと通信するためにCitrixイングレスコントローラーが必要とするIPアドレスを決定します。Citrix ADC展開のタイプに応じて、IPアドレスは次のいずれかになります。
    • NSIP(スタンドアロンアプライアンスの場合):スタンドアロンCitrix ADCアプライアンスの管理IPアドレス。詳しくは、「 Citrix ADC でのIPアドレッシング」を参照してください。
    • SNIP ( 高可用性モードのアプライアンスの場合): サブネット IP アドレス。詳しくは、「 Citrix ADC でのIPアドレッシング」を参照してください。
    • CLIP(クラスターモードのアプライアンスの場合):クラスター化されたCitrix ADC展開のクラスター管理IP(CLIP)アドレス。詳細については、「 クラスターの IP アドレス指定」を参照してください。
  • Ingressデバイスとして使用されるCitrix ADC VPXまたはMPXアプライアンスのユーザー名とパスワード。デフォルトの資格情報を使用しない場合、Citrix ADCアプライアンスは、Citrix ingress controller ADC MPX、またはVPXアプライアンスを構成できるように、特定の権限を持つシステムユーザーアカウントを持っている必要があります。Citrix ADCでシステムユーザーアカウントを作成するには、Citrix ADCでCitrix ingress controller システムユーザーアカウントを作成するを参照してください

    ユーザー名とパスワードを環境変数として直接 Citrix ingress controller に渡すことも、OpenShift シークレットを使用することもできます (推奨)。OpenShift シークレットを使用する場合は、以下のコマンドを使用して、ユーザー名とパスワードのシークレットを作成します。

     oc create secret generic nslogin --from-literal=username='cic' --from-literal=password='mypassword'
    

Citrix ADCでCitrix ingress controller システムユーザーアカウントを作成する

Citrix ingress controller は、Citrix ADCアプライアンスのシステムユーザーアカウントを使用してCitrix ADCアプライアンス(MPXまたはVPX)を構成します。システムユーザーアカウントには、Citrix ADCで次のタスクを構成する権限が必要です。

  • CS(コンテンツスイッチング)仮想サーバの追加、削除、または表示
  • CS のポリシーとアクションの設定
  • 負荷分散 (LB) 仮想サーバーの構成
  • サービスグループの設定
  • SSL 証明書キーの構成
  • ルートの設定
  • ユーザーモニターの構成
  • システムファイルの追加 (OpenShift から SSL テストキーをアップロードするため)
  • 仮想 IP アドレス (VIP) を構成する
  • Citrix ADCアプライアンスのステータスを確認する
  • SSL アクションとポリシーの設定
  • SSL 仮想サーバの構成
  • レスポンダーアクションとポリシーを構成する

システムユーザーアカウントを作成するには、次の手順に従います。

  1. Citrix ADCアプライアンスにログオンするには、次の手順に従います。

    1. PuTTY などのSSHクライアントを使用して、Citrix ADCアプライアンスへのSSH接続を開きます。

    2. 管理者の資格情報を使用して、アプライアンスにログオンします。

  2. 次のコマンドを使用して、system ユーザーアカウントを作成します。

    add system user <username> <password>
    

    次に例を示します:

    add system user cic mypassword
    
  3. システムユーザーアカウントに必要なアクセス権限を付与するポリシーを作成します。次のコマンドを使用します:

    add cmdpolicy cic-policy ALLOW '^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)'
    

    :システムユーザアカウントには、定義したコマンドポリシーに基づく権限が付与されます。

    手順 3 で説明したコマンドポリシーは、ファイルをアップロードする別の権限を持つ組み込みsysAdminコマンドポリシーと似ています。

    提供されているコマンドポリシー仕様では、Citrix ADC コマンドラインに簡単にコピーアンドペーストできるように、エスケープする必要のある特殊文字はすでに省略されています。

    Citrix ADC構成ウィザード(GUI)からコマンドポリシーを構成するには、次のコマンドポリシー仕様を使用します。

    ^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)
    
  4. 以下のコマンドを使用して、ポリシーをシステムユーザーアカウントにバインドします。

    bind system user cic cic-policy 0
    

Citrix ingress controller を OpenShift クラスターの Pod としてデプロイする

Citrix ingress controller をポッドとして展開するには、次の手順を実行します。

  1. 以下のコマンドを使用して cic.yaml ファイルをダウンロードします。

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/openshift/manifest/cic.yaml
    
  2. cic.yaml ファイルを編集し、次の環境変数の値を入力します。

    環境変数 必須または任意 説明
    NS_IP 固定 Citrix ADCアプライアンスのIPアドレス。詳細については、「 前提条件」を参照してください。
    NS_USER と NS_PASSWOR 固定 Ingressデバイスとして使用されるCitrix ADC VPXまたはMPXアプライアンスのユーザー名とパスワード。詳細については、「 前提条件」を参照してください。
    EULA 固定 エンドユーザー使用許諾契約書。値をYesとして指定します。
    NS_VIP オプション Citrix ingress controller は、この環境変数で指定されたIPアドレスを使用して、Ingressトラフィックを受信するCitrix ADCへの仮想IPアドレスを構成します。注: NS_VIP は、Ingress または Route yaml で frontend-ip アノテーションが提供されていない場合のフォールバックとして機能します。Type Loadbalancer サービスではサポートされていません。
  3. OpenShift の特権付きセキュリティーコンテキスト制約 (SCC) にサービスアカウントを追加します。

    oc adm policy add-scc-to-user privileged system:serviceaccount:default:citrix
    
  4. 編集したcic.yamlファイルを保存し、以下のコマンドを使用してデプロイします。

     oc create -f cic.yaml
    
  5. 次のコマンドを使用して、Citrix ingress controller が正常に展開されたかどうかを確認します。

    oc create get pods --all-namespaces
    
  6. OpenShift クラスター内のポッドに到達するように、Citrix ADC VPX または MPX で静的ルートを構成します。

    1. スタティックルート設定のホスト名、ホスト IP アドレス、サブネットに関する情報を取得するには、次のコマンドを使用します。

      oc get hostsubnet
      
    2. Citrix ADC インスタンスにログオンします。

    3. 次のコマンドを使用して、Citrix ADC インスタンスにルートを追加します。

      add route <pod_network> <netmask> <gateway>
      
    <B>Example:</b>
    
          oc get hostsubnet
          
          NAME            HOST           HOST IP        SUBNET
          os.example.com  os.example.com 192.168.122.46 192.1.1.0/24
    
     From the output of the `oc get hostsubnet` command:
    
          <pod_network> = 192.1.1.0
          Value for subnet = 192.1.1.0/x where x = 24 that means <netmask>= 255.255.255.0
          <gateway> = 192.168.122.46
    
     The required static route to add on Citrix ADC is as follows:
    
          add route 10.1.1.0 255.255.255.0 192.168.122.46
    

例:Citrix ingress controller を OpenShift クラスターにルータープラグインとしてデプロイする

この例では、Citrix ingress controller が OpenShift クラスターにルータープラグインとしてデプロイされ、アプリケーションの負荷分散が行われます。

  1. 以下のコマンドを使用して、OpenShift クラスターにサンプルアプリケーション (apache.yaml) をデプロイし、クラスターのサービスとして公開します。

    oc create -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/openshift/manifest/apache.yaml
    

    注: OpenShift で通常の Apache Pod をデプロイすると、Apache Pod は常にルート Pod として実行されるため、失敗することがあります。OpenShift には厳密なセキュリティーチェックがあり、Pod をルートとして実行したり、ポート 80 にバインドしたりすることをブロックします回避策として、以下のコマンドを使用して、Pod のデフォルトのサービスアカウントを OpenShift の特権付きセキュリティーコンテキストに追加できます。

        oc adm policy add-scc-to-user privileged system:serviceaccount:default:default
        oc adm policy add-scc-to-group anyuid system:authenticated
    

    apache.yaml ファイルの内容は以下の通りです。

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        name: apache-only-http
      name: apache-only-http
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: apache-only-http
      template:
        metadata:
          labels:
            app: apache-only-http
        spec:
          containers:
          - image: raghulc/apache-multiport-http:1.0.0
            imagePullPolicy: IfNotPresent
            name: apache-only-http
            ports:
            - containerPort: 80
              protocol: TCP
            - containerPort: 5080
              protocol: TCP
            - containerPort: 5081
              protocol: TCP
            - containerPort: 5082
              protocol: TCP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        name: apache-only-ssl
      name: apache-only-ssl
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: apache-only-ssl
      template:
        metadata:
          labels:
            app: apache-only-ssl
        spec:
          containers:
          - image: raghulc/apache-multiport-ssl:1.0.0
            imagePullPolicy: IfNotPresent
            name: apache-only-ssl
            ports:
            - containerPort: 443
              protocol: TCP
            - containerPort: 5443
              protocol: TCP
            - containerPort: 5444
              protocol: TCP
            - containerPort: 5445
              protocol: TCP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-apache-multi-http
    spec:
      ports:
      - name: apache-http-6080
        port: 6080
        targetPort: 5080
      - name: apache-http-6081
        port: 6081
        targetPort: 5081
      - name: apache-http-6082
        port: 6082
        targetPort: 5082
      selector:
        app: apache-only-http
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-apache-multi-ssl
    spec:
      ports:
      - name: apache-ssl-6443
        port: 6443
        targetPort: 5443
      - name: apache-ssl-6444
        port: 6444
        targetPort: 5444
      - name: apache-ssl-6445
        port: 6445
        targetPort: 5445
      selector:
        app: apache-only-ssl
    ---
    
  2. Citrix ingress controller をポッドとしてデプロイするの手順を使用して、Citrix ADC VPX の Citrix ingress controller を OpenShift クラスターにスタンドアロンポッドとしてデプロイします

    oc create -f cic.yaml
    

    注: Citrix ADC CPX とともにCitrix イングレスコントローラーを OpenShift クラスターにデプロイするには、「Citrix ADC CPX でサイドカーとしてCitrix イングレスコントローラーをデプロイする」の手順を実行します。

  3. アプリケーションを公開するための OpenShift ルートを作成します。

    • セキュリティで保護されていない OpenShift ルート (unsecured-route.yaml) を作成するには、以下のコマンドを使用します。

       oc create -f unsecured-route.yaml
      
    • エッジターミネーション付きのセキュアな OpenShift ルート (secured-edge-route.yaml) を作成するには、以下のコマンドを使用します。

       oc create -f secured-route-edge.yaml
      
    • パススルーターミネーション付きのセキュアな OpenShift ルート (secured-passthrough-route.yaml) を作成するには、以下のコマンドを使用します。

       oc create -f secured-passthrough-route.yaml
      
    • 再暗号化が終了するセキュアな OpenShift ルート (secured-reencrypt-route.yaml) を作成するには、以下のコマンドを使用します。

       oc create -f secured-reencrypt-route.yaml
      

    この例の OpenShift ルートの YAML ファイルの内容を確認するには、 ルートの YAML ファイルを参照してください

    注:

    パススルー終了を伴うセキュアな OpenShift ルートの場合は、デフォルトの証明書を含める必要があります。

  4. 以下のコマンドを使用してアプリケーションにアクセスします。

      curl http://<VIP of Citrix ADC VPX>/ -H 'Host: < host-name-as-per-the-host-configuration-in-route >'
      <!--NeedCopy-->
    

ルートの YAML ファイル

このセクションには、例で指定されているセキュリティで保護されていないルートとセキュアなルートの YAML ファイルが含まれています。

注: この例で使用されているキーは、テストのみを目的としています。実際のデプロイメントでは、独自のキーを作成する必要があります。

unsecured-route.yamlファイルの内容は次のようになります。

apiVersion: v1
kind: Route
metadata:
  name: unsecured-route
spec:
  host: unsecured-route.openshift.citrix-cic.com
  path: "/"
  to:
    kind: Service
    name: svc-apache-multi-http
<!--NeedCopy-->

secured-edge-route.yaml ファイルの内容については、 secured-edge-route を参照してください。

secured-passthrough-route の内容は以下のとおりです。

apiVersion: v1
kind: Route
metadata:
  name: secured-passthrough-route
spec:
  host: secured-passthrough-route.openshift.citrix-cic.com
  to:
    kind: Service
    name: svc-apache-multi-ssl
  tls:
    termination: passthrough
<!--NeedCopy-->

secured-reencrypt-route.yaml ファイルの内容については、 secured-reencrypt-route を参照してください。