KubernetesノードのローカルDNSキャッシュとしてNetScaler CPXを展開する

最終公開日 : Oct 02, 2026
Kubernetesクラスター内のアプリケーションポッドは、他のアプリケーションポッドと通信するためにDNSに依存しています。Kubernetesクラスター内のアプリケーションからのDNSリクエストは、Kubernetes DNS (kube-dns) によって処理されます。マイクロサービスアーキテクチャの普及により、Kubernetesクラスター内のDNSリクエストレートが増加しています。その結果、Kubernetes DNS (kube-dns) は過負荷になっています。NetScaler CPXを各KubernetesノードにローカルDNSキャッシュとして展開し、ノード内のアプリケーションポッドからのDNSリクエストをNetScaler CPXに転送できるようになりました。これにより、DNSリクエストをより迅速に解決し、Kubernetes DNSの負荷を大幅に軽減できます。
NetScaler CPXを展開するには、Kubernetes DaemonSetエンティティを使用して、Kubernetesクラスター内の各ノードにNetScaler CPXポッドをスケジュールします。Kubernetes DaemonSetは、クラスター内の各KubernetesノードにNetScaler CPXのインスタンスが存在することを保証します。 アプリケーションポッドがCPX DNSポッドにトラフィックを直接送信するようにするには、エンドポイントとしてNetScaler CPXポッドを持つKubernetesサービスを作成する必要があります。このサービスのクラスターIPは、アプリケーションポッドのDNSエンドポイントとして使用されます。アプリケーションポッドがDNS解決のためにNetScaler CPXサービスクラスターIPアドレスを使用するようにするには、各ノードのkubelet構成ファイルをNetScaler CPXサービスクラスターIPで更新する必要があります。
NetScaler CPXをNodeLocal DNSキャッシュとして展開することをサポートするために、以下の環境変数が導入されました。
  • KUBE_DNS_SVC_IP: kube-dnsサービスのクラスターIPアドレスを指定します。これは、NetScaler CPXポッドで構成をトリガーするための必須引数です。NetScaler CPXキャッシュにDNSクエリ応答がない場合、NetScaler CPXポッドはこのIPアドレスにDNSクエリを転送します。
  • CPX_DNS_SVC_IP: NetScaler CPXサービスのクラスターIPアドレスを指定します。CPX_DNS_SVC_IP環境変数は、ノード上のローカルDNSを構成するために使用されます。この変数を構成すると、アプリケーションポッドから発信されるDNSリクエストをノード内のローカルNetScaler CPXポッドに転送するためのiptablesルールが追加されます。
  • NS_DNS_FORCE_TCP: この環境変数は、クエリがUDP経由で受信された場合でも、DNSリクエストにTCPの使用を強制します。
  • NS_DNS_EXT_RESLV_IP: 特定のドメインのDNSリクエストを転送する外部ネームサーバーのIPアドレスを指定します。
  • NS_DNS_MATCH_DOMAIN: クエリを外部ネームサーバーに転送するために照合する外部ドメイン文字列を指定します。

ノードにNetScaler CPXをDNSキャッシュとして展開する

KubernetesクラスターのローカルDNSキャッシュとしてNetScaler CPXを展開するには、以下のタスクが含まれます。
マスターノードで:
  • エンドポイントとしてNetScaler CPXポッドを持つKubernetesサービスを作成する
  • NetScaler CPXポッドの環境変数を定義するためのConfigMapを作成する
  • Kubernetes DaemonSetを使用して、Kubernetesクラスター内の各ノードにNetScaler CPXポッドをスケジュールする。
ワーカーノードで:
  • DNSリクエストをNetScaler CPXに転送するために、kubelet設定ファイルをNetScaler CPXサービスのクラスターIPアドレスで変更します。

Kubernetesマスターノードでの設定

ノードのローカルDNSキャッシュとしてNetScaler CPXをデプロイするには、Kubernetesマスターノードで以下の手順を実行します。
  1. cpx_dns_svc.yamlファイルを使用して、NetScaler CPXポッドをエンドポイントとするサービスを作成します。
    kubectl apply -f cpx_dns_svc.yaml
    cpx_dns_svc.yamlファイルは以下のとおりです。
    apiVersion: v1
    kind: Service
    metadata:
      name: cpx-dns-svc
      labels:
        app: cpxd
    spec:
      ports:
      - protocol: UDP
        port: 53
        name: dns
      - protocol: TCP
        port: 53
        name: dns-tcp
      selector:
        app: cpx-daemon
  2. NetScaler CPXサービスのIPアドレスを取得します。
    kubectl get svc cpx-dns-svc
  3. Kube DNSサービスのIPアドレスを取得します。
    kubectl get svc -n kube-system
  4. NetScaler CPXポッドの環境変数を定義するためのConfigMapを作成します。これらの環境変数は、NetScaler CPXサービスとKube DNSサービスのIPアドレスを渡すために使用されます。このステップでは、ファイル内でデータ(キーと値のペア)として指定された環境変数を使用して、サンプルConfigMap cpx-dns-cacheが作成されます。
    kubectl create configmap cpx-dns-cache --from-file <path-to-file>
    以下は、環境変数をキーと値のペアとして含むサンプルファイルです。
    CPX_DNS_SVC_IP: 10.111.95.145
    EULA: "yes"
    KUBE_DNS_SVC_IP: 10.96.0.10
    NS_CPX_LITE: "1"
    NS_DNS_EXT_RESLV_IP: 10.102.217.142
    NS_DNS_MATCH_DOMAIN: citrix.com
    PLATFORM: CP1000
    以下はサンプルConfigMapです。
    apiVersion: v1
    data:
      CPX_DNS_SVC_IP: 10.111.95.145
      EULA: "yes"
      KUBE_DNS_SVC_IP: 10.96.0.10
      NS_CPX_LITE: "1"
      NS_DNS_EXT_RESLV_IP: 10.102.217.142
      NS_DNS_MATCH_DOMAIN: citrix.com
      PLATFORM: CP1000
    kind: ConfigMap
    metadata:
      creationTimestamp: "2019-10-15T07:45:54Z"
      name: cpx-dns-cache
      namespace: default
      resourceVersion: "8026537"
      selfLink: /api/v1/namespaces/default/configmaps/cpx-dns-cache
      uid: 8d06f6ee-133b-4e1a-913c-9963cbf4f48
  5. マスターノードにNetScaler CPX用のKubernetes DaemonSetを作成します。
    kubectl apply -f cpx_daemonset.yaml
    cpx_daemonset.yamlファイルは以下のとおりです。
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: cpx-daemon
      labels:
            app: cpxd
    spec:
       selector:
            matchLabels:
              app: cpx-daemon
    template:
       metadata:
            labels:
              app: cpx-daemon
       spec:
           containers:
           - name: cpxd
            imagePullPolicy: IfNotPresent
            image: localhost:5000/dev/cpx
            volumeMounts:
             - mountPath: /netns/default/
            name: test-vol
            ports:
            - containerPort: 53
       envFrom:
           - configMapRef:
           name: cpx-dns-cache
       securityContext:
       privileged: true
       allowPrivilegeEscalation: true
       capabilities:
        add: ["NET_ADMIN"]
       volumes:
          -  name: test-vol
          hostPath:
          path: /proc/1/ns
          type: Directory

Kubernetesクラスター内のワーカーノードでの設定

マスターノードでの設定が完了したら、ワーカーノードで以下の手順を実行します。
  1. アプリケーションポッドがDNS解決にNetScaler CPXサービスクラスターIPを使用できるように、以下のいずれかの手順を使用してkubelet構成ファイルを変更します。
    • ノードのkubeletを再構成するの手順に従い、以下の形式で--cluster-dns引数の値を変更します。
      --cluster-dns=<CPX_DNS_SVC_IP>,<KUBE_DNS_SVC_IP>
      または
    • /etc/systemd/system/kubelet.service.d/10-kubeadm.confファイルを編集し、以下の手順を使用して--cluster-dns引数を変更します。
      1. kubelet構成を編集し、--cluster-dns引数にNetScaler CPXサービスのクラスターIPアドレスとkube-dnsサービスIPアドレスを指定します。
         root@node:~# cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | grep KUBELET_DNS_ARGS

         Environment="KUBELET_DNS_ARGS=--cluster-dns=10.111.95.145,10.96.0.10 --cluster-domain=cluster.local"
         ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_DNS_ARGS
      2. 以下のコマンドを使用してノードのkubeletをリロードします。
        # systemctl daemon-reload
        # service kubelet restart