Déployer des Citrix ADC CPX en tant que caches DNS locaux pour les nœuds Kubernetes

Les espaces d’application d’un cluster Kubernetes dépendent du DNS pour communiquer avec les autres espaces d’application. Les demandes DNS provenant d’applications à l’intérieur d’un cluster Kubernetes sont gérées par Kubernetes DNS (kube-dns). En raison de l’adoption plus large des architectures de microservices, les taux de requêtes DNS au sein d’un cluster Kubernetes augmentent. En conséquence, le DNS Kubernetes (kube-dns) est surchargé. Vous pouvez désormais déployer Citrix ADC CPX en tant que cache DNS local sur chaque nœud Kubernetes et transférer les demandes DNS des espaces d’application du nœud vers Citrix ADC CPX. Vous pouvez ainsi résoudre les demandes DNS plus rapidement et réduire considérablement la charge sur le DNS Kubernetes.

Pour déployer des Citrix ADC CPX, une entité Kubernetes DaemonSet est utilisée pour planifier les espaces Citrix ADC CPX sur chaque nœud du cluster Kubernetes. Un DaemonSet Kubernetes garantit la présence d’une instance de Citrix ADC CPX sur chaque nœud Kubernetes du cluster. Pour que les espaces d’application dirigent le trafic vers les espaces DNS CPX, vous devez créer un service Kubernetes avec des points de terminaison en tant qu’espaces Citrix ADC CPX. L’adresse IP du cluster de ce service est utilisée comme point de terminaison DNS pour les espaces d’application. Pour vous assurer que les espaces d’application utilisent l’adresse IP du cluster de services Citrix ADC CPX pour la résolution DNS, vous devez mettre à jour le fichier de configuration de kubelet sur chaque nœud avec l’adresse IP du cluster de services Citrix ADC CPX.

Les variables d’environnement suivantes sont introduites pour prendre en charge le déploiement de Citrix ADC CPX en tant que cache DNS NodeLocal :

  • KUBE_DNS_SVC_IP: spécifie l’adresse IP du cluster du service kube-dns qui est un argument obligatoire pour déclencher la configuration sur un espace Citrix ADC CPX. L’espace Citrix ADC CPX dirige les requêtes DNS vers cette adresse IP lorsque la réponse à la requête DNS n’est pas disponible dans le cache Citrix ADC CPX.

  • CPX_DNS_SVC_IP: spécifie l’adresse IP du cluster du service Citrix ADC CPX. La variable d’ CPX_DNS_SVC_IP environnement est utilisée pour configurer le DNS local sur les nœuds. Lorsque vous configurez cette variable, une iptables règle est ajoutée pour diriger les demandes DNS provenant des espaces d’application vers l’espace Citrix ADC CPX local à l’intérieur du nœud.

  • NS_DNS_FORCE_TCP: cette variable d’environnement force l’utilisation de TCP pour les requêtes DNS même si les requêtes sont reçues via UDP.

  • NS_DNS_EXT_RESLV_IP: spécifie l’adresse IP du serveur de noms externe pour diriger les demandes DNS pour un domaine spécifique.

  • NS_DNS_MATCH_DOMAIN: spécifie la chaîne de domaine externe à comparer pour diriger les requêtes vers le serveur de noms externe.

Déployer les Citrix ADC CPX en tant que caches DNS sur les nœuds

Le déploiement de Citrix ADC CPX en tant que cache DNS local pour un cluster Kubernetes inclut les tâches suivantes :

Sur le nœud maître :

  • Créer un service Kubernetes avec des points de terminaison en tant qu’espaces Citrix ADC CPX

  • Créer un ConfigMap pour définir des variables d’environnement pour les espaces Citrix ADC CPX

  • Planifiez des espaces Citrix ADC CPX sur chaque nœud du cluster Kubernetes à l’aide d’un DaemonSet Kubernetes.

Sur les nœuds de travail :

  • Modifiez le fichier de configuration Kubelet avec l’adresse IP du cluster du service Citrix ADC CPX pour transférer les demandes DNS aux Citrix ADC CPX.

Configuration sur le nœud maître Kubernetes

Effectuez les étapes suivantes sur le nœud maître Kubernetes pour déployer Citrix ADC CPX en tant que cache DNS local pour les nœuds :

  1. Créez un service avec des espaces Citrix ADC CPX en tant que points de terminaison à l’aide du fichier cpx_dns_svc.yaml.

    kubectl apply -f cpx_dns_svc.yaml
    

    Le fichier cpx_dns_svc.yaml est fourni comme suit :

            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. Obtenez l’adresse IP du service Citrix ADC CPX.

    kubectl get svc cpx-dns-svc
    
  3. Obtenez l’adresse IP du service DNS Kube.

    kubectl get svc -n kube-system
    
  4. Créez un ConfigMap pour définir des variables d’environnement pour les espaces Citrix ADC CPX. Ces variables d’environnement sont utilisées pour transmettre les adresses IP du service Citrix ADC CPX et du service DNS Kube. Au cours de cette étape, un exemple de ConfigMap cpx-dns-cache est créé à l’aide des variables d’environnement spécifiées en tant que données (paires clé-valeur) dans un fichier.

    kubectl create configmap cpx-dns-cache --from-file <path-to-file>
    

    Voici un exemple de fichier contenant les variables d’environnement sous forme de paires clé-valeur.

      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
    

    Voici un exemple de 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. Créez un DaemonSet Kubernetes pour Citrix ADC CPX sur le nœud maître.

    kubectl apply -f cpx_daemonset.yaml
    

    Le fichier cpx_daemonset.yaml est fourni comme suit :

    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
    

Configuration sur les nœuds de travail dans le cluster Kubernetes

Une fois la configuration terminée sur le nœud maître, effectuez l’étape suivante sur les nœuds de travail :

  1. Modifiez le fichier de configuration de kubelet afin que les espaces d’application puissent utiliser l’adresse IP du cluster de services Citrix ADC CPX pour la résolution DNS en procédant de l’une des étapes suivantes :

    • Suivez les étapes de la section Reconfigurer le kubelet d’un nœud et modifiez la valeur de l’argument --cluster-dns au format suivant.

           --cluster-dns=<CPX_DNS_SVC_IP>,<KUBE_DNS_SVC_IP>
      

      ou

    • Modifiez le fichier /etc/systemd/system/kubelet.service.d/10-kubeadm.conf et modifiez l’argument --cluster-dns en suivant les étapes suivantes.

      1. Modifiez la configuration de kubelet et spécifiez l’adresse IP du cluster du service Citrix ADC CPX et l’adresse IP du service kube-dns pour l’argument --cluster-dns.

         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. Rechargez le kubelet de nœuds à l’aide des commandes suivantes :

         # systemctl daemon-reload
         # service kubelet restart
        
Déployer des Citrix ADC CPX en tant que caches DNS locaux pour les nœuds Kubernetes