Citrix ADC ingress controller

管理パーティションを使用してCitrix ADC用のCitrixIngress Controllerを展開する

Citrix Ingress Controller は、Ingressリソース構成に基づいて1つ以上のCitrix ADCを自動的に構成するために使用されます。Ingress Citrix ADCアプライアンス(MPXまたはVPX)は、管理パーティションと呼ばれる論理エンティティにパーティション化できます。管理パーティションでは、各パーティションを個別のCitrix ADCアプライアンスとして構成および使用できます。詳しくは、「 管理パーティション」を参照してください。Citrix Ingress Controller を展開して、Citrix ADCを管理パーティションで構成することもできます。

管理パーティションを使用するCitrix ADCの場合、パーティションごとにCitrix Ingress Controller のインスタンスを1つ展開する必要があります。また、このパーティションは、Citrix Ingress Controller インスタンスに固有のパーティションユーザーに関連付ける必要があります

前提条件

以下の点を確認してください。

  • 管理パーティションはCitrix ADCアプライアンスで構成されます。手順については、「 管理パーティションの設定」を参照してください。
  • Citrix Ingress Controller 専用のパーティションユーザーを作成します。Citrix Ingress Controller は、このパーティションユーザーアカウントを使用してCitrix ADCを構成します。このパーティションユーザーをCitrix ADCアプライアンス内の他のパーティションに関連付けないようにしてください。

    注:

    管理パーティションでのSSL関連のユースケースでは、Citrix ADCバージョン12.0〜56.8以降を使用していることを確認してください。

管理パーティションを持つCitrix ADC用のCitrixIngress 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 固定 Citrix Ingress Controller 用に作成したパーティションユーザーのユーザー名とパスワード。詳しくは、「 前提条件」を参照してください。
    NS_VIP 固定 Citrix Ingress Controller は、この環境変数で指定されたIPアドレスを使用して、Ingressトラフィックを受信するCitrix ADCへの仮想IPアドレスを構成します。注: NS_VIP は、Ingress yaml で frontend-ip アノテーションが提供されていない場合のフォールバックとして機能します。Ingress に対してのみサポートされます。
    NS_SNIPS オプション Citrix ADCアプライアンスのSNIPアドレス、またはCitrix ADCアプライアンスの特定の管理パーティションのSNIPアドレスを指定します。
    NS_ENABLE_MONITORING 固定 Citrix ADCを監視する値Yesを設定します。注: 管理パーティションを使用するCitrix ADCのCitrix ADC監視を必ず無効にしてください。この値をNoに設定します。
    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 ADCと通信するためにCitrix Ingress Controller が使用する必要があるプロトコルとポートを定義します。デフォルトでは、Citrix Ingress Controller はポート443でHTTPSを使用します。HTTP はポート 80 でも使用できます。
    ingress-classes オプション 複数のイングレスロードバランサーを使用して、異なるイングレスリソースのロードバランシングを行う場合。この環境変数を使用して、Citrix Ingress Controller を指定して、特定のイングレスクラスに関連付けられたCitrix ADCを構成できます。Ingress クラスについて詳しくは、 Ingress クラスのサポートを参照してください
  3. 環境変数を更新したら、YAML ファイルを保存し、以下のコマンドを使用してデプロイします。

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

    kubectl get pods --all-namespaces
    

ユースケース:Citrix ADC 管理パーティションを使用してマルチテナントマイクロサービスベースのアプリケーションを安全に配信する方法

Citrix IngCitrix Ingress Controller を使用して、Citrix ADC管理パーティションを使用して、異なるマイクロサービスベースのアプリケーション間の入力トラフィックを分離できます。Citrix ADC管理パーティションにより、単一のCitrix ADCインスタンスでソフトウェアレベルでマルチテナンシーが可能になります。各パーティションには、独自のコントロールプレーンとネットワークプレーンがあります。

クラスター内の各名前空間にCitrix Ingress Controller のインスタンスを1つ展開できます。

たとえば、Kubernetes クラスターに 2 つの名前空間があり、2 人の異なる管理者の下でこれらの名前空間を互いに分離したいとします。管理パーティション機能を使用して、これら 2 つの名前空間を分けることができます。名前空間1と名前空間2を作成し、両方の名前空間にCitrix Ingress Controller を個別に展開します。

Citrix Ingress Controller インスタンスは、YAMLマニフェストで指定されたシステムユーザーアカウントを使用して、それぞれのCitrix ADCパーティションに構成手順を提供します。

Citrix ADC 管理パーティションを使用してKubernetesクラスタワークロードを管理する

この例では、Apache と guestbook のサンプルアプリケーションが Kubernetes クラスターの 2 つの異なる名前空間 (それぞれ名前空間 1 と名前空間 2) にデプロイされています。Apache と guestbook アプリケーションチームはどちらも、ワークロードを個別に管理したいと考えており、リソースを共有したくありません。Citrix ADC管理パーティションはマルチテナンシーの実現に役立ちます。この例では、2つのパーティション(デフォルト、partition1)を使用して両方のアプリケーションワークロードを個別に管理します。

次の前提条件が適用されます。

  • Citrix ADCアプライアンスに管理パーティションが構成されていることを確認します。手順については、「 管理パーティションの設定」を参照してください。

  • Citrix Ingress Controller 専用のパーティションユーザーアカウントを作成していることを確認します。Citrix Ingress Controller は、このパーティションユーザーアカウントを使用してCitrix ADCを構成します。このパーティションユーザーをCitrix ADCアプライアンス内の他のパーティションに関連付けないようにしてください。

