Implementar de NetScaler CPX como cachés DNS locales para nodos de Kubernetes
Los pods de aplicaciones de un clúster de Kubernetes dependen del DNS para comunicarse con otros pods de aplicaciones. Las solicitudes de DNS de aplicaciones dentro de un clúster de Kubernetes se gestionan mediante DNS de Kubernetes (kube-dns). Debido a la adopción más amplia de arquitecturas de microservicios, las tasas de solicitudes de DNS dentro de un clúster de Kubernetes están aumentando. Como resultado, el DNS de Kubernetes (kube-dns) está sobrecargado. Ahora puede implementar NetScaler CPX como una memoria caché de DNS local en cada nodo de Kubernetes y reenviar solicitudes de DNS desde los pods de aplicaciones en el nodo a NetScaler CPX. Por lo tanto, puede resolver las solicitudes de DNS más rápido y reducir significativamente la carga en el DNS de Kubernetes.
Para implementar NetScaler CPX, se utiliza una entidad de Kubernetes DaemonSet para programar pods de NetScaler CPX en cada nodo del clúster de Kubernetes. Un DaemonSet de Kubernetes garantiza que haya una instancia de NetScaler CPX en cada nodo de Kubernetes del clúster. Para que los pods de aplicaciones dirijan el tráfico a los pods DNS de CPX, debe crear un servicio de Kubernetes con puntos finales como pods de NetScaler CPX. La IP de clúster de este servicio se usa como punto de enlace DNS para los pods de la aplicación. Para asegurarse de que los pods de la aplicación usen la dirección IP del clúster de servicios NetScaler CPX para la resolución de DNS, debe actualizar el archivo de configuración de kubelet en cada nodo con la IP del clúster de servicios NetScaler CPX.
Se introducen las siguientes variables de entorno para admitir la implementación de NetScaler CPX como caché DNS de NodeLocal:
-
KUBE_DNS_SVC_IP
: Especifica la dirección IP del clúster del serviciokube-dns
, que es un argumento obligatorio para desencadenar 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 memoria 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_IP
se usa para configurar el DNS local en los nodos. Al configurar esta variable, se agrega una reglaiptables
para dirigir las solicitudes DNS que se originan en los pods de aplicaciones al pod CPX local de NetScaler dentro del nodo. -
NS_DNS_FORCE_TCP
: Esta variable de entorno fuerza el uso de TCP para las solicitudes de 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 de DNS para un dominio específico. -
NS_DNS_MATCH_DOMAIN
: Especifica la cadena de dominio externo que se va a comparar para dirigir las consultas al servidor de nombres externo.
Implementar de NetScaler CPX como cachés de DNS en nodos
La implementación de NetScaler CPX como caché de DNS local para un clúster de Kubernetes incluye las siguientes tareas:
En el nodo maestro:
-
Crear un servicio de Kubernetes con puntos finales como pods de NetScaler CPX
-
Crear un ConfigMap para definir variables de entorno para pods de NetScaler CPX
-
Programe pods de NetScaler CPX en cada nodo del clúster de Kubernetes mediante un DaemonSet de Kubernetes.
En los nodos trabajadores:
- 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 NetScaler CPX.
Configuración en el nodo maestro de Kubernetes
Realice los siguientes pasos en el nodo principal de Kubernetes para implementar NetScaler CPX como la memoria caché DNS local para los nodos:
-
Cree un servicio con pods de NetScaler CPX como puntos finales mediante el archivo
cpx_dns_svc.yaml
.kubectl apply -f cpx_dns_svc.yaml
El archivo
cpx_dns_svc.yaml
se 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 DNS de Kube.
kubectl get svc -n kube-system
-
Cree un ConfigMap para definir variables de entorno para pods de NetScaler CPX. Estas variables de entorno se utilizan para pasar las direcciones IP del servicio NetScaler CPX y el servicio DNS de Kube. En este paso,
cpx-dns-cache
se crea un ejemplo de ConfigMap utilizando las variables de entorno especificadas como datos (pares clave-valor) en un archivo.kubectl create configmap cpx-dns-cache --from-file <path-to-file>
A continuación se muestra 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: CP1000
A continuación se muestra un ejemplo 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
-
Cree un DaemonSet de Kubernetes para NetScaler CPX en el nodo principal.
kubectl apply -f cpx_daemonset.yaml
El archivo
cpx_daemonset.yaml
se 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 nodos de trabajo en el clúster de Kubernetes
Una vez que haya completado la configuración en el nodo maestro, lleve a cabo el siguiente paso en los nodos de trabajo:
-
Modifique el archivo de configuración de kubelet para que los pods de aplicaciones puedan usar la IP del clúster de servicios de 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-dns
en el siguiente formato.--cluster-dns=<CPX_DNS_SVC_IP>,<KUBE_DNS_SVC_IP>
O bien:
-
Modifique el archivo
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
y modifique el argumento--cluster-dns
mediante los siguientes pasos.-
Modifique la configuración de kubelet y especifique la dirección IP del clúster del servicio y la dirección IP
kube-dns
del servicio NetScaler CPX para 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 con los siguientes comandos:
# systemctl daemon-reload # service kubelet restart
-
-