Citrix ADC ingress controller

IngressリソースにCitrix IPAMコントローラーを使用したIPアドレス管理

IPAM コントローラーは、Citrix が提供する IP アドレス管理用のアプリケーションで、Kubernetes クラスター内の Citrix Ingress Controller と並行して実行されます。IP アドレス管理コントローラを使用して、指定した IP アドレス範囲から LoadBalancer タイプのサービスに IP アドレスを自動的に割り当てることはすでにサポートされています。IP アドレス管理コントローラを使用して、指定した範囲から Ingress リソースに IP アドレスを割り当てることもできます。

YAML を使用して IP アドレス管理コントローラをデプロイするときに、YAML ファイルで IP アドレス範囲を指定できます。Citrix Ingress Controller は、Ingressリソースに割り当てられたIPアドレスを、Citrix ADC MPXまたはVPXの仮想IPアドレス(VIP)として構成します。

IPAMコントローラーには、Citrix が提供する VIP CustomResourceDefinition (CRD) が必要です。VIP CRD は、Citrix 入力コントローラーと IPAMコントローラー間の内部通信に使用されます。

IP アドレス管理コントローラを使用して Ingress リソースに IP アドレスを割り当てる

このトピックでは、IP アドレス管理コントローラを使用して Ingress リソースに IP アドレスを割り当てる方法について説明します。

IP アドレス管理コントローラの IP アドレスを使用して Ingress リソースを設定するには、次の手順を実行します。

  1. VIP CRD を展開する
  2. Citrix Ingress Controller 展開
  3. IP アドレス管理コントローラの展開
  4. アプリケーションと Ingress リソースをデプロイする

ステップ 1: VIP CRD を展開する

Citrix 入力コントローラーとIPAMコントローラー間の通信を有効にするCitrix VIP CRDを展開するには、次の手順を実行します。

kubectl create -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/crd/vip/vip.yaml

VIP CRD の詳細については、VIP カスタムリソース定義を参照してください

手順 2: Citrix Ingress Controller を展開する

IPAM コントローラーの引数を指定して 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 Ingress Controller の YAML ファイルを編集します。

    • 要件に応じて、環境変数の値を指定します。環境変数の指定について詳しくは、「 Citrix Ingress Controller 展開」を参照してください。ここでは、NS_VIPを指定する必要はありません。

    • 次を使用して IPAMコントローラーを引数として指定します。

      args: - –ipam citrix-ipam-controller

    IPAM コントローラー引数を指定した Citrix Ingress Controller の YAML ファイルのサンプルを次に示します。

    注:

    この YAML はデモンストレーションのみを目的としており、フルバージョンではありません。常に最新バージョンの YAML を使用し、必要に応じて編集してください。最新バージョンについては、 citrix-k8s-ingress-controller.yaml ファイルを参照してください。

    apiVersion: v1
    kind: Pod
    metadata:
      name: cic-k8s-ingress-controller
    spec:
          serviceAccountName: cic-k8s-role
          containers:
          - name: cic-k8s-ingress-controller
            image: "quay.io/citrix/citrix-k8s-ingress-controller:1.27.15"
            env:
              - name: "NS_IP"
                value: "x.x.x.x"
              - name: "NS_USER"
                valueFrom:
                secretKeyRef:
                  name: nslogin
                  key: username
              - name: "NS_PASSWORD"
                valueFrom:
                secretKeyRef:
                  name: nslogin
                  key: password
              - name: "EULA"
                value: "yes"
              - name: POD_NAME
                valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
              - name: POD_NAMESPACE
                valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            args:
              - --ipam citrix-ipam-controller
            imagePullPolicy: Always
    
  3. 以下のコマンドで、編集した YAML ファイルを使用して Citrix Ingress Controller をデプロイします。

    kubectl create -f citrix-k8s-ingress-controller.yaml
    

    Citrix Ingress Controllerの展開方法の詳細については、「Citrix Ingress Controller Citrix Ingress Controller 展開」を参照してください。

ステップ 3: IP アドレス管理コントローラの展開

IPAMコントローラーを展開するには、次の手順を実行します。

  1. 以下の設定で、citrix-ipam-controller.yamlという名前のファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: citrix-ipam-controller
      namespace: kube-system
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: citrix-ipam-controller
      template:
        metadata:
          labels:
            app: citrix-ipam-controller
        spec:
          serviceAccountName: citrix-ipam-controller
          containers:
          - name: citrix-ipam-controller
            image: quay.io/citrix/citrix-ipam-controller:1.0.3
            env:
            # This IPAM controller takes envirnment variable VIP_RANGE. IPs in this range are used to assign values for IP range
            - name: "VIP_RANGE"
              value: '[["10.217.6.115-10.217.6.117"], {"one-ip": ["5.5.5.5"]}, {"two-ip": ["6.6.6.6", "7.7.7.7"]}]'
            # The IPAM controller can also be configured with name spaces for which it would work through the environment variable
            # VIP_NAMESPACES, This expects a set of namespaces passed as space separated string
            imagePullPolicy: Always
    

    マニフェストには、VIP_RANGEVIP_NAMESPACESの 2 つの環境変数が含まれています 。VIP_RANGEで有効な CIDR を使用して、適切なルーティング可能な IP 範囲を指定できます。必要に応じて、IP アドレス管理コントローラが特定の名前空間のサービスまたは Ingressリソースにのみアドレスを割り当てるように、VIP_NAMESPACESで一連の名前空間を指定することもできます。

  2. 次のコマンドを使用して IPAMコントローラーを展開します。

    kubectl create -f citrix-ipam-controller.yaml

ステップ 4: Ingress リソースをデプロイする

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

  1. 以下のコマンドを使用して Guestbook アプリケーションをデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/guestbook/guestbook-all-in-one.yaml
    
  2. Ingress リソース定義を含む guestbook-ingress YAML ファイルを作成し、ゲストブックアプリケーションのフロントエンドにトラフィックを送信します。

    YAML の例を次に示します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook-ingress
      annotations:
    annotations:
      ingress.citrix.com/ipam-range: "two-ip"
      #ingress.citrix.com/frontend-ip: "5.5.5.5"
      kubernetes.io/ingress.class: "cic-vpx"
    spec:
      rules:
      - host:  www.guestbook.com
        http:
          paths:
          - path: /
            backend:
              serviceName: frontend
              servicePort: 80
    
  3. Ingress リソースをデプロイします。

    kubectl create -f guestbook-ingress.yaml
    

複数の IP アドレス割り当て

Ingress リソースの場合、複数の Ingress リソースが 1 つの csvserver によって処理される可能性があるため、IP アドレスを複数回割り当てることができます。指定した IP 範囲に IP アドレスが 1 つしかない場合は、複数回割り当てられます。ただし、指定された IP 範囲が複数の IP アドレスで構成されている場合は、そのうちの 1 つだけが常に割り当てられます。

複数の割り当てを容易にするために、IP アドレス管理コントローラは割り当てられた IP アドレスを追跡します。IP アドレス管理コントローラは、Ingress リソースによるその IP アドレスの割り当てがすべて解放された場合にのみ、IP アドレスを空きプールに配置します。

異なるリソースによる割り当て

LoadBalancer タイプと Ingress リソースタイプのサービスはどちらも IP アドレス割り当てに IP アドレス管理コントローラを同時に使用できます。ある種のリソースタイプによって割り当てられた IP アドレスは、別のタイプのリソースでは使用できません。ただし、同じ IP アドレスが複数の Ingress リソースによって使用されることがあります。

IngressリソースにCitrix IPAMコントローラーを使用したIPアドレス管理