以下のシナリオ例は、Kubernetes クラスター内の異なる名前空間に異なるアプリケーションをデプロイする方法と、admin パーティションを使用してリクエストを ADC から分離する方法を示しています。

この例では、2 つのサンプルアプリケーションが Kubernetes クラスタ内の 2 つの異なる名前空間にデプロイされています。この例では、Citrix ADCでapacheアプリケーションにはデフォルトパーティションが使用され、guestbookアプリケーションには管理パーティションp1が使用されています。

名前空間を作成する

以下のコマンドを使用して2つの名前空間(ns1ns2)を作成します。

    kubectl create namespace ns1
    kubectl create namespace ns2

名前空間ns1内の構成

  1. apacheアプリケーションをns1にデプロイします。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns1
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: apache-ns1
      name: apache-ns1
      namespace: ns1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: apache-ns1
      template:
        metadata:
          labels:
            app: apache-ns1
        spec:
          containers:
          - image: httpd
            name: httpd
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: apache-ns1
      name: apache-ns1
      namespace: ns1
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: apache-ns1
    
  2. Citrix Ingress Controllerをns1にデプロイします。

    Citrix Ingress Controller をデプロイするには、YAMLファイルまたはHelm チャートを使用できます。

    デフォルトパーティションにバインドされているユーザー認証情報を使用していることを確認します。

    helm install cic-def-part-ns1 citrix/citrix-ingress-controller --set nsIP=<nsIP of ADC>,license.accept=yes,adcCredentialSecret=nslogin,ingressClass[0]=citrix-def-part-ns1 --namespace ns1
    
  3. Ingress リソースをデプロイします。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-apache-ns1
      namespace: ns1
      annotations:
        kubernetes.io/ingress.class: "citrix-def-part-ns1"
        ingress.citrix.com/frontend-ip: "< ADC VIP IP >"
    spec:
      rules:
      - host: apache-ns1.com
        http:
          paths:
          - backend:
              service:
                name: apache-ns1
                port:
                  number: 80
            pathType: Prefix
            path: /index.html
    
  4. ns1のCitrix Ingress Controllerは、デフォルトパーティションにADCエンティティを構成します。

名前空間ns2内の構成

  1. guestbookアプリケーションをns2にデプロイします。

apiVersion: v1 kind: Namespace metadata: name: ns2 —

apiVersion: v1 kind: Service metadata: name: redis-master namespace: ns2 labels: app: redis tier: backend role: master spec: ports: - port: 6379 targetPort: 6379 selector: app: redis tier: backend role: master —

apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1 kind: Deployment metadata: name: redis-master namespace: ns2 spec: selector: matchLabels: app: redis role: master tier: backend replicas: 1 template: metadata: labels: app: redis role: master tier: backend spec: containers: - name: master image: k8s.gcr.io/redis:e2e # or just image: redis resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 6379 —

apiVersion: v1 kind: Service metadata: name: redis-slave namespace: ns2 labels: app: redis tier: backend role: slave spec: ports: - port: 6379 selector: app: redis tier: backend role: slave —

apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1 kind: Deployment metadata: name: redis-slave namespace: ns2 spec: selector: matchLabels: app: redis role: slave tier: backend replicas: 2 template: metadata: labels: app: redis role: slave tier: backend spec: containers: - name: slave image: gcr.io/google_samples/gb-redisslave:v1 resources: requests: cpu: 100m memory: 100Mi env: - name: GET_HOSTS_FROM value: dns # If your cluster config does not include a dns service, then to # instead access an environment variable to find the master # service’s host, comment out the ‘value: dns’ line above, and # uncomment the line below: # value: env ports: - containerPort: 6379 —

apiVersion: v1 kind: Service metadata: name: frontend namespace: ns2 labels: app: guestbook tier: frontend spec: # if your cluster supports it, uncomment the following to automatically create # an external load-balanced IP for the frontend service. # type: LoadBalancer ports: - port: 80 selector: app: guestbook tier: frontend —

    apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: Deployment
    metadata:
      name: frontend
      namespace: ns2
    spec:
      selector:
        matchLabels:
          app: guestbook
          tier: frontend
      replicas: 3
      template:
        metadata:
          labels:
            app: guestbook
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: gcr.io/google-samples/gb-frontend:v4
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            env:
            - name: GET_HOSTS_FROM
              value: dns
              # If your cluster config does not include a dns service, then to
              # instead access environment variables to find service host
              # info, comment out the 'value: dns' line above, and uncomment the
              # line below:
              # value: env
            ports:
            - containerPort: 80

2. Citrix Ingress Controllerを名前空間ns2にデプロイします。

パーティション`p1`にバインドされているユーザー認証情報を使用していることを確認します。

    helm install cic-adm-part-p1 citrix/citrix-ingress-controller --set nsIP=<nsIP of ADC>,nsSNIPS='[<SNIPs in partition p1>]',license.accept=yes,adcCredentialSecret=admin-part-user-p1,ingressClass[0]=citrix-adm-part-ns2 --namespace ns2

3. guestbookアプリケーションの Ingress をデプロイします。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
      kubernetes.io/ingress.class: citrix-adm-part-ns2
      ingress.citrix.com/frontend-ip: "<VIP in partition 1>"
      name: guestbook-ingress
      namespace: ns2
    spec:
      rules:
      - host: www.guestbook.com
        http:
          paths:
          - backend:
              service:
                name: frontend
                port:
                  number: 80
            path: /
            pathType: Prefix

4. ns2のCitrix Ingress Controllerは、パーティションp1にADCエンティティを構成します。

管理パーティションを使用してCitrix ADC用のCitrixIngress Controllerを展開する