Citrix ADC ingress controller

YAML を使用して Citrix Ingress Controller をデプロイする

[ベアメタルおよびクラウド環境では](https://github.com/citrix/citrix-k8s-ingress-controller/tree/master/deployment) 、Citrix Ingress Controller を次のモードで展開できます。

Citrix ADC MPXまたはVPXアプライアンス用のKubernetesクラスターにCitrixIngress Controllerをスタンドアロンポッドとして展開する

Citrix-k8s-ingress-controller.yaml ファイルを使用して、Citrix Ingress Controller を Kubernetes クラスター内のスタンドアロンポッドとして実行します。

注:

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

前提条件

  • コントローラがアプライアンスと通信するために必要な NS_IP IP アドレスを確認します。Citrix ADC展開のタイプに応じて、IPアドレスは次のいずれかになります。
  • Ingressデバイスとして使用されるCitrix ADC VPXまたはMPXアプライアンスのユーザー名とパスワード。Citrix ADCアプライアンスには、Citrix Ingress Controller ADC VPXまたはMPXアプライアンスを構成できるように、特定の権限を持つシステムユーザーアカウント(デフォルト以外)が必要です。Citrix ADCでシステムユーザーアカウントを作成する手順については、Citrix ADCでのCitrix Ingress Controller システムユーザーアカウントの作成を参照してください

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

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

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

Citrix Ingress Controller は、Citrix ADCのシステムユーザーアカウントを使用してCitrix ADCアプライアンス(MPXまたはVPX)を構成します。Citrix Ingress ControllerがCitrix ADCで以下を構成する権限を持つように、システムユーザーアカウントには特定の権限が必要です。

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

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

  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 をポッドとしてデプロイする

以下の手順に従います。

  1. 以下のコマンドを使用して、 citrix-k8s-ingress-controller.yaml をダウンロードします。

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

    環境変数 必須または任意 説明
    NS_IP 固定 Citrix ADCアプライアンスのIPアドレス。詳細については、「 前提条件」を参照してください。
    NS_USER と NS_PASSWOR 固定 Ingressデバイスとして使用されるCitrix ADC VPXまたはMPXアプライアンスのユーザー名とパスワード。詳細については、「 前提条件」を参照してください。
    EULA 固定 エンドユーザー使用許諾契約書。値をYesとして指定します。
    Kubernetes オプション Citrix Ingress Controller がイベントの登録に使用する kube-apiserver URL。値が指定されていない場合、Citrix Ingress Controller は内部 kube-apiserver IP アドレスを使用します
    LOGLEVEL オプション Citrix Ingress Controllerによって生成されるログを制御するログレベル。デフォルトでは、この値は DEBUG に設定されています。サポートされる値は、クリティカル、エラー、警告、情報、デバッグです。詳しくは、「 ログレベル」を参照してください。
    NS_PROTOCOLとNS_PORT オプション Citrix IngressコントローラーがCitrix ADCと通信するために使用するプロトコルとポートを定義します。デフォルトでは、Citrix Ingress Controller はポート80でHTTPを使用します。HTTPS はポート 443 でも使用できます。
    ingress-classes オプション 複数のイングレスロードバランサーを使用して、異なるイングレスリソースのロードバランシングを行う場合。この環境変数を使用して、Citrix Ingress Controller を指定して、特定のイングレスクラスに関連付けられたCitrix ADCを構成できます。Ingress クラスについて詳しくは、 Ingress クラスのサポートを参照してください
    NS_VIP オプション Citrix Ingress Controller は、この環境変数で指定されたIPアドレスを使用して、Ingressトラフィックを受信するCitrix ADCへの仮想IPアドレスを構成します。注: NS_VIP は、Ingress yaml で frontend-ip アノテーションが提供されていない場合のフォールバックとして機能します。Type Loadbalancer サービスではサポートされていません。
    NS_APPS_NAME_PREFIX オプション デフォルトでは、Citrix Ingress Controller は、コンテンツスイッチング(CS)仮想サーバー、負荷分散(LB)仮想サーバーなどのCitrix ADCエンティティに接頭辞として「k8s」を追加します。Citrix Ingress Controller デプロイメントYAMLファイルのNS_APPS_NAME_PREFIX環境変数を使用して、プレフィックスをカスタマイズできるようになりました。プレフィックスには英数字を使用できます。プレフィクスの長さは 8 文字を超えないようにしてください。
    名前空間 オプション 役割ベースのRBACを使用してCitrix Ingress Controller を実行する場合、イベントをリッスンまたは取得する名前空間を指定する必要があります。この名前空間は、サービスアカウントの作成に使用した名前空間と同じである必要があります。Citrix Ingress Controller はサービスアカウントを使用して、名前空間でリッスンできます。 NAMESPACE 環境変数を使用して名前空間を指定することができます。詳しくは、「 名前空間にCitrix Ingress Controller を展開する」を参照してください。
    POD_IPS_FOR_SERVICEGROUP_MEMBERS オプション デフォルトでは、外部のTier-1 Citrix ADCでLoadBalancerとNodePortタイプのサービスを構成すると、Citrix Ingress Controller はサービスグループメンバーとしてnodeIPとNodePortを追加します。この変数をTrueに設定すると 、サービスグループメンバーとして nodeIP と NodePort の代わりに Pod の IP アドレスとポートが追加されます。
    IGNORE_NODE_EXTERNAL_IP オプション 外部のティア1 Citrix ADCにLoadBalancerまたはNodePortタイプのサービスにNodeIPを追加すると、Citrix Ingress Controller は内部IPアドレスよりも外部IPアドレスを優先します。NodeIP に対して外部 IP アドレスよりも内部 IP アドレスを優先させたい場合は、この変数をTrueに設定できます。
    NS_DNS_NAMESERVER オプション Citrix ADC VPXでDNSネームサーバーを追加できるようにします。
    NS_CONFIG_DNS_REC オプション Citrix ADC for IngressリソースにDNSレコードを追加できるようにします。この変数は起動時に設定され、実行時には変更できません。有効な値は true または false です。 デフォルト値はfalseであり、DNS サーバ設定を有効にするようにtrueを設定する必要があります。値を「true」に設定すると、対応するコマンドadd dns addrec <abc.com 1.1.1.1>がCitrix ADCで実行され、アドレスレコード(ドメイン名とIPアドレスのマッピング) が作成されます。詳細については、「 ドメイン名のアドレスレコードを作成する」を参照してください。
    NS_SVC_LB_DNS_REC オプション LoadBalancerタイプのサービスのCitrix ADCにDNSレコードを追加できるようにします。この変数は起動時に設定され、実行時には変更できません。有効な値は true または false です。 デフォルト値はfalseであり、DNS サーバ設定を有効にするようにtrueを設定する必要があります。
  3. 環境変数を更新したら、YAML ファイルを保存し、以下のコマンドを使用してデプロイします。

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

    kubectl get pods --all-namespaces
    

Citrix ADC CPXでCitrixIngress Controllerをサイドカーとして展開する

Citrix-k8s-cpx-ingress.yaml ファイルを使用して、Citrix Ingress Controllerをサイドカーとして持つCitrix ADC CPXを展開します。YAML ファイルは、Kubernetes クラスター内のマイクロサービスへの南北トラフィックの負荷分散に使用される Citrix ADC CPX インスタンスをデプロイします。

以下の手順に従います。

  1. 以下のコマンドを使用して、 citrix-k8s-cpx-ingress.yaml をダウンロードします。

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-cpx-ingress.yml
    
  2. 以下のコマンドを使用して、 citrix-k8s-cpx-ingress.yaml ファイルをデプロイします。

    kubectl create -f citrix-k8s-cpx-ingress.yaml
    
  3. 次のコマンドを使用して、Citrix Ingress Controller が正常に展開されたかどうかを確認します。

    kubectl get pods --all-namespaces
    

デフォルトの資格情報なしでCitrix Ingress Controller をサイドカーとしてCitrix ADC CPXを展開する

以前は、ログイン資格情報を指定せずにCitrix Ingress Controller をサイドカーとしてCitrix ADC CPXを展開すると、Citrix Ingress Controller はnsroot/nsrootをデフォルトの資格情報と見なされます 。

最新のCitrix ADC CPXバージョン(Citrix ADC CPX 13.0.64.35以降)では、デフォルトの資格情報が削除されます。したがって、Citrix Ingress Controller を最新バージョンのCitrix ADC CPXのサイドカーとして展開すると、Citrix Ingress Controller は、Citrix ADC CPXの/var/deviceinfo/random_idファイルを介してCitrix ADC CPXから資格情報を取得できます。このファイルは、ボリュームマウントを通じて、Citrix ADC CPX と Citrix Ingress Controller 間で共有できます。

Citrix ADC CPXの最新バージョンと古いバージョンのどちらを使用しているかに応じて、次の展開YAMLファイルのいずれかを選択する必要があります。Citrix ADC CPX の古いバージョンでは、YAML ファイルで資格情報を指定する必要があります。

  • Citrix ADC CPX 13.0.64.35 以降のバージョンでは、次の YAML を使用します。

Citrix k8s-cpx-ingress.yml

YAML で提供されているように、Citrix Ingress Controllerと Citrix ADC CPX の両方で YAML ファイルに必要なボリュームマウント構成のスニペットを次に示します。

    volumeMounts:
    - mountPath: /var/deviceinfo
    name: shared-data

以下は、Citrix ADC CPXとCitrix Ingress Controller に共通する共有ボリューム構成のスニペットです。

    volumes:
    - name: shared-data
    emptyDir: {}
  • Citrix ADC CPX の以前のバージョン(13.0.64.35 より前のバージョン)では、次の YAML を使用します。

    cpx-ingress-previous.yaml

    Citrix Ingress Controller の資格情報セクションのスニペットを次に示します。

     - name: "NS_USER"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: username
     - name: "NS_PASSWORD"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: password
    

名前空間にCitrix Ingress Controller を展開する

Kubernetes では、ロールは、一連のリソースに対して実行できる一連の権限を定義するルールで構成されます。RBAC 対応の Kubernetes 環境では、必要なスコープに基づいて 2 種類のロールを作成できます。

  • Role
  • ClusterRole

ロールは、Roleを使用して名前空間内で定義することも 、 ClusterRoleを使用してクラスター全体で定義することもできます。 Role を作成して、1 つの namespace 内のリソースへのアクセス権を付与できます。

Kubernetes では、同じ物理クラスター上に複数の仮想クラスターを作成できます。名前空間は、クラスターリソースを複数のユーザーに分ける方法を提供し、多数のユーザーが複数のチームやプロジェクトに分散している環境で役立ちます。

デフォルトでは、Citrix Ingress Controller は Kubernetes クラスター内のすべての名前空間にわたって Ingress リソースを監視します。複数のチームが同じCitrix ADCを管理する場合は、 Role ベースのCitrix Ingress Controller を展開して、特定の名前空間に属するIngressリソースのみを監視できます。この名前空間は、サービスアカウントを作成するために指定した名前空間と同じである必要があります。 役割を作成し、その役割をCitrix Ingress Controller のサービスアカウントにバインドする必要があります。この場合、Citrix Ingress Controller は指定された名前空間からのイベントのみをリッスンし、それに応じてCitrix ADCを構成します。

次の例は、特定の名前空間にCitrix Ingress Controller をデプロイするためのロールとRoleBindingを定義するサンプルYAMLファイルを示しています。

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
rules:
  - apiGroups: [""]
    resources: ["endpoints", "ingresses", "pods", "secrets", "nodes", "routes", "namespaces"]
    verbs: ["get", "list", "watch"]
  # services/status is needed to update the loadbalancer IP in service status for integrating
  # service of type LoadBalancer with external-dns
  - apiGroups: [""]
    resources: ["services/status"]
    verbs: ["patch"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list", "watch", "patch"]
  - apiGroups: ["extensions"]
    resources: ["ingresses", "ingresses/status"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "list", "watch"]

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cic-k8s-role

subjects:
- kind: ServiceAccount
  name: cic-k8s-role
  namespace: default

---
<!--NeedCopy-->

制限

Citrix Ingress Controller が役割(名前空間内のスコープ)で実行されている場合、グローバルスコープが必要なため、次の機能はサポートされません。

  • スタティックルートの設定
  • すべての名前空間で監視する
  • CRD
YAML を使用して Citrix Ingress Controller をデプロイする