Cómo evitar la mala configuración de Kubernetes con Datree en Windows

Copiar y pegar manifiestos de Kubernetes es común entre los desarrolladores y administradores de Kubernetes. Sin embargo, esto es arriesgado si el código no se analiza y modifica para adaptarse a las necesidades específicas de su clúster. Muchas configuraciones incorrectas provienen de código copiado y no analizado.

Las configuraciones incorrectas del clúster de Kubernetes se crean cada vez que los pares clave-valor YAML contienen valores incorrectos o no se agregan mecanismos críticos como livenessProbe y límites de recursos. Las configuraciones incorrectas ponen en peligro la seguridad y el estado del clúster. Por lo tanto, es importante evitar configuraciones incorrectas de Kubernetes mediante el uso deárbol de datosque es una CLI de Kubernetes que inspecciona y analiza archivos YAML para detectar configuraciones incorrectas de Kubernetes, proporciona los detalles de la configuración incorrecta detectada y lo que debe hacer para eliminar la configuración incorrecta.

Esta guía explica cómo instalar y usar Datree en una estación de trabajo con Windows.

requisitos previos

Asegúrese de haber instalado Kubectl en su estación de trabajo de Windows.

Cómo instalar Datree en Windows

La CLI de Datree escanea los archivos YAML locales en busca de configuraciones incorrectas y brinda detalles sobre la vulnerabilidad detectada.

  1. Abra PowerShell en su estación de trabajo Windows.
  2. Instale Datree en PowerShell:

    PS> iwr -useb https://get.datree.io/windows_install.ps1 | iex
    

    Obtendrá el siguiente resultado:

    Installing Datree...
    
    [V] Downloaded Datree
    [V] Finished Installation
    
    To run datree globally, please follow these steps:
    
        1. Run the following command as administrator: `setx PATH "$env:path;C:\Users\example\AppData\Local\datree" -m`
    
        2. Close and reopen your terminal.
    
    For more information, please visit https://datree.io
    

    Uso: prueba de datree $home/.datree/k8s-demo.yaml

        Run 'datree completion -h' to learn how to generate shell autocompletions
    
  3. Agregue Datree a la ruta del sistema. Sustituya su camino a casa porC:\users\exampleen el comando que se muestra.

    PS> setx PATH "$env:path;C:\Users\example\AppData\Local\datree" -m
    

    Obtendrá el siguiente resultado si tiene éxito.

    SUCCESS: Specified value was saved.
    
  4. Cierre y reinicie Powershell después de instalar Datree.

  5. Ejecute el siguiente comando de PowerShell para verificar que Datree esté instalado correctamente.

    PS> datree version
    

    Obtendrá el siguiente resultado:

    1.5.25
    

Cómo analizar archivos YAML con Datree

En esta sección, aprenderá a usar Datree para escanear un archivo de servicio.

  1. Cree un archivo YAML llamado service.yaml que contendrá el contenido del servicio llamado my-service.
  2. Agrega el siguiente contenido al archivo service.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
      namespace: earth
      labels:
        app: nginx
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 80
      selector:    
        app: nginx
      type: NodePort
    

    No aplique este archivo YAML a su clúster hasta que haya pasado con éxito el escaneo de Datree.

  3. Use el siguiente comando para escanear el archivo anterior:

    PS> datree test service.yaml
    

Obtendrá los siguientes resultados de escaneo de Datree:

    >>  File: service.yaml

    [V] YAML validation
    [V] Kubernetes schema validation

La información anterior indica el nombre del archivo que se escanea y los componentes que se validan.

La siguiente sección de los resultados del análisis contiene la configuración incorrecta detectada en el archivo service.yaml. El archivo service.yaml contiene una configuración incorrecta causada por un tipo de servicio llamado NodePort, que se suponía que estaba configurado como LoadBalancer. El problema con NodePorts es que eluden la seguridad de la red.

    [X] Policy check

    ❌  Prevent Service from exposing node port  [1 occurrence]
        - metadata.name: my-service (kind: Service)
    ?  Incorrect value for key `type` - `NodePort` will open a port on all nodes where it can be reached by the network external to the cluster

La siguiente sección de los resultados del análisis resume la verificación de la política y la validación de YAML.

    (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 0/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 1                                                    |
    | Total rules passed                | 20                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

Elimine la configuración incorrecta detectada modificando el archivo service.yaml y configurando el tipo de servicio como LoadBalancer:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
      namespace: earth
      labels:
        app: nginx
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 80
      selector:    
        app: nginx
      type: LoadBalancer

Escanea el archivo service.yaml modificado.

    PS> datree test service.yaml

Ahora debería ver el siguiente resultado, que muestra que el servicio modificado no tiene configuraciones incorrectas.

    (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 1/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 0                                                    |
    | Total rules passed                | 21                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

Cómo escanear un pod usando Datree

Esta sección explica cómo escanear un Pod usando Datree.

  1. Cree un archivo YAML llamado pod.yaml y agregue los siguientes contenidos.

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-example
      namespace: mattermost
    spec:
      containers:
      - name: app
        image: gcr.io/google-samples/gb-frontend:v4
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
    
  2. Escanea el archivo.

     PS> datree test pod-example.yaml
    
  3. Obtendrá el siguiente resultado:

    >>  File: pod-example.yaml
    
    [V] YAML validation
    [V] Kubernetes schema validation
    

El archivo pod.yaml creado tiene dos configuraciones incorrectas porque: elreadinessProbeylivenessProbeNo se agregaron propiedades. Estas propiedades son cruciales en Kubernetes porque alertan a Kubelet cuando los contenedores y las aplicaciones no progresan o fallan.

    [X] Policy check

    ❌  Ensure each container has a configured liveness probe  [1 occurrence]
        - metadata.name: pod-example (kind: Pod)
    ?  Missing property object `livenessProbe` - add a properly configured livenessProbe to catch possible deadlocks

    ❌  Ensure each container has a configured readiness probe  [1 occurrence]
        - metadata.name: pod-example (kind: Pod)
    ?  Missing property object `readinessProbe` - add a properly configured readinessProbe to notify kubelet your Pods are ready for traffic

    (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 0/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 2                                                    |
    | Total rules passed                | 19                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

Para eliminar las configuraciones incorrectas detectadas, modifique el Pod agregando elreadinessProbeylivenessProbepropiedades:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-example
    spec:
      containers:
      - name: app
        image: gcr.io/google-samples/gb-frontend:v4
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 8080
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 20

Escanea el archivo service.yaml modificado.

    PS> datree test pod-example.yaml

Debería ver el siguiente resultado, que muestra que el Pod ya no tiene configuraciones incorrectas detectadas en el escaneo anterior de Datree.

    (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 1/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 0                                                    |
    | Total rules passed                | 21                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

Aprende más

Para obtener más información sobre Datree, consultela documentación del proyecto.

Título del artículo Nombre (opcional) Correo electrónico (opcional) Descripción

Enviar sugerencia

Artículos Relacionados