IPAMコントローラーを使用したIPアドレス管理

最終公開日 : Oct 02, 2026
IPAMコントローラーは、NetScalerが提供するIPアドレス管理用のアプリケーションであり、Kubernetesクラスター内でNetScaler Ingress Controllerと並行して実行されます。IPAMコントローラーを使用すると、指定されたIPアドレス範囲から、イングレスリソース、LoadBalancerタイプのサービス、およびリスナーリソースにIPアドレスを割り当てることができます。NetScaler Ingress Controllerは、サービス、イングレス、またはリスナーリソースに割り当てられたIPアドレスを、NetScaler MPXまたはNetScaler VPXの仮想IPアドレス(VIP)として構成します。
IPAMコントローラーには、NetScalerが提供するVIP CustomResourceDefinition(CRD)が必要です。VIP CRDは、NetScaler Ingress ControllerとIPAMコントローラー間の内部通信に使用されます。

IPAMコントローラーとInfobloxの統合

Infoblox統合により、IPAMコントローラーはInfobloxからLoadBalancerタイプのサービス、イングレス、またはリスナーリソースにIPアドレスを割り当てます。
イングレスリソース、リスナーリソース、およびLoadBalancerタイプのサービスでそれぞれサポートされているアノテーションは次のとおりです。
  • ingress.citrix.com/ipam-range
  • listeners.citrix.com/ipam-range
  • service.citrix.com/ipam-range
これらのアノテーションを使用して、IPAMコントローラーで定義されたIPアドレス範囲をそれぞれのリソースに提供する必要があります。IPアドレス範囲は、IPAM VIP範囲またはInfoblox VIP範囲のいずれかである必要があります。
注:
  • Infoblox統合は、IPAM Controllerバージョン2.2.10以降、バージョン2.12.3までサポートされています。
  • Infobloxを使用してIPAMによって割り当てられたIPアドレスを更新または削除してはなりません。
IPAMコントローラーは、マルチクラスター設定において次の課題を提起します。
  • IPアドレスは手動で提供する必要があります。
  • 複数のクラスターにデプロイされた各アプリケーションには、共通のIPアドレスを割り当てる必要があります。
  • 他のクラスターのIPAMコントローラー間でIPアドレス範囲を共有することに制限があり、タスクが複雑になります。
InfobloxとIPAMの統合は、以下のタスクに役立ちます。
  • Infobloxネットワーク管理を使用して、指定されたIPアドレス範囲から利用可能なIPアドレスを割り当てます。
  • ドメイン名に関連付けられたIPアドレスを要求し、既存のIPアドレスの取得を確実にします。
  • マルチクラスターイングレス設定では、さまざまなクラスターにデプロイされたアプリケーションに、単一の一貫したIPアドレスを使用してアクセスできます。
初期化中に、IPAMコントローラーはInfobloxに接続し、まだ利用可能でない場合はネットワークビューを作成します。このネットワークビューの作成は、提供されたDNSビュー内のネットワーク範囲に基づいています。DNSビュー内のネットワーク範囲が提供されていない場合、IPAMコントローラーはネットワークビューを作成します。

IPAMコントローラーを使用してIPアドレスを割り当てる

IPAMコントローラーからのIPアドレスを使用して、イングレスリソース、リスナーリソース、またはLoadBalancerタイプのサービスを構成するには、次の手順を実行します。
  1. VIP CRDを展開する
  2. NetScaler Ingress Controllerを展開する
  3. IPAMコントローラーを展開する
  4. アプリケーションとイングレスリソースを展開する

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

NetScaler Ingress ControllerとIPAMコントローラー間の通信を可能にするNetScaler VIP CRDを展開するには、次の手順を実行します。
kubectl create -f https://raw.githubusercontent.com/netscaler/netscaler-k8s-ingress-controller/master/crd/vip/vip.yaml
VIP CRD の詳細については、VIP CustomResourceDefinition を参照してください。

ステップ 2: NetScaler Ingress Controller を展開する

前提条件

  • Kubernetes クラスターと、クラスターと通信するための kubectl コマンドラインツール。
  • 次のコマンドを使用して、NetScaler VPX または NetScaler MPX の資格情報でシークレットを作成します。
    kubectl create secret  generic nslogin --from-literal=username=<username> --from-literal=password=<password>
  • 次のコマンドを使用して、NetScaler Helm チャートリポジトリを追加します。
    helm repo add netscaler https://netscaler.github.io/netscaler-helm-charts/
NSIC を展開する
  1. 次のコマンドを使用して、NetScaler Helm チャートリポジトリを更新します。
    helm repo update netscaler
  2. 以下に示すように、values.yaml を更新して NetScaler Ingress Controller を構成します。
    サンプル values.yaml:
    license:
      accept: yes
    adcCredentialSecret: nslogin # K8s Secret Name
    nsIP: <x.x.x> # CLIP (for appliances in Cluster mode), SNIP (for appliances in High Availability mode) , NSIP (for standalone appliances)
    openshift: false # set to true for OpenShift deployments
    entityPrefix: cluster1 # unique for each NSIC instance.
    ipam: true
    ingressClass: ['cic-vpx'] # ingress class used in the ingress resources
    serviceClass: ['netscaler'] # To use service type LB, specify the service class
  3. 次の Helm コマンドを使用して、NetScaler VPX または NetScaler 用の NetScaler Ingress Controller をインストールします。
    helm install nsic netscaler/netscaler-ingress-controller -f values.yaml
Helm チャートを使用した NetScaler Ingress Controller の展開と構成の詳細については、Helm チャートリポジトリ を参照してください。

ステップ 3: IPAM コントローラーを展開する

前提条件
  • Infoblox 統合の場合、次の権限を持つユーザーロールを Infoblox で作成していることを確認してください。
    • IPアドレス管理:
      • IPアドレスの割り当てと管理。
      • ホストレコードの作成、更新、削除。
    • 拡張可能属性管理:
      • 拡張可能属性の作成、更新、削除。
  • Infobloxとの統合のために、次のコマンドを実行してInfobloxユーザー認証情報を含むKubernetesシークレットを作成します。
    kubectl create secret  generic infobloxlogin --from-literal=username=<Infoblox_username> --from-literal=password=<Infoblox_password>
この手順では、IPAMコントローラーを展開し、InfobloxをIPAMコントローラーと統合します。
  1. 次のコマンドを使用して、NetScaler Helmチャートリポジトリをローカルレジストリに追加します。
    helm repo add netscaler https://netscaler.github.io/netscaler-helm-charts/
  2. 次のコマンドを使用して、NetScaler IPAMコントローラーをインストールします。
    helm install netscaler-ipam-controller netscaler/netscaler-ipam-controller -f values.yaml
サンプル values.yaml:
cluster: 'cluster1' # enables you to know in which cluster IPAM is installed in multi-cluster solution
vipRange: "[{\"range1\": [\"1.2.1.51-1.2.1.59\"]\,\"range2\": [\"1.2.1.61-1.2.1.69\"]}]" # range1 has IPs from 1.2.1.51 to 1.2.1.59 and range2 has IPs from 1.2.1.61 to 1.2.1.69
reuseIngressVip: "True"  # set to False to assigns  different IP address to each ingress resource
infoblox:
  enabled: True #set to false to disable Infoblox integration with IPAM controller
  credentialSecret: <secret> # Kubernetes secret created using Infoblox user credentials
  gridHost: <x.x.x.x>  # Infoblox grid host IP or FQDN
  vipRange: "[{"infoblox-range": ["1.1.1.0/24"]}]"  # Infoblox IPAM VIP Range, which is different from the vipRange mentioned above. This has to be in CIDR format like 1.1.1.0/24
次の表は、IPAMコントローラーのインストール時に設定可能なすべてのパラメーターに関する情報を示しています。
パラメーター 必須またはオプション デフォルト値 説明
imageRegistry 必須 quay.io NetScaler IPAM Controller のイメージレジストリ。
imageRepository 必須 netscaler/netscaler-ipam-controller NetScaler IPAM Controller のイメージリポジトリ。
imageTag 必須 2.1.2 NetScaler IPAM Controller のイメージタグ。
pullPolicy 必須 IfNotPresent NetScaler IPAM Controller のイメージプルポリシー。
vipRange 必須 N/A この変数を使用すると、IPアドレス範囲を定義できます。IPアドレス範囲を定義するか、一意の名前に関連付けられたIPアドレス範囲を定義できます。NetScaler IPAMコントローラーは、このIPアドレス範囲からLoadBalancerタイプのサービスにIPアドレスを割り当てます。
reuseIngressVip オプション 真 この変数を使用すると、同じvipRangeを使用するすべてのイングレスで同じIPを使用できます。
クラスター infoblox.enabledがTrueの場合、必須 N/A この変数を使用すると、IPAMコントローラーがデプロイされているクラスターを識別するために使用されるクラスター名を提供できます。
infoblox.enabled オプション 偽 Infoblox IPAM を有効または無効にできるブール値。
infoblox.gridHost infoblox.enabled が true の場合、必須 N/A クラスターから到達可能である必要がある Infoblox グリッドホストの IP または FQDN。
infoblox.credentialSecret infoblox.enabled が true の場合、必須 N/A 前提条件に記載されている必要なアクセス権限を持つ Infoblox のユーザー名とパスワードを持つ、同じ名前空間にある Kubernetes Secret。
infoblox.httpTimeout オプション 10 この変数を使用すると、Infoblox クライアントの HTTP タイムアウトを秒単位で指定できます。
infoblox.maxRetries オプション 3 この変数を使用すると、障害発生時のInfobloxクライアントの最大再試行回数を指定できます。
infoblox.netView オプション デフォルト この変数を使用すると、Infobloxネットワークビューを指定できます。ネットワークビューが存在しない場合は、作成されます。
infoblox.vipRange infoblox.enabled が true の場合、必須 N/A コントローラーによって管理されるInfoblox IPAM仮想IPアドレス範囲。この範囲内のすべてのIPアドレスは、コントローラーによってInfobloxで管理され、他のプロセスと競合してはなりません。IP範囲はCIDR形式 a.b.c.d/n である必要があります。例: "[{"infoblox-range": ["1.1.1.0/24"]}]"。
serviceAccount.create 必須 はい この変数は、NetScaler IPAMコントローラーのサービスアカウントを作成します。
serviceAccount.tokenExpirationSeconds 必須 31536000 サービスアカウントのトークンの有効期限が切れるまでの時間(秒単位)。
serviceAccount.name オプション "" IPAM Controller のサービスアカウント名。すでに作成済みで自分で管理しているサービスアカウントを使用する場合は、ここにその名前を指定し、serviceAccount.create を false に設定します。

ステップ4:Ingressリソースを展開する

サンプルアプリケーションとIngressリソースを展開するには、次の手順を実行します。
  1. 次のコマンドを使用してCNNアプリケーションを展開します。
    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cnn-website
      labels:
        name: cnn-website
        app: cnn-website
    spec:
      selector:
        matchLabels:
          app: cnn-website
      replicas: 2
      template:
        metadata:
          labels:
            name: cnn-website
            app: cnn-website
        spec:
          containers:
          - name: cnn-website
            image: quay.io/sample-apps/cnn-website:v1.0.0
            ports:
            - name: http-80
              containerPort: 80
            - name: https-443
              containerPort: 443
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: cnn-website
      labels:
        app: cnn-website
    spec:
      type: NodePort
      ports:
      - name: http-80
        port: 80
        targetPort: 80
      - name: https-443
        port: 443
        targetPort: 443
      selector:
        name: cnn-website
    EOF
  2. 次のコマンドを使用して、CNNアプリケーションにトラフィックを送信するIngressリソースを展開します。
    kubectl apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cnn-ingress
      annotations:
        ingress.citrix.com/ipam-range: "<IPAM-vip-range or Infoblox-vip-range>"
    spec:
      ingressClassName: cic-vpx
      rules:
      - host: www.cnn.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: cnn-website
                port:
                  number: 80
    EOF
上記のIngressの例では、IP割り当ての順序は次のとおりです。
  • デフォルトの NS_VIP 環境変数が指定されている場合、NetScaler Ingress Controller は、Ingressで範囲名 (ingress.citrix.com/ipam-range:) が指定されている場合にのみIPAMコントローラーに要求を行います。アノテーションが指定されていない場合は、そのIngressに NS_VIP が使用されます。
  • デフォルトの NS_VIP 環境変数が指定されていない場合、NetScaler Ingress Controller は常にIPAMコントローラーにIP割り当てを要求します。

IPアドレスの割り当て

  • LoadBalancerタイプのサービスの場合、VIP範囲またはInfoblox VIP範囲から各サービスに一意のIPアドレスが割り当てられます。
  • イングレスリソースの場合、指定されたIP範囲内のIPアドレスが割り当てられます。複数のイングレスリソースが同じVIP範囲を参照する場合、最初のイングレスリソースに割り当てられたIPアドレスが、他のすべてのイングレスリソースに割り当てられます。
  • LoadBalancerタイプのサービス、イングレスリソース、およびリスナーリソースは、NetScaler IPAMコントローラーを同時に使用してIPアドレスを割り当てることができます。いずれかのリソースタイプにIPアドレスが割り当てられている場合、他のリソースタイプでは使用できません。ただし、同じIPアドレスを複数のイングレスリソースに割り当てることができます。

一意の名前に関連付けられたIPアドレス範囲

IPアドレス範囲に一意の名前を割り当て、VIP_RANGE環境変数でその範囲を定義できます。このIPアドレス範囲の割り当て方法により、IPアドレス範囲を区別できます。LoadBalancerタイプのサービスを作成する際、サービス定義でservice.citrix.com/ipam-rangeアノテーションを使用して、IPアドレス割り当てに使用するIPアドレス範囲を指定できます。

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

イングレスリソースの場合、HelmチャートパラメーターreuseIngressVipをtrueとして指定することで、IPアドレスを複数回割り当てることができます。これは、複数のイングレスリソースが単一のコンテンツスイッチング仮想サーバーによって処理される可能性があるためです。指定されたIP範囲に単一のIPアドレスしかない場合、それは複数回割り当てられます。また、IP範囲が複数のIPアドレスで構成されている場合、そのうちの1つだけが繰り返し割り当てられます。
複数の割り当てを容易にするために、IPAMコントローラーは割り当てられたIPアドレスを追跡します。IPAMコントローラーは、イングレスリソースによるそのIPアドレスのすべての割り当てが解放された場合にのみ、IPアドレスをフリープールに入れます。