|
| 1 | +--- |
| 2 | +description: Observabilidad de alto rendimiento para entornos Kubernetes seguros mediante |
| 3 | + el controlador CSI de Datadog |
| 4 | +further_reading: |
| 5 | +- link: https://www.datadoghq.com/blog/datadog-csi-driver/ |
| 6 | + tag: Blog |
| 7 | + text: Llevar la observabilidad de alto rendimiento a entornos Kubernetes seguros |
| 8 | + con el controlador CSI de Datadog |
| 9 | +title: Controlador CSI de Datadog |
| 10 | +--- |
| 11 | + |
| 12 | +## Información general |
| 13 | + |
| 14 | +Esta página proporciona información general sobre el controlador CSI de Datadog e instrucciones de instalación en un clúster Kubernetes |
| 15 | + |
| 16 | +Para obtener más información sobre Kubernetes Container Storage Interface (CSI), consulta la [documentación sobre Kubernetes CSI][4]. |
| 17 | + |
| 18 | +El controlador CSI de Datadog es [open source][1]. |
| 19 | + |
| 20 | +<div class="alert alert-info"> |
| 21 | + El controlador CSI de Datadog no es compatible con Windows. |
| 22 | +</div> |
| 23 | + |
| 24 | +## Cómo funciona |
| 25 | + |
| 26 | +El controlador CSI de Datadog es un DaemonSet que ejecuta un servidor gRPC implementando las especificaciones CSI en cada nodo de tu clúster Kubernetes. |
| 27 | + |
| 28 | +La instalación del controlador CSI de Datadog en un clúster Kubernetes permite utilizar volúmenes CSI especificando el nombre del controlador CSI de Datadog. |
| 29 | + |
| 30 | +El servidor del nodo CSI de Datadog es responsable de gestionar el ciclo de vida de los volúmenes CSI de Datadog. |
| 31 | + |
| 32 | +## ¿Por qué utilizar el controlador CSI de Datadog? |
| 33 | + |
| 34 | +El controlador CSI de Datadog permite al Datadog Agent compartir sockets de dominio Unix de Trace Agent y DogStatsD con pods de usuario independientemente de las [normas de seguridad para pods][4] de los espacios de nombres. |
| 35 | + |
| 36 | +Si no se utilizan volúmenes CSI, los sockets UDS deben compartirse con el pod de usuario a través de volúmenes hostpath. Si el pod de usuario se está ejecutando en un espacio de nombres que tiene normas de seguridad para pods sin privilegios, el pod falla al iniciarse porque los volúmenes hostpath no están permitidos en ese contexto. |
| 37 | + |
| 38 | +El controlador CSI de Datadog desplaza el volumen hostpath de la aplicación de usuario al servidor del nodo CSI: el DaemonSet CSI se ejecuta en un espacio de nombres privilegiado independiente y permite inyectar sockets UDS en pods de usuario con un volumen CSI de Datadog, lo que permite que los pods de usuario se ejecuten en espacios de nombres con normas de seguridad para pods `baseline` o `restricted`. |
| 39 | + |
| 40 | +## Instalación y activación |
| 41 | + |
| 42 | +<div class="alert alert-info"> |
| 43 | +<strong>Notas</strong>: |
| 44 | +<ul> |
| 45 | +<li/>Requiere <a href="https://helm.sh">Helm</a>. |
| 46 | +<li/>El controlador CSI de Datadog debe ejecutarse con un contexto de seguridad privilegiado. Esto es necesario para que el controlador CSI de Datadog pueda montar volúmenes desde el sistema de archivos host a los pods de usuario. |
| 47 | +</ul> |
| 48 | +</div> |
| 49 | + |
| 50 | +{{< tabs >}} |
| 51 | + |
| 52 | +{{% tab "Helm" %}} |
| 53 | + |
| 54 | +Para instalar y activar el controlador CSI de Datadog, configura `datadog.csi.enabled` como `true` en el Helm chart del Datadog Agent. |
| 55 | + |
| 56 | + ```shell |
| 57 | + helm repo add datadog https://helm.datadoghq.com |
| 58 | + helm repo update |
| 59 | + |
| 60 | + helm install datadog-agent datadog/datadog --set datadog.csi.enabled=true |
| 61 | + ``` |
| 62 | + |
| 63 | +{{% /tab %}} |
| 64 | + |
| 65 | +{{% tab "Datadog Operator" %}} |
| 66 | + |
| 67 | +Si el Datadog Agent se despliega utilizando el Datadog Operator, debes instalar el Helm chart del controlador CSI de Datadog antes de activar Datadog CSI en el Datadog Agent. |
| 68 | + |
| 69 | +1. **Añade el repositorio Helm de Datadog CSI.** |
| 70 | + |
| 71 | + Ejecuta: |
| 72 | + ```shell |
| 73 | + helm repo add datadog-csi-driver https://helm.datadoghq.com |
| 74 | + helm repo update |
| 75 | + |
| 76 | + ``` |
| 77 | + |
| 78 | +2. **Instala el Helm chart del controlador CSI de Datadog.** |
| 79 | + |
| 80 | + Ejecuta: |
| 81 | + |
| 82 | + ```shell |
| 83 | + helm install datadog-csi-driver datadog/datadog-csi-driver |
| 84 | + ``` |
| 85 | + |
| 86 | +3. **Activa Datadog CSI en tu recurso `DatadogAgent`.** |
| 87 | + |
| 88 | + ``` |
| 89 | + apiVersion: datadoghq.com/v2alpha1 |
| 90 | + kind: DatadogAgent |
| 91 | + metadata: |
| 92 | + name: datadog |
| 93 | + spec: |
| 94 | + global: |
| 95 | + credentials: |
| 96 | + apiSecret: |
| 97 | + secretName: datadog-secret |
| 98 | + keyName: api-key |
| 99 | + csi: |
| 100 | + enabled: true |
| 101 | + ``` |
| 102 | + |
| 103 | +{{% /tab %}} |
| 104 | + |
| 105 | +{{% tab "DaemonSet" %}} |
| 106 | + |
| 107 | +Si el Datadog Agent se despliega utilizando el DaemonSet, debes instalar el Helm chart del controlador CSI de Datadog antes de activar el controlador CSI de Datadog en el Datadog Agent. |
| 108 | + |
| 109 | +1. **Añade el repositorio Helm del controlador CSI de Datadog.** |
| 110 | + |
| 111 | + Ejecuta: |
| 112 | + ```shell |
| 113 | + helm repo add datadog-csi-driver https://helm.datadoghq.com |
| 114 | + helm repo update |
| 115 | + |
| 116 | + ``` |
| 117 | + |
| 118 | +2. **Instala el Helm chart del controlador CSI de Datadog.** |
| 119 | + |
| 120 | + Ejecuta: |
| 121 | + |
| 122 | + ```shell |
| 123 | + helm install datadog-csi-driver datadog/datadog-csi-driver |
| 124 | + ``` |
| 125 | + |
| 126 | +3. **Activa Datadog CSI**. |
| 127 | + |
| 128 | + Para activar el controlador CSI de Datadog, configura la siguiente variable de entorno en el contenedor del Datadog Cluster Agent: |
| 129 | + |
| 130 | + ``` |
| 131 | + DD_CSI_DRIVER_ENABLED=true |
| 132 | + ``` |
| 133 | +{{% /tab %}} |
| 134 | + |
| 135 | +{{< /tabs >}} |
| 136 | + |
| 137 | +### Compatibilidad con GKE Autopilot |
| 138 | + |
| 139 | +A partir del Helm chart versión 3.138.0 del Datadog Agent y del Helm chart versión 0.4.2 del controlador CSI de Datadog, el controlador CSI de Datadog puede instalarse en los clústeres de Google Kubernetes Engine (GKE) Autopilot. |
| 140 | + |
| 141 | +> **Nota:** |
| 142 | +> Si el controlador CSI no se instala utilizando el Helm chart, crea el siguiente recurso `AllowlistSynchronizer` para activar la compatibilidad con GKE Autopilot: |
| 143 | +
|
| 144 | +```yaml |
| 145 | +apiVersion: auto.gke.io/v1 |
| 146 | +kind: AllowlistSynchronizer |
| 147 | +metadata: |
| 148 | + name: datadog-csi-synchronizer |
| 149 | +spec: |
| 150 | + allowlistPaths: |
| 151 | + - Datadog/datadog-csi-driver/datadog-datadog-csi-driver-daemonset-exemption-v1.0.1.yaml |
| 152 | +``` |
| 153 | +
|
| 154 | +## Volúmenes Datadog CSI |
| 155 | +
|
| 156 | +Los volúmenes CSI procesados por el controlador CSI de Datadog deben tener el siguiente formato: |
| 157 | +
|
| 158 | +```yaml |
| 159 | +csi: |
| 160 | + driver: k8s.csi.datadoghq.com |
| 161 | + volumeAttributes: |
| 162 | + type: <volume-type> |
| 163 | +name: <volume-name> |
| 164 | +``` |
| 165 | +
|
| 166 | +Por ejemplo: |
| 167 | +
|
| 168 | +```yaml |
| 169 | +apiVersion: v1 |
| 170 | +kind: Pod |
| 171 | +metadata: |
| 172 | + name: pod-name |
| 173 | +spec: |
| 174 | + containers: |
| 175 | + - name: ubuntu |
| 176 | + image: ubuntu |
| 177 | + command: ["/bin/bash", "-c", "--"] |
| 178 | + args: ["while true; do sleep 30; echo hello-ubuntu; done;"] |
| 179 | + volumeMounts: |
| 180 | + - mountPath: /var/sockets/apm/ |
| 181 | + name: dd-csi-volume-apm-dir |
| 182 | + - mountPath: /var/sockets/dsd/dsd.sock |
| 183 | + name: dd-csi-volume-dsd |
| 184 | + volumes: |
| 185 | + - name: dd-csi-volume-dsd |
| 186 | + csi: |
| 187 | + driver: k8s.csi.datadoghq.com |
| 188 | + volumeAttributes: |
| 189 | + type: DSDSocket |
| 190 | + - name: dd-csi-volume-apm-dir |
| 191 | + csi: |
| 192 | + driver: k8s.csi.datadoghq.com |
| 193 | + volumeAttributes: |
| 194 | + type: APMSocketDirectory |
| 195 | +``` |
| 196 | +
|
| 197 | +Se admiten cuatro tipos de volumen CSI: |
| 198 | +* [APMSocket](#apmsocket) |
| 199 | +* [APMSocketDirectory](#apmsocketdirectory) |
| 200 | +* [DSDSocket](#dsdsocket) |
| 201 | +* [DSDSocketDirectory](#dsdsocketdirectory) |
| 202 | +
|
| 203 | +### APMSocket |
| 204 | +
|
| 205 | +Este tipo es útil para montar un archivo de socket UDS en el Trace Agent. |
| 206 | +
|
| 207 | +Por ejemplo: |
| 208 | +
|
| 209 | +```yaml |
| 210 | +csi: |
| 211 | + driver: k8s.csi.datadoghq.com |
| 212 | + volumeAttributes: |
| 213 | + type: APMSocket |
| 214 | +name: datadog-apm |
| 215 | +``` |
| 216 | +
|
| 217 | +Si el socket indicado no existe, la operación de montaje falla y el pod se bloquea en la fase `ContainerCreating`. |
| 218 | + |
| 219 | +### APMSocketDirectory |
| 220 | + |
| 221 | +Este tipo es útil para montar el directorio que contiene el socket APM. |
| 222 | + |
| 223 | +Por ejemplo: |
| 224 | + |
| 225 | +```yaml |
| 226 | +csi: |
| 227 | + driver: k8s.csi.datadoghq.com |
| 228 | + readOnly: false |
| 229 | + volumeAttributes: |
| 230 | + type: APMSocketDirectory |
| 231 | +name: datadog |
| 232 | +``` |
| 233 | + |
| 234 | +### DSDSocket |
| 235 | + |
| 236 | +Este tipo es útil para montar un archivo de socket UDS DogStatsD. |
| 237 | + |
| 238 | +Por ejemplo: |
| 239 | + |
| 240 | +```yaml |
| 241 | +csi: |
| 242 | + driver: k8s.csi.datadoghq.com |
| 243 | + volumeAttributes: |
| 244 | + type: DSDSocket |
| 245 | +name: datadog-dsd |
| 246 | +``` |
| 247 | + |
| 248 | +Si el socket indicado no existe, la operación de montaje falla y el pod se bloquea en la fase `ContainerCreating`. |
| 249 | + |
| 250 | +### DSDSocketDirectory |
| 251 | + |
| 252 | +Este tipo es útil para montar el directorio que contiene el socket DogStatsD. |
| 253 | + |
| 254 | +Por ejemplo: |
| 255 | + |
| 256 | +```yaml |
| 257 | +csi: |
| 258 | + driver: k8s.csi.datadoghq.com |
| 259 | + readOnly: false |
| 260 | + volumeAttributes: |
| 261 | + type: DSDSocketDirectory |
| 262 | +name: datadog |
| 263 | +``` |
| 264 | + |
| 265 | +<div class="alert alert-info"> |
| 266 | +Con el Datadog Agent v7.67 o posterior, el Admission Controller puede montar automáticamente sockets UDS Datadog en pods mutados configurando el modo de configuración de inyección en <code>csi</code>. Para obtener más información, consulta <a href="/containers/cluster_agent/admission_controller#configure-apm-and-dogstatsd-communication-mode">Admission Controller: Configurar el modo de comunicación de APM y DogStatsD </a>. |
| 267 | + |
| 268 | +Con la configuración predeterminada del Datadog Agent, el Admission Controller inyecta <code>APMSocketDirectory</code> o <code>DSDSocketDirectory</code>. Si los sockets del Trace Agent y DogStatsD están ambos en el mismo directorio en el host, solo se inyecta un volumen, ya que esto proporciona posteriormente acceso a ambos sockets que comparten el mismo directorio en el host. |
| 269 | +</div> |
| 270 | + |
| 271 | +## Cuestiones de seguridad |
| 272 | + |
| 273 | +El controlador CSI de Datadog requiere privilegios elevados y acceso específico al host. |
| 274 | + |
| 275 | +### Contexto de seguridad privilegiado |
| 276 | +El controlador CSI de Datadog debe ejecutarse como contenedor privilegiado para realizar operaciones de montaje y acceder al sistema de archivos del host. |
| 277 | + |
| 278 | +### Acceso a /var/lib/kubelet/pods |
| 279 | +El controlador CSI de Datadog necesita acceso de lectura-escritura al directorio `/var/lib/kubelet/pods`, ya que Kubernetes administra volúmenes de pods utilizando este directorio. El controlador CSI de Datadog debe acceder a `/var/lib/kubelet/pods` para inyectar sockets de dominio Unix Datadog en pods de usuario. |
| 280 | + |
| 281 | +### Propagación bidireccional de montajes |
| 282 | +La propagación bidireccional de montajes es necesaria para garantizar que los montajes de volúmenes del servidor del nodo CSI de Datadog sean visibles tanto para el host como para los pods de usuario. Sin la propagación bidireccional de montajes, los sockets compartidos no pueden propagarse correctamente a los pods. |
| 283 | + |
| 284 | +Al aislar el controlador CSI de Datadog en un espacio de nombres privilegiado, los clústeres Kubernetes pueden compartir de forma segura sockets Datadog con pods de usuario que se ejecutan bajo estrictas normas de seguridad para pods como baseline o restricted, a la vez que se minimizan los riesgos de seguridad. |
| 285 | + |
| 286 | +<div class="alert alert-info"> |
| 287 | + Limita el acceso al espacio de nombres y la configuración del controlador CSI de Datadog a operadores de confianza. Si los privilegios elevados del controlador CSI de Datadog están mal configurados, estos privilegios pueden ser mal utilizados. |
| 288 | +</div> |
| 289 | + |
| 290 | +## Referencias adicionales |
| 291 | + |
| 292 | +{{< partial name="whats-next/whats-next.html" >}} |
| 293 | + |
| 294 | +[1]: https://github.com/DataDog/datadog-csi-driver |
| 295 | +[2]: https://hub.docker.com/r/datadog/csi-driver |
| 296 | +[3]: https://kubernetes-csi.github.io/docs/introduction.html |
| 297 | +[4]: https://kubernetes.io/docs/concepts/security/pod-security-standards/ |
0 commit comments