Danke für das Feedback

Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)

Bereitstellen von NetScaler CPXs als lokale DNS-Caches für Kubernetes-Knoten

Anwendungs-Pods in einem Kubernetes-Cluster sind für die Kommunikation mit anderen Anwendungspods auf DNS angewiesen. DNS-Anfragen von Anwendungen innerhalb eines Kubernetes-Clusters werden von Kubernetes DNS (kube-DNS) bearbeitet. Aufgrund der breiteren Einführung von Microservices-Architekturen steigen die DNS-Anforderungsraten innerhalb eines Kubernetes-Clusters. Infolgedessen ist Kubernetes DNS (Kube-DNS) überlastet. Jetzt können Sie NetScaler CPX als lokalen DNS-Cache auf jedem Kubernetes-Knoten bereitstellen und DNS-Anforderungen von Anwendungspods im Knoten an NetScaler CPX weiterleiten. Daher können Sie DNS-Anfragen schneller lösen und die Belastung von Kubernetes DNS erheblich reduzieren.

Um NetScaler CPXs bereitzustellen, wird eine Kubernetes DaemonSet-Entität verwendet, um NetScaler CPX-Pods auf jedem Knoten im Kubernetes-Cluster zu planen. Ein Kubernetes DaemonSet stellt sicher, dass sich auf jedem Kubernetes-Knoten im Cluster eine Instanz von NetScaler CPX befindet. Damit Anwendungspods den Datenverkehr zu CPX-DNS-Pods leiten, müssen Sie einen Kubernetes-Dienst mit Endpunkten als NetScaler CPX-Pods erstellen. Die Cluster-IP dieses Dienstes wird als DNS-Endpunkt für die Anwendungs-Pods verwendet. Um sicherzustellen, dass die Anwendungspods die IP-Adresse des NetScaler CPX-Dienstclusters für die DNS-Auflösung verwenden, müssen Sie die Kubelet-Konfigurationsdatei auf jedem Knoten mit der NetScaler CPX-Dienstcluster-IP aktualisieren.

Die folgenden Umgebungsvariablen werden eingeführt, um die Bereitstellung von NetScaler CPX als NodeLocal DNS-Cache zu unterstützen:

  • KUBE_DNS_SVC_IP: Gibt die Cluster-IP-Adresse des kube-dns Dienstes an, die ein obligatorisches Argument zum Auslösen der Konfiguration in einem NetScaler CPX-Pod ist. Der NetScaler CPX-Pod leitet DNS-Abfragen an diese IP-Adresse weiter, wenn die DNS-Abfrageantwort nicht im NetScaler CPX-Cache verfügbar ist.

  • CPX_DNS_SVC_IP: Gibt die Cluster-IP-Adresse des NetScaler CPX-Dienstes an. Die CPX_DNS_SVC_IP Umgebungsvariable wird verwendet, um lokales DNS auf Knoten zu konfigurieren. Wenn Sie diese Variable konfigurieren, wird eine iptables Regel hinzugefügt, um die DNS-Anforderungen, die von Anwendungspods stammen, an den lokalen NetScaler CPX-Pod innerhalb des Knotens weiterzuleiten.

  • NS_DNS_FORCE_TCP: Diese Umgebungsvariable erzwingt die Verwendung von TCP für DNS-Anforderungen, auch wenn die Abfragen über UDP empfangen werden.

  • NS_DNS_EXT_RESLV_IP: Gibt die IP-Adresse des externen Nameservers an, um die DNS-Anforderungen für eine bestimmte Domäne weiterzuleiten.

  • NS_DNS_MATCH_DOMAIN: Gibt die Zeichenfolge der externen Domäne an, mit der abgeglichen werden soll, um die Abfragen an den externen Namenserver weiterzuleiten.

Bereitstellen von NetScaler CPXs als DNS-Caches auf Knoten

Das Bereitstellen von NetScaler CPX als lokaler DNS-Cache für einen Kubernetes-Cluster umfasst die folgenden Aufgaben:

Auf dem Master-Knoten:

  • Erstellen Sie einen Kubernetes-Dienst mit Endpunkten als NetScaler CPX-Pods

  • Erstellen Sie eine ConfigMap zum Definieren von Umgebungsvariablen für NetScaler CPX-Pods

  • Planen Sie NetScaler CPX-Pods auf jedem Knoten im Kubernetes-Cluster mithilfe eines Kubernetes DaemonSet.

Auf Worker-Knoten:

  • Ändern Sie die Kubelet-Konfigurationsdatei mit der Cluster-IP-Adresse des NetScaler CPX-Dienstes, um DNS-Anforderungen an NetScaler CPXs weiterzuleiten.

Konfiguration auf dem Kubernetes-Masterknoten

Führen Sie die folgenden Schritte auf dem Kubernetes-Masterknoten aus, um NetScaler CPX als lokalen DNS-Cache für Knoten bereitzustellen:

  1. Erstellen Sie mithilfe der cpx_dns_svc.yaml Datei einen Dienst mit NetScaler CPX-Pods als Endpoints.

      kubectl apply -f cpx_dns_svc.yaml
    

    Die cpx_dns_svc.yaml Datei wird wie folgt bereitgestellt:

              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. Holen Sie sich die IP-Adresse des NetScaler CPX-Dienstes.

      kubectl get svc cpx-dns-svc
    
  3. Holen Sie sich die IP-Adresse des Kube-DNS-Dienstes.

      kubectl get svc -n kube-system
    
  4. Erstellen Sie eine ConfigMap zum Definieren von Umgebungsvariablen für NetScaler CPX-Pods. Diese Umgebungsvariablen werden verwendet, um IP-Adressen des NetScaler CPX-Dienstes und des Kube-DNS-Dienstes zu übergeben. In diesem Schritt cpx-dns-cache wird ein Beispiel für ConfigMap mit den Umgebungsvariablen erstellt, die als Daten (Schlüssel-Wert-Paare) in einer Datei angegeben sind.

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

    Im Folgenden finden Sie eine Beispieldatei mit den Umgebungsvariablen als Schlüssel-Wert-Paare.

        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
    

    Im Folgenden finden Sie ein Beispiel für eine 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. Erstellen Sie ein Kubernetes DaemonSet für NetScaler CPX auf dem Masterknoten.

      kubectl apply -f cpx_daemonset.yaml
    

    Die cpx_daemonset.yaml Datei wird wie folgt bereitgestellt:

      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
    

Konfiguration auf Worker-Knoten im Kubernetes-Cluster

Führen Sie nach Abschluss der Konfiguration auf dem Master-Knoten den folgenden Schritt auf Worker-Knoten aus:

  1. Ändern Sie die Kubelet-Konfigurationsdatei, sodass Anwendungspods die NetScaler CPX-Dienstcluster-IP für die DNS-Auflösung verwenden können, indem Sie einen der folgenden Schritte ausführen:

    • Befolgen Sie die Schritte unter Rekonfigurieren Sie das Kubelet eines Node neu und ändern Sie den --cluster-dns Argumentwert im folgenden Format.

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

      oder

    • Bearbeiten Sie die /etc/systemd/system/kubelet.service.d/10-kubeadm.conf Datei und ändern Sie das --cluster-dns Argument mit den folgenden Schritten.

      1. Bearbeiten Sie die Kubelet-Konfiguration und geben Sie die Cluster-IP-Adresse des NetScaler CPX-Dienstes und die kube-dns Dienst-IP-Adresse für das --cluster-dns Argument an.

           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. Laden Sie das Kubelet der Knoten mit den folgenden Befehlen neu:

           # systemctl daemon-reload
           # service kubelet restart
        
Die offizielle Version dieses Inhalts ist auf Englisch. Für den einfachen Einstieg wird Teil des Inhalts der Cloud Software Group Dokumentation maschinell übersetzt. Cloud Software Group hat keine Kontrolle über maschinell übersetzte Inhalte, die Fehler, Ungenauigkeiten oder eine ungeeignete Sprache enthalten können. Es wird keine Garantie, weder ausdrücklich noch stillschweigend, für die Genauigkeit, Zuverlässigkeit, Eignung oder Richtigkeit von Übersetzungen aus dem englischen Original in eine andere Sprache oder für die Konformität Ihres Cloud Software Group Produkts oder Ihres Diensts mit maschinell übersetzten Inhalten gegeben, und jegliche Garantie, die im Rahmen der anwendbaren Endbenutzer-Lizenzvereinbarung oder der Vertragsbedingungen oder einer anderen Vereinbarung mit Cloud Software Group gegeben wird, dass das Produkt oder den Dienst mit der Dokumentation übereinstimmt, gilt nicht in dem Umfang, in dem diese Dokumentation maschinell übersetzt wurde. Cloud Software Group kann nicht für Schäden oder Probleme verantwortlich gemacht werden, die durch die Verwendung maschinell übersetzter Inhalte entstehen können.
DIESER DIENST KANN ÜBERSETZUNGEN ENTHALTEN, DIE VON GOOGLE BEREITGESTELLT WERDEN. GOOGLE LEHNT JEDE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG IN BEZUG AUF DIE ÜBERSETZUNGEN AB, EINSCHLIESSLICH JEGLICHER GEWÄHRLEISTUNG DER GENAUIGKEIT, ZUVERLÄSSIGKEIT UND JEGLICHER STILLSCHWEIGENDEN GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN DRITTER.
Bereitstellen von NetScaler CPXs als lokale DNS-Caches für Kubernetes-Knoten