Implementar NetScaler CPX como cachés DNS locales para nodos de Kubernetes
Los pods de aplicación en un clúster de Kubernetes dependen de DNS para comunicarse con otros pods de aplicación. Las solicitudes DNS de las aplicaciones dentro de un clúster de Kubernetes son gestionadas por Kubernetes DNS (kube-dns). Debido a la mayor adopción de arquitecturas de microservicios, las tasas de solicitudes DNS dentro de un clúster de Kubernetes están aumentando. Como resultado, Kubernetes DNS (kube-dns) está sobrecargado. Ahora puede implementar NetScaler CPX como una caché DNS local en cada nodo de Kubernetes y reenviar las solicitudes DNS de los pods de aplicación en el nodo a NetScaler CPX. Por lo tanto, puede resolver las solicitudes DNS más rápido y reducir significativamente la carga en Kubernetes DNS.
Para implementar NetScaler CPX, se utiliza una entidad Kubernetes DaemonSet para programar pods de NetScaler CPX en cada nodo del clúster de Kubernetes. Un Kubernetes DaemonSet garantiza que haya una instancia de NetScaler CPX en cada nodo de Kubernetes del clúster. Para que los pods de aplicación dirijan el tráfico a los pods DNS de CPX, debe crear un servicio de Kubernetes con los pods de NetScaler CPX como puntos finales. La IP del clúster de este servicio se utiliza como punto final DNS para los pods de aplicación. Para asegurarse de que los pods de aplicación utilicen la dirección IP del clúster del servicio NetScaler CPX para la resolución DNS, debe actualizar el archivo de configuración de kubelet en cada nodo con la IP del clúster del servicio NetScaler CPX.
Se introducen las siguientes variables de entorno para admitir la implementación de NetScaler CPX como caché DNS NodeLocal:
-
KUBE_DNS_SVC_IP: Especifica la dirección IP del clúster del serviciokube-dns, que es un argumento obligatorio para activar la configuración en un pod de NetScaler CPX. El pod de NetScaler CPX dirige las consultas DNS a esta dirección IP cuando la respuesta a la consulta DNS no está disponible en la caché de NetScaler CPX. -
CPX_DNS_SVC_IP: Especifica la dirección IP del clúster del servicio NetScaler CPX. La variable de entornoCPX_DNS_SVC_IPse utiliza para configurar el DNS local en los nodos. Cuando se configura esta variable, se añade una reglaiptablespara dirigir las solicitudes DNS originadas en los pods de aplicación al pod local de NetScaler CPX dentro del nodo. -
NS_DNS_FORCE_TCP: Esta variable de entorno fuerza el uso de TCP para las solicitudes DNS, incluso si las consultas se reciben a través de UDP. -
NS_DNS_EXT_RESLV_IP: Especifica la dirección IP del servidor de nombres externo para dirigir las solicitudes DNS de un dominio específico. -
NS_DNS_MATCH_DOMAIN: Especifica la cadena de dominio externo que se debe comparar para dirigir las consultas al servidor de nombres externo.
Implementar NetScaler CPX como cachés DNS en nodos
La implementación de NetScaler CPX como caché DNS local para un clúster de Kubernetes incluye las siguientes tareas:
En el nodo maestro:
-
Crear un servicio de Kubernetes con los pods de NetScaler CPX como puntos finales
-
Crear un ConfigMap para definir variables de entorno para los pods de NetScaler CPX
-
Programar pods de NetScaler CPX en cada nodo del clúster de Kubernetes utilizando un Kubernetes DaemonSet.
En los nodos de trabajo:
- Modifique el archivo de configuración de kubelet con la dirección IP del clúster del servicio NetScaler CPX para reenviar las solicitudes DNS a los NetScaler CPX.
Configuración en el nodo maestro de Kubernetes
Realice los siguientes pasos en el nodo maestro de Kubernetes para implementar NetScaler CPX como la caché DNS local para los nodos:
-
Cree un servicio con los pods de NetScaler CPX como puntos finales utilizando el archivo
cpx_dns_svc.yaml.kubectl apply -f cpx_dns_svc.yamlEl archivo
cpx_dns_svc.yamlse proporciona de la siguiente manera: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 -
Obtenga la dirección IP del servicio NetScaler CPX.
kubectl get svc cpx-dns-svc -
Obtenga la dirección IP del servicio Kube DNS.
kubectl get svc -n kube-system -
Cree un ConfigMap para definir variables de entorno para los pods de NetScaler CPX. Estas variables de entorno se utilizan para pasar las direcciones IP del servicio NetScaler CPX y del servicio Kube DNS. En este paso, se crea un ConfigMap de ejemplo
cpx-dns-cacheutilizando las variables de entorno especificadas como datos (pares clave-valor) en un archivo.kubectl create configmap cpx-dns-cache --from-file <path-to-file>El siguiente es un archivo de ejemplo con las variables de entorno como pares clave-valor.
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: CP1000El siguiente es un ConfigMap de ejemplo:
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 -
Cree un DaemonSet de Kubernetes para NetScaler CPX en el nodo maestro.
kubectl apply -f cpx_daemonset.yamlEl archivo
cpx_daemonset.yamlse proporciona de la siguiente manera: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
Configuración en los nodos de trabajo del clúster de Kubernetes
Una vez que haya completado la configuración en el nodo maestro, realice el siguiente paso en los nodos de trabajo:
-
Modifique el archivo de configuración de kubelet para que los pods de la aplicación puedan usar la IP del clúster del servicio NetScaler CPX para la resolución de DNS mediante uno de los siguientes pasos:
-
Siga los pasos en reconfigurar el kubelet de un nodo y modifique el valor del argumento
--cluster-dnsen el siguiente formato.--cluster-dns=<CPX_DNS_SVC_IP>,<KUBE_DNS_SVC_IP>o
-
Edite el archivo
/etc/systemd/system/kubelet.service.d/10-kubeadm.confy modifique el argumento--cluster-dnssiguiendo los pasos siguientes.-
Edite la configuración de kubelet y especifique la dirección IP del clúster del servicio NetScaler CPX y la dirección IP del servicio
kube-dnspara el argumento--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 -
Vuelva a cargar el kubelet de los nodos mediante los siguientes comandos:
# systemctl daemon-reload # service kubelet restart
-
-