Skip to content

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)

  1. Debes aperturar una terminal en línea de comandos y establecer conexión al cluster de Kubernetes.
  2. Defina la variable de entorno KUBECONFIG, para utilizar las credenciales de instalación del cluster.
    export KUBECONFIG=$HOME/rke2_conn/cluster1/cluster1_kubeconfig.yaml
    
  3. Crear un Namespace de demostración
    kubectl create namespace neuvector-demo
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. Puedes comprobar que los recursos fueron creados satisfactoriamente con los siguientes comandos:
    kubectl get pods --namespace neuvector-demo
    
    La salida del comando anterior debe ser similar a la siguiente:
    NAME                         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          104s
    
    kubectl get svc --namespace neuvector-demo
    
    La salida del comando anterior debe ser similar a la siguiente:
    NAME          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
    
  8. 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
    
  9. 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: Opciones Engress: Opciones
  10. 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. Opciones Luego puedes verificar y examinar todas las conexiones entrantes por medio de tu Ingress Controller hacia tus aplicaciones. Opciones En la pantalla anterior puedes dar click en el botón Review Rule para verificar la regla que esta aplicando: Opciones Estas reglas son creadas automaticamente por NeuVector, en este momento se encuentra en modo Learned y en estado Allow
  11. 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:80 
    
    echo $POD_IP_NGINX
    
  12. 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 -- bash
    
    node@node-pod-5875c4f4c4-2jptk:/src$ ping -s 40000 10.42.0.93
    
    Dejarlo por unos cuantos segundos, y luego presionar la teclas Crtl+C

  13. 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: Opciones

  14. 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. Opciones