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

Kubernetesクラスター内のアプリケーションポッドは、DNSを利用して他のアプリケーションポッドと通信します。Kubernetesクラスター内のアプリケーションからのDNS要求は、Kubernetes DNS(kube-dns)によって処理されます。マイクロサービスアーキテクチャが広く採用されているため、Kubernetesクラスター内のDNS要求レートは増加しています。その結果、Kubernetes DNS(kube-dns)が過負荷になります。Citrix ADC CPXを各KubernetesノードのローカルDNSキャッシュとして展開し、ノード内のアプリケーションポッドからCitrix ADC CPXにDNS要求を転送できるようになりました。結果として、DNS要求をより迅速に解決し、Kubernetes DNSの負荷を大幅に減らすことができます。

Citrix ADC CPXを展開するには、Kubernetes DaemonSetエンティティを使用して、Kubernetesクラスター内の各ノードでCitrix ADC CPXポッドをスケジュールします。Kubernetes DaemonSetは、クラスター内の各KubernetesノードにCitrix ADC CPXのインスタンスがあることを確認します。 アプリケーションポッドがトラフィックをCPX DNSポッドに転送するようにするには、エンドポイントがCitrix ADC CPXポッドのKubernetesサービスを作成する必要があります。このサービスのクラスターIPは、アプリケーションポッドのDNSエンドポイントとして使用されます。アプリケーションポッドがDNS解決にCitrix ADC CPXサービスのクラスターIPアドレスを使用していることを確認するには、各ノードのkubelet構成ファイルをCitrix ADC CPXサービスのクラスターIPで更新する必要があります。

NodeLocal DNSキャッシュとしてのCitrix ADC CPXの展開をサポートするために、次の環境変数が導入されています:

  • KUBE_DNS_SVC_IPkube-dnsサービスのクラスターIPアドレスを指定します。これは、Citrix ADC CPXポッドで構成をトリガーするための必須の引数です。DNSクエリの応答がCitrix ADC CPXキャッシュで利用できない場合、Citrix ADC CPXポッドはDNSクエリをこのIPアドレスに転送します。

  • CPX_DNS_SVC_IP:Citrix ADC CPXサービスのクラスターIPアドレスを指定します。CPX_DNS_SVC_IP環境変数は、ノードでローカルDNSを設定するために使用されます。この変数を設定すると、iptables規則が追加され、アプリケーションポッドから発信されたDNS要求がノード内のローカルCitrix ADC CPXポッドに送信されます。

  • NS_DNS_FORCE_TCP:この環境変数は、クエリがUDPを介して受信された場合でも、DNS要求にTCPを使用するように強制します。

  • NS_DNS_EXT_RESLV_IP:特定のドメインのDNS要求を送信する外部ネームサーバーのIPアドレスを指定します。

  • NS_DNS_MATCH_DOMAIN:クエリを外部ネームサーバーに送信するために照合する外部ドメイン文字列を指定します。

Citrix ADC CPXをノードのDNSキャッシュとして展開

Citrix ADC CPXをKubernetesクラスターのローカルDNSキャッシュとして展開する場合、次のタスクが含まれます:

マスターノードの場合:

  • Citrix ADC CPXポッドをエンドポイントとしてKubernetesサービスを作成します

  • Citrix ADC CPXポッドの環境変数を定義するためのConfigMapを作成します

  • Kubernetes DaemonSetエンティティを使用して、Kubernetesクラスター内の各ノードでCitrix ADC CPXポッドをスケジュールします。

ワーカーノードの場合:

  • DNS要求をCitrix ADC CPXに転送するには、Citrix ADC CPXサービスのクラスターIPアドレスを使用してkubelet構成ファイルを変更します。

Kubernetesマスターノードでの構成

Kubernetesマスターノードで次の手順を実行して、Citrix ADC CPXをノードのローカルDNSキャッシュとして展開します。

  1. cpx_dns_svc.yamlファイルを使用しして、Citrix ADC 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. Citrix ADC CPXサービスのクラスターIPアドレスを取得します。

    kubectl get svc cpx-dns-svc
    
  3. Kube DNSサービスのIPアドレスを取得します。

    kubectl get svc -n kube-system
    
  4. Citrix ADC CPXポッドの環境変数を定義するためのConfigMapを作成します。これらの環境変数は、Citrix ADC 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. マスターノードでCitrix ADC 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解決にCitrix ADC 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構成を編集し、Citrix ADC CPXサービスのクラスターIPアドレスと、--cluster-dns引数の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
        
Citrix ADC CPXをKubernetesノードのローカルDNS キャッシュとして展開