Evaluación y Prueba de NeuVector
Una vez que haya implementado los componentes de NeuVector, podrá evaluarlos utilizando las aplicaciones de prueba que proporcionamos a continuación:
Despliegue de aplicaciones de pruebas (Cluster1)
- Debes aperturar una terminal en línea de comandos y establecer conexión al cluster de Kubernetes.
- Defina la variable de entorno
KUBECONFIG, para utilizar las credenciales de instalación del cluster.export KUBECONFIG=$HOME/rke2_conn/cluster1/cluster1_kubeconfig.yaml - Crear un Namespace de demostración
kubectl create namespace neuvector-demo - Cree un recurso tipo Deployment y el servicio de Redis usando el siguiente yaml:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Service metadata: name: redis namespace: neuvector-demo spec: ports: - port: 6379 protocol: "TCP" name: "cluster-tcp-6379" clusterIP: None selector: app: redis-pod --- apiVersion: apps/v1 kind: Deployment metadata: name: redis-pod namespace: neuvector-demo spec: selector: matchLabels: app: redis-pod template: metadata: labels: app: redis-pod spec: containers: - name: redis-pod image: redis EOF - Cree un recurso tipo Deployment y el servicio de NodeJs usando el siguiente yaml:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Service metadata: name: node namespace: neuvector-demo spec: ports: - port: 8888 protocol: "TCP" name: "cluster-tcp-8888" clusterIP: None selector: app: node-pod --- apiVersion: apps/v1 kind: Deployment metadata: name: node-pod namespace: neuvector-demo spec: selector: matchLabels: app: node-pod replicas: 3 template: metadata: labels: app: node-pod spec: containers: - name: node-pod image: nvbeta/node EOF - Cree un recurso tipo Deployment y el servicio de Nginx usando el siguiente yaml:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Service metadata: name: nginx-webui namespace: neuvector-demo spec: ports: - port: 80 name: webui protocol: TCP type: NodePort selector: app: nginx-pod --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-pod namespace: neuvector-demo spec: selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx-pod image: nvbeta/swarm_nginx ports: - containerPort: 80 protocol: TCP EOF - Puedes comprobar que los recursos fueron creados satisfactoriamente con los siguientes comandos:
La salida del comando anterior debe ser similar a la siguiente:
kubectl get pods --namespace neuvector-demoNAME READY STATUS RESTARTS AGE nginx-pod-64d544fc84-kr425 1/1 Running 0 2m27s node-pod-5875c4f4c4-2jptk 1/1 Running 0 2m34s node-pod-5875c4f4c4-qmqb4 1/1 Running 0 2m34s node-pod-5875c4f4c4-x9skt 1/1 Running 0 2m34s redis-pod-77ccb4fd44-nvl7b 1/1 Running 0 104sLa salida del comando anterior debe ser similar a la siguiente:kubectl get svc --namespace neuvector-demoNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-webui NodePort 10.43.249.134 <none> 80:32565/TCP 3m23s node ClusterIP None <none> 8888/TCP 3m30s redis ClusterIP None <none> 6379/TCP 69s - A continuación genera infracciones de seguridad en un pods de los creados anteriormente, simulando que haces una conexión a un sitio externo como www.google.com:
POD_NAME_NODE=$(kubectl get pods -n neuvector-demo -l app=node-pod -o jsonpath="{.items[0].metadata.name}")kubectl exec $POD_NAME_NODE -n neuvector-demo -- curl www.google.com - Dirigete a la UI de NeuVector en el menú Dashboard y observa las conexiones entrantes (Ingress) y salientes (Egress) de tu cluster de Kubernetes, lo cual puede ser sumamente importante monitorear.
Ingress:
Engress:

- Luego ve al menú Network Activity, luego de algunos segundos aparecerá la de todas las conexiones, ampliar el gráfico e intenta ubicar la Nube con el nombre de external, cuando la tengas ubicada, ubicarse sobre la linea que contiene una fecha de color amarillo entrante hacia el Ingress Controller, dar doble click sobre la línea.
Luego puedes verificar y examinar todas las conexiones entrantes por medio de tu Ingress Controller hacia tus aplicaciones.
En la pantalla anterior puedes dar click en el botón Review Rule para verificar la regla que esta aplicando:
Estas reglas son creadas automaticamente por NeuVector, en este momento se encuentra en modo Learned y en estado Allow - Regresar a la terminal en línea de comandos y realiza una conexión Web desde el POD de NODE hacia el POD de NGINX utilizando la IP de NGINX:
POD_IP_NGINX=$(kubectl get pod -n neuvector-demo -l app=nginx-pod -o jsonpath="{.items[0].status.podIP}")POD_NAME_NODE=$(kubectl get pods -n neuvector-demo -l app=node-pod -o jsonpath="{.items[0].metadata.name}")kubectl exec $POD_NAME_NODE -n neuvector-demo -- curl $POD_IP_NGINX:80echo $POD_IP_NGINX -
Para simular un ataque, inicia sesión en un contenedor y luego intenta un ataque de ping, debes reemplazar la IP del POD con el valor de la variable $POD_IP_NGINX:
kubectl exec -it $POD_NAME_NODE -n neuvector-demo -- bashDejarlo por unos cuantos segundos, y luego presionar la teclas Crtl+Cnode@node-pod-5875c4f4c4-2jptk:/src$ ping -s 40000 10.42.0.93 -
Dirigete a la UI de NeuVector en el menú Notifications > Security Events y observa las Alertas sobre Ping.Death y Process profile rule violation, puedes darle click a cada alerta, para ver los detalles de las mismas, es posible que tarde unos pocos segundos en mostrar las alertas, por lo que puedes dar click en el botón Refresh para actualizar la pantalla:

- También es posible visualizar la actividad de red en el menú Network Activity, debes ampliar el gráfico e intentar visualizar las conexiones desde el node-pod hacia nginx-pod, la cual deberá mostrarse en color rojo indicando una Alerta.
