Skip to main content

Instalar varios controladores de Snyk Kubernetes en un solo clúster de Kubernetes

Escrito por

Pas Apicella

feature multispace k8s

15 de agosto de 2022

0 minutos de lectura

Kubernetes ofrece una interfaz para ejecutar sistemas distribuidos sin complicaciones. Se encarga del escalado y la conmutación por error de tus aplicaciones, proporciona patrones de implementación y mucho más. En cuanto a la seguridad, los equipos que implementan cargas de trabajo en el clúster de Kubernetes deben considerar cuáles quieren monitorear para cumplir con los requisitos de seguridad de sus aplicaciones.

Pero ¿qué pasaría si cada equipo pudiera controlar qué imágenes de contenedores se analizan y qué cargas de trabajo específicas se monitorean? Podría haber varios equipos implementando en Kubernetes, cada uno con requisitos únicos sobre lo que se monitorea. La mejor manera de resolver este caso de uso es permitir que cada equipo configure su propia integración de Snyk Kubernetes y monitoree las cargas de trabajo que necesita. Veamos cómo funciona.

Descripción general de la integración de Snyk Kubernetes

Snyk se integra con Kubernetes para que puedas importar y probar continuamente tus cargas de trabajo en ejecución e identificar vulnerabilidades en sus imágenes subyacentes, así como cualquier configuración que pueda hacerlas menos seguras. Una vez implementadas las cargas de trabajo, Snyk sigue monitoreándolas e identifica la exposición a vulnerabilidades recién descubiertas, además de otros problemas de seguridad cuando se implementan nuevos contenedores o cambia la configuración de la carga de trabajo.

Diagrama de contexto del sistema que muestra a un cliente con integración de Kubernetes que conecta Kubernetes, Snyk Controller y Snyk Platform.

Diagrama de la arquitectura de integración de Kubernetes

Cómo instalar varios controladores de Snyk en un solo clúster de Kubernetes

¡Ahora viene la parte divertida! Te guiaremos paso a paso para configurar varios controladores de Snyk en un solo clúster de Kubernetes. Estos son los pasos que seguiremos:

  1. Configurar espacios de nombres separados

  2. Crear una organización de Snyk para cada espacio de nombres

  3. Instalar y configurar snyk monitor para el primer espacio de nombres (apples)

  4. Instalar y configurar snyk monitor para el segundo espacio de nombres (bananas)

  5. Verificar que las cargas de trabajo implementadas se importen automáticamente mediante la política

  6. Implementar cargas de trabajo en bananas que se importen automáticamente mediante un archivo de política de Rego

Requisitos previos

  1. Necesitarás una cuenta Business o Enterprise de Snyk para usar la integración de Kubernetes. Si no tienes una, puedes iniciar una prueba gratuita de nuestro plan Business. Aunque no quieras probarlo por tu cuenta, te recomiendo que sigas leyendo (puedes omitir los bloques de código) para aprender a instalar y administrar varios controladores de Snyk en un solo clúster de Kubernetes.

  2. Un clúster de Kubernetes, como AKS, EKS, GKE, Red Hat OpenShift u otra variante compatible.

Paso 1: Configura espacios de nombres separados

En esta demostración, uso un servicio Azure AKS para mi clúster de Kubernetes. En este clúster instalaremos dos controladores de Snyk, cada uno en su propio espacio de nombres: uno en el espacio de nombres apples y otro en el espacio de nombres bananas, como se muestra en el diagrama a continuación.

Diagrama de un clúster de Kubernetes dividido en los espacios de nombres Apples y Bananas, cada uno con componentes de Node.js, Python y Snyk Controller.

Crea los espacios de nombres como se muestra a continuación:

➜  kubectl create namespace apples
namespace/apples created
➜  kubectl create namespace bananas
namespace/bananas created

Paso 2: Crea una organización de Snyk para cada espacio de nombres

Usar organizaciones de Snyk separadas nos permite separar el análisis de las cargas de trabajo, para que los equipos de producto puedan usar sus propias organizaciones y tener un mejor control del análisis de sus cargas de trabajo e imágenes. Puedes usar la misma organización con cada uno de los controladores de Snyk que implementemos, pero en este caso los mantendremos separados. En ambos casos, las cargas de trabajo aparecerán con una etiqueta que configuraremos al instalar los controladores de Snyk.

Menú de selección de organizaciones que muestra las organizaciones disponibles y la opción «Crear una nueva organización» resaltada con un círculo

Nuestras nuevas organizaciones

 Una para el espacio de nombres apples:

Banner morado de Snyk con una miniatura de un auto rojo y la etiqueta «aks-apples-kubernetes»

Una para el espacio de nombres bananas:

Banner morado de Snyk que muestra una pequeña imagen de un auto rojo y el texto «aks-bananas-kubernetes» con una flecha desplegable

Una vez creadas, verás dos organizaciones vacías en la aplicación de Snyk. Las usaremos en breve.

Interfaz de búsqueda de organizaciones que muestra Apples Inc. con los grupos “aks-apples-kubernetes” y “aks-bananas-kubernetes”, resaltados con un óvalo rojo.
Encabezado del panel de Snyk que muestra el selector de proyecto «aks-bananas-kubernetes» y el ícono de configuración resaltado

En cada organización, habilita la integración de Kubernetes seleccionando la pestaña Integraciones, seleccionando Kubernetes y eligiendo Conectar. Luego, consulta la documentación de Snyk Kubernetes para completar la configuración.

Anota los ID de integración de la integración de Kubernetes de cada organización de Snyk: los necesitarás pronto. Puedes obtener el ID de integración de Kubernetes desde el ícono de configuración de la organización en la barra de navegación superior de Snyk. Luego, ve a Integraciones en la barra lateral y selecciona la integración de Kubernetes, como se muestra a continuación.

Configuración de la integración de Snyk con Kubernetes que muestra un clúster conectado, el ID de integración, un botón para copiar, la documentación y la versión del controlador.

Paso 3: Instala y configura snyk monitor para el espacio de nombres apples

Ahora que configuramos nuestras organizaciones e integraciones y las conectamos al clúster, podemos configurar Snyk monitor desde una ventana de terminal.

Crearemos un archivo para suscribirnos a los eventos de las cargas de trabajo y definir los criterios de las suscripciones; instalaremos el chart de Helm de Snyk para monitorear Kubernetes y configuraremos e iniciaremos el monitor.

Crea el archivo del registro

En una terminal, crea un directorio para la organización apples y accede a él:

➜  mkdir apples
➜  cd apples

Crea un archivo llamado workload-events.rego con el siguiente contenido y reemplaza <APPLES_INTEGRATION_ID> por el ID de integración de la integración de Kubernetes de la organización apples.

Con esta política de Rego, le indicamos al controlador de Snyk que importe o elimine cargas de trabajo únicamente del espacio de nombres apples, siempre que el tipo de carga de trabajo de Kubernetes no sea CronJob ni Service. Para obtener más información sobre los distintos tipos de cargas de trabajo, consulta la documentación de Snyk.

workload-events.rego
package snyk
orgs := ["<APPLES_INTEGRATION_ID>"]
default workload_events = false
workload_events {
  input.metadata.namespace == "apples"
  input.kind != "CronJob"
  input.kind != "Service"
}

Agrega los charts de Helm de Snyk a tu repositorio

Accede a tu entorno de Kubernetes y ejecuta el siguiente comando para agregar el repositorio de Snyk Charts a Helm. Lo necesitaremos cuando instalemos este chart de Helm en breve.

➜  helm repo add snyk-charts https://snyk.github.io/kubernetes-monitor --force-update
"snyk-charts" has been added to your repositories

Crea la configuración de Snyk monitor e implementa el chart de Helm

Usar un secreto de Kubernetes nos permite ejecutar el proceso sin exponer credenciales en texto plano. En estos pasos crearemos y usaremos el secreto al implementar la configuración de la organización apples.

Crea el secreto snyk-monitor para el espacio de nombres apples y reemplaza <APPLES_INTEGRATION_ID> por el ID de integración de Kubernetes de la aplicación de Snyk de apples. En esta demostración usamos Docker Hub público para nuestro registro de contenedores, que no requiere credenciales para acceder a imágenes públicas. Para obtener más información sobre cómo usar registros privados de contenedores, consulta la documentación de controladores de Snyk.

➜ kubectl create secret generic snyk-monitor -n apples \
    --from-literal=dockercfg.json={} \
    --from-literal=integrationId=<APPLES_INTEGRATION_ID>
secret/snyk-monitor created

Ahora crea un configmap para almacenar el archivo de política de Rego que le indicará a snyk-monitor qué importar o eliminar automáticamente del espacio de nombres apples:

➜ kubectl create configmap snyk-monitor-custom-policies -n apples \       --from-file=./workload-events.rego
configmap/snyk-monitor-custom-policies created

A continuación, instala snyk-monitor en el espacio de nombres apples y reemplaza <APPLES_INTEGRATION_ID> por el ID de integración de la aplicación de Snyk de apples en el comando:

➜ helm upgrade --install snyk-monitor-apples snyk-charts/snyk-monitor \
        --namespace apples \
        --set clusterName="AKS K8s - Apples" \
        --set policyOrgs=<APPLES_INTEGRATION_ID> \
        --set workloadPoliciesMap=snyk-monitor-custom-policies

Release "snyk-monitor-apples" does not exist. Installing it now.
LAST DEPLOYED: Thu Jul 14 19:29:28 2022
NAMESPACE: apples
STATUS: deployed
REVISION: 1
TEST SUITE: None

Nota:La etiqueta «AKS K8s - Apples» te permite encontrar las cargas de trabajo importadas en la interfaz de usuario de Snyk, como verás pronto.

Por último, verifica que todo esté en funcionamiento (este comando supone que instalaste jq; si no, omite la parte | jq de la instrucción):

➜ helm ls -A -o json | jq
[
  {
"name": "snyk-monitor-apples",
"namespace": "apples",
"revision": "1",
"updated": "2022-07-14 19:45:56.681028 +1000 AEST",
"status": "deployed",
"chart": "snyk-monitor-1.92.10",
"app_version": ""
  }
]

➜ kubectl get pods -n apples
NAME                             READY   STATUS RESTARTS   AGE
snyk-monitor-apples-797cd64c-sqvj4   1/1 Running   0      16m

En este punto, tenemos un controlador de Snyk instalado en el espacio de nombres apples con un nombre único. Más adelante mostraremos cómo este controlador de Snyk importa automáticamente las cargas de trabajo según lo que configuramos, a medida que se implementan en el espacio de nombres apples del clúster de Kubernetes. Por ahora, quizá notes que, si actualizas la página de proyectos de la organización apples, se ha analizado el propio Snyk monitor. Esto se debe a que le indicamos que analizara cargas de trabajo del tipo Deployment en el espacio de nombres apples.

Panel de proyectos de Snyk que muestra dos proyectos de Kubernetes, con el recuento de vulnerabilidades por nivel de gravedad y opciones para agregar otro proyecto.

Paso 4: Instala y configura snyk monitor para el espacio de nombres bananas

Crea un directorio llamado bananas y accede a él:

➜ cd ..
➜ mkdir bananas
➜ cd bananas

Ahora crea un archivo llamado workload-events.rego con el siguiente contenido y reemplaza <BANANAS_INTEGRATION_ID> por el ID de integración de Kubernetes de la aplicación de Snyk de bananas:

package snyk
orgs := ["<BANANAS_INTEGRATION_ID>"]
default workload_events = false
workload_events {
      input.metadata.namespace == "bananas"
      input.kind != "CronJob"
      input.kind != "Service"
}

A continuación, crea el secreto snyk-monitor para el espacio de nombres bananas y reemplaza BANANAS_INTEGRATION_ID por el ID de integración de Kubernetes de la aplicación de Snyk de bananas:

➜  ~/snyk/SE/blogs/snyk-multi-namespace-controllers/bananas kubectl create secret generic snyk-monitor -n bananas \
  --from-literal=dockercfg.json={} \
  --from-literal=integrationId=BANANAS_INTEGRATION_ID
secret/snyk-monitor created

Luego, crea un configmap para almacenar el archivo de política de Rego que le indicará a snyk-monitor qué importar o eliminar automáticamente del espacio de nombres bananas:

➜ kubectl create configmap snyk-monitor-custom-policies -n bananas --from-file=./workload-events.rego
configmap/snyk-monitor-custom-policies created

Instala snyk-monitor en el espacio de nombres bananas y reemplaza ‰¤BANANAS_INTEGRATION_ID> por el ID de integración de Kubernetes de la aplicación de Snyk de bananas:

➜ helm upgrade --install snyk-monitor-bananas snyk-charts/snyk-monitor \
      --namespace bananas \
      --set clusterName="K8s - Bananas" \
      --set policyOrgs=<BANANAS_INTEGRATION_ID> \
      --set workloadPoliciesMap=snyk-monitor-custom-policies
Release "snyk-monitor-bananas" does not exist. Installing it now.
NAME: snyk-monitor-bananas
LAST DEPLOYED: Thu Jul 14 20:19:36 2022
NAMESPACE: bananas
STATUS: deployed
REVISION: 1
TEST SUITE: None

Por último, verifica que todo esté en funcionamiento:

➜ helm ls -A -o json | jq .
[
  {
"name": "snyk-monitor-apples",
"namespace": "apples",
"revision": "1",
"updated": "2022-07-14 19:45:56.681028 +1000 AEST",
"status": "deployed",
"chart": "snyk-monitor-1.92.10",
"app_version": ""
  },
  {
"name": "snyk-monitor-bananas",
"namespace": "bananas",
"revision": "1",
"updated": "2022-07-14 20:19:36.563328 +1000 AEST",
"status": "deployed",
"chart": "snyk-monitor-1.92.10",
"app_version": ""
  }
]

➜ kubectl get pods -n bananas
NAME                                  READY   STATUS   RESTARTS  AGE
Snyk-monitor-bananas-54b8c4bf89-r6tf2   1/1 Running   0      3m38s

Paso 5: Verifica que las cargas de trabajo implementadas se importen automáticamente mediante la política

A continuación, implementaremos cargas de trabajo en el espacio de nombres apples para asegurarnos de que se importen automáticamente. Empezaremos con una aplicación Spring Boot que implementaremos en Kubernetes como se muestra a continuación.

Crea un archivo llamado springbootemployee-K8s.yaml con el siguiente contenido:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-employee-api-apples
  namespace: apples
spec:
  selector:
matchLabels:
  app: springboot-employee-api-apples
  replicas: 1
  template:
metadata:
  labels:
    app: springboot-employee-api-apples
spec:
  containers:
    - name: springboot-employee-api-apples
      image: pasapples/springbootemployee:multi-stage-add-layers
      imagePullPolicy: Always
      ports:
        - containerPort: 8080

Luego, impleméntalo:

➜ kubectl apply -f springbootemployee-K8s.yaml
deployment.apps/springboot-employee-api-apples created

Verifica que, después de unos minutos, se analice la carga de trabajo y se importe automáticamente a la organización apples de Snyk, tal como lo indica el controlador de Snyk en el espacio de nombres apples.

Panel de proyectos de Snyk que muestra los proyectos de Kubernetes de la organización aks-apples-kubernetes con la cantidad de problemas por nivel de gravedad

Paso 6: Implementa cargas de trabajo en bananas: importación automática mediante un archivo de política de Rego

Crea un archivo llamado snyk-boot-web-deployment.yaml con el siguiente contenido

apiVersion: apps/v1
kind: Deployment
metadata:
  name: snyk-boot-web
  namespace: bananas
spec:
  selector:
    matchLabels:
      app: snyk-boot-web
  replicas: 1
  template:
    metadata:
      labels:
        app: snyk-boot-web
    spec:
      containers:
        - name: snyk-boot-web
          image: pasapples/snyk-boot-web:v1
          imagePullPolicy: Always
          ports:
            - containerPort: 5000

Implementa de la siguiente manera:

➜ kubectl apply -f snyk-boot-web-deployment.yaml
deployment.apps/snyk-boot-web created

Después de unos 3 minutos, verifica que se analice la carga de trabajo y se importe automáticamente a la organización bananas de Snyk en la aplicación, tal como lo indica el controlador de Snyk en el espacio de nombres bananas.

Panel de Snyk Projects que muestra proyectos de Kubernetes, la cantidad de vulnerabilidades por nivel de gravedad y opciones para ver informes o agregar un proyecto.

Extra: Consulta los registros de los controladores de Snyk

La configuración de Kubernetes y los archivos YAML pueden ser algo complicados. Si tienes problemas para configurar tus monitores, puede ser útil consultar los registros de cada controlador de Snyk, como se muestra en los siguientes fragmentos de comandos:

Controlador de Snyk de Apples

export APPLES_POD=`kubectl get pods --namespace apples -l "app.kubernetes.io/name=snyk-monitor-apples" -o jsonpath="{.items[0].metadata.name}"`

kubectl logs -n apples $APPLES_POD -f

Controlador de Snyk de Bananas

export BANANAS_POD=`kubectl get pods --namespace bananas -l "app.kubernetes.io/name=snyk-monitor-bananas" -o jsonpath="{.items[0].metadata.name}"`

kubectl logs -n bananas $BANANAS_POD -f

Resumen

En esta publicación, mostramos cómo implementar varios controladores de Snyk en un solo clúster de Kubernetes, cada uno monitoreando su propio espacio de nombres. Los controladores se comunican con la API de Kubernetes para determinar qué cargas de trabajo (por ejemplo, Deployment, ReplicationController, CronJob, etc., según se definen en el archivo de política de Rego) se ejecutan en el clúster, encontrar sus imágenes asociadas y analizarlas directamente en el clúster para detectar vulnerabilidades.

Prueba estos pasos en tu propio clúster de Kubernetes. Para hacerlo, inicia una prueba gratuita de un plan Snyk Business.

Recursos para obtener más información

Ahora que aprendiste lo fácil que es configurar la integración de Kubernetes con Snyk, aquí tienes algunos enlaces útiles para comenzar tu camino hacia la seguridad de contenedores.

Protege la infraestructura desde el origen

Snyk automatiza la seguridad y el cumplimiento de IaC en los flujos de trabajo, y detecta recursos con desviaciones de configuración y recursos faltantes.

Leer más

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

Blog

Evo ADS Govern Agent Behavior ya está disponible: controla el uso de MCP

Evo ADS Govern Agent Behavior ya está disponible, comenzando con MCP Governance. Descubre, aprueba, monitorea, registra y bloquea el uso de servidores MCP en los principales agentes de programación con IA.

illustration hero ai
Blog

¿Qué es Agentic AppSec?

Descubre cómo Agentic AppSec usa agentes de IA con contexto, límites definidos y verificación independiente para ejecutar el ciclo de seguridad de aplicaciones.