Encriptación a nivel de agregado en ONTAP

© 2021 NetApp

Previament en un post expliqué como configurar un volumen encriptado utilizando un administrador de llaves de encriptación (KMS) especificamente de la compañía HyTrust. En este caso específico cada volumen es encriptado individualmente utilizado llaves independientes. Una desventaja de este método es que afecta la posibilidad de aumentar los niveles de eficiencia de reducción de datos como lo son; de-duplicación, compresión y compactación.

Para eliminar esta desventaja los gurus de NetApp se ingeniaron la idea de aplicar la función de encriptación a nivel de agregado permitiendo que los volúmenes que residan dentro del mismo agregado compartan la llave de encriptación. Esta tecnología es conocida como «NetApp Aggregate Encryption» (NAE). Esto permite que los clientes tengan la opción de aprovecharse de las tecnologías de eficiencia de almacenamiento en conjunto al proceso de encriptación.

Ahora nos toca hablar de como podemos crear un agregado encriptado en Ontap pero primero que nada… ¿Que es un agregado dentro de Ontap?

Utilizando como referencia el portal de «Knowledge Base» de NetApp:

Un agregado es una colección de discos (o particiones) organizados en uno o más grupos de RAID. Es el objeto de almacenamiento más básico dentro de ONTAP y es necesario para permitir el aprovisionamiento de espacio para los dispositivos conectados.

NetApp Knowledge Base
© 2021 flackbox.com

Paso 1: Validar pre-requisitos en Ontap.

Para poder utilizar la opción de encriptación a nivel de agregado en necesario tener una versión de Ontap 9.6 o mayor y que estén instaladas las licencias necesarias en el cluster. En este caso utilizamos el comando <version> para validar la versión actual del cluster y el comando <license show -package VE> para desplegar la información de las licencias.

OnPrem-HQ::> version
NetApp Release 9.9.1RC1: Fri Apr 30 06:35:11 UTC 2021
 
OnPrem-HQ::> license show -package VE -fields package,owner,description,type  
  (system license show)
serial-number                  package owner         description               type    
------------------------------ ------- ------------- ------------------------- ------- 
X-XX-XXXXXXXXXXXXXXXXXXXXXXXXX VE      OnPrem-HQ-01 Volume Encryption License license 
X-XX-XXXXXXXXXXXXXXXXXXXXXXXXX VE      OnPrem-HQ-02 Volume Encryption License license 
2 entries were displayed.

OnPrem-HQ::> 

Nota: previamente he realizado la configuración del KMS externo en Ontap. Enlace

Paso 2: Validar los disco «Spare» disponibles.

Para comenzar, existen dos formas para encriptar un agregado; inicialmente cuando es creado o la conversión en vivo de un agregado existente. Inicialmente estaré creando un agregado nuevo y luego en otro tutorial les mostrare como podemos convertir un agregado existente. Para crear un agregado es necesario tener disco duros disponibles o en el estado de «spare» como comúnmente le llama NetApp.

El comando <storage aggregate show-spare-disks> nos permite ver cuantos discos particionado están disponibles en el nodo donde crearemos el nuevo agregado encriptado. En este caso en particular podemos ver que existen 24 disco particionados utilizando la opción de «Root-Data1-Data2«. Para conocer mas sobre esta estrategia de disco favor de seguir el siguiente enlace:

ADP(v1) and ADPv2 in a nutshell, it’s delicious!

 © 2021 Chris Maki
OnPrem-HQ::> storage aggregate show-spare-disks -original-owner OnPrem-HQ-01 
                                                                      
Original Owner: OnPrem-HQ-01
 Pool0
  Root-Data1-Data2 Partitioned Spares
                                                              Local    Local
                                                               Data     Root Physical
 Disk             Type   Class          RPM Checksum         Usable   Usable     Size Status
 ---------------- ------ ----------- ------ -------------- -------- -------- -------- --------
 VMw-1.1          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.2          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.3          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.4          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.5          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.6          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.7          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.8          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.9          SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.10         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.11         SSD    solid-state      - block           11.63GB   3.35GB  26.67GB zeroed
 VMw-1.12         SSD    solid-state      - block           11.63GB   3.35GB  26.67GB zeroed
 VMw-1.13         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.14         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.15         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.16         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.17         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.18         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.19         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.20         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.21         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.22         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.23         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
 VMw-1.24         SSD    solid-state      - block           11.63GB       0B  26.67GB zeroed
24 entries were displayed.

OnPrem-HQ::> 

Paso 3: Crear el agregado encriptado.

Para crear el agregado encriptado utilizamos el comando <storage aggregate create> con la opción de <encrypt-with-aggr-key true>. En este caso creamos un agregado seguro compuesto de 23 disco «particiones».

Nota: Para este ejemplo se utilizo el tipo de RAID «Dual Parity»

OnPrem-HQ::> storage aggregate create -aggregate OnPrem_HQ_01_SSD_1 -diskcount 23 -node OnPrem-HQ-01 -raidtype raid_dp -encrypt-with-aggr-key true 

Info: The layout for aggregate "OnPrem_HQ_01_SSD_1" on node "OnPrem-HQ-01"
      would be:
      
      First Plex
      
        RAID Group rg0, 23 disks (block checksum, raid_dp)
                                                            Usable Physical
          Position   Disk                      Type           Size     Size
          ---------- ------------------------- ---------- -------- --------
          shared     VMw-1.1                   SSD               -        -
          shared     VMw-1.2                   SSD               -        -
          shared     VMw-1.3                   SSD         11.61GB  11.64GB
          shared     VMw-1.4                   SSD         11.61GB  11.64GB
          shared     VMw-1.5                   SSD         11.61GB  11.64GB
          shared     VMw-1.6                   SSD         11.61GB  11.64GB
          shared     VMw-1.7                   SSD         11.61GB  11.64GB
          shared     VMw-1.8                   SSD         11.61GB  11.64GB
          shared     VMw-1.9                   SSD         11.61GB  11.64GB
          shared     VMw-1.10                  SSD         11.61GB  11.64GB
          shared     VMw-1.18                  SSD         11.61GB  11.64GB
          shared     VMw-1.16                  SSD         11.61GB  11.64GB
          shared     VMw-1.13                  SSD         11.61GB  11.64GB
          shared     VMw-1.14                  SSD         11.61GB  11.64GB
          shared     VMw-1.15                  SSD         11.61GB  11.64GB
          shared     VMw-1.19                  SSD         11.61GB  11.64GB
          shared     VMw-1.20                  SSD         11.61GB  11.64GB
          shared     VMw-1.21                  SSD         11.61GB  11.64GB
          shared     VMw-1.17                  SSD         11.61GB  11.64GB
          shared     VMw-1.22                  SSD         11.61GB  11.64GB
          shared     VMw-1.11                  SSD         11.61GB  11.64GB
          shared     VMw-1.12                  SSD         11.61GB  11.64GB
          shared     VMw-1.23                  SSD         11.61GB  11.64GB
      
      Aggregate capacity available for volume use would be 219.5GB.
      
Do you want to continue? {y|n}: y
[Job 817] Job succeeded: DONE                                                  

OnPrem-HQ::> 

Una vez creado pasaremos a verificar el agregado, para esto utilizaremos el comando <storage aggregate show> y filtraremos el resultado con la opción de <encrypt-with-aggr-key>.

OnPrem-HQ::> storage aggregate show -fields aggregate,size,availsize,usedsize,state,node,raidstatus,encrypt-with-aggr-key 
aggregate           node          availsize raidstatus      size    state  usedsize encrypt-with-aggr-key 
------------------- ------------- --------- --------------- ------- ------ -------- --------------------- 
OnPrem_HQ_01_SSD_1 OnPrem-HQ-01 219.5GB   raid_dp, normal 219.5GB online 480KB    true                  
OnPrem_HQ_02_SSD_1 OnPrem-HQ-02 209.3GB   raid_dp, normal 219.5GB online 10.12GB  false                 
aggr0_OnPrem_HQ_01 OnPrem-HQ-01 1.11GB    raid_dp, normal 22.80GB online 21.69GB  false                 
aggr0_OnPrem_HQ_02 OnPrem-HQ-02 1.11GB    raid_dp, normal 22.80GB online 21.69GB  false                 
4 entries were displayed.

OnPrem-HQ::> 

En el resultado del comando podemos ver que fue creado el agregado con la encriptación habilitada.

Paso 4: Crear un volumen dentro del agregado encriptado.

A diferencia de la encriptación a nivel de volúmenes NVE, al utilizar encriptación a nivel de agregado no es necesario especificar la opción de encriptar a la hora de crear el volumen. El comando <vol create> crea un volumen encriptado de forma predeterminada cuando el volumen reside en un agregado que utiliza NAE.

OnPrem-HQ::> vol create -vserver SAN -volume Secure_Vol -aggregate OnPrem_HQ_01_SSD_1 -size 10GB -space-guarantee none 
[Job 818] Job succeeded: Successful                                            

OnPrem-HQ::>

Al utilizar el comando <vol show> con la opción de <encryption-state full> podemos ver que el volumen fue creado encriptado de forma predeterminada.

OnPrem-HQ::> vol show -encryption-state full -aggregate OnPrem_HQ_01_SSD_1 -fields Vserver,Volume,encrypt,encryption-type,encryption-state 
vserver volume     encryption-type encrypt encryption-state 
------- ---------- --------------- ------- ---------------- 
SAN     Secure_Vol aggregate       true    full             

OnPrem-HQ::>

Resumen

En este tutorial le mostré cómo configurar la tecnología de encriptación de nivel agregado dentro de Ontap que nos permite utilizar una clave única para crear volúmenes encriptados. Esto nos permite utilizar tecnologías de reducción y eficiencia de datos en conjunto con mecanismos de seguridad que mejoran o fortalecen la postura de seguridad de la organización.

Configuración de cifrado en volumen de NetApp con Gestor de llaves externo

Utilizando como referencia la documentación de NetApp:

NetApp Volume Encryption (NVE) de NetApp es una tecnología basada en software para cifrar los datos en reposo de un volumen a la vez. Una clave de cifrado a la que sólo puede acceder el sistema de almacenamiento garantiza que los datos del volumen no puedan leerse si el dispositivo subyacente se reutiliza, se devuelve, se extravía o se roba.

NetApp Documentation

En este tutorial les explico lo fácil que es configurar y administrar esta impresionante característica de seguridad.

Antes de comenzar a configurar esta característica es necesario tener un «Servicio de Gestión de LLaves» existente. Para el propósito de este tutorial usaré el KMS de «HyTrust KeyControl» del que ya explique previamente en el blog. Si quieres saber más sobre el tema, lee el siguiente post.

Paso 1: Crear un certificado de cliente para propósitos de autenticación:

Vaya a [KMIP > Client Certificate] y seleccione Create Certificate en el menú de Actions.

Seleccione un nombre para el certificado y presione Create.

Una vez creado el certificado se debe proceder a guardarlo en un lugar seguro.

El archivo descargado contiene el certificado del Cliente y del Root CA necesarios para configurar la opción de KMS en Ontap.

Paso 2: Validación del clúster Ontap

Los aspectos importantes a tener en cuenta antes de poder configurar esta función de seguridad son el estado del clúster y la licencia necesaria que le brinde soporte a la función de encriptación.

El comando cluster show muestra el estado general del cluster de Ontap.

OnPrem-HQ::> cluster show 
Node                  Health  Eligibility
--------------------- ------- ------------
OnPrem-HQ-01         true    true
OnPrem-HQ-02         true    true
2 entries were displayed.

El comando system node show muestra la salud del nodo y el modelo del sistema.

OnPrem-HQ::> system node show
Node      Health Eligibility Uptime        Model       Owner    Location  
--------- ------ ----------- ------------- ----------- -------- ---------------
OnPrem-HQ-01 true true           00:18:10 SIMBOX
OnPrem-HQ-02 true true           00:18:08 SIMBOX
2 entries were displayed.

Con el comando system license show se puede validar la licencia instalada en el cluster. Aquí se puede ver que la licencia de encriptación de volumen está instalada en ambos nodos.

OnPrem-HQ::> system license show -package VE

Serial Number: X-XX-XXXXXXXXXXXXXXXXXXXXXXXXXX
Owner: OnPrem-HQ-01
Installed License: Legacy Key
Capacity: -
Package           Type     Description           Expiration
----------------- -------- --------------------- -------------------
VE                license  Volume Encryption License 
                                                 -

Serial Number: X-XX-XXXXXXXXXXXXXXXXXXXXXXXXXX
Owner: OnPrem-HQ-02
Installed License: Legacy Key
Capacity: -
Package           Type     Description           Expiration
----------------- -------- --------------------- -------------------
VE                license  Volume Encryption License 
                                                 -
2 entries were displayed.

OnPrem-HQ::> 

Paso 3: Configuración del certificado de KMS en Ontap:

Según establecido en la documentación de NetApp:

El clúster y el servidor KMIP utilizan los certificados SSL de KMIP para verificar la identidad del otro y establecer una conexión SSL. Antes de configurar la conexión SSL con el servidor KMIP, debe instalar los certificados SSL de cliente KMIP para el clúster y el certificado público SSL para la autoridad de certificación (CA) raíz del servidor KMIP.

NetApp KMIP Documentation

Para instalar el certificado de cliente KMIP en el cluster de NetApp, ejecute los siguientes comandos:

Nota: El contendido de los certificados son extraídos de los archivos previamente descargados. Los archivos ONTAPEncryption.pem y cacert.pem contienen la información necesaria.

OnPrem-HQ::> security certificate install –vserver OnPrem-HQ -type client –subtype kmip-cert
Please enter Certificate: Press <Enter> when done
-----BEGIN CERTIFICATE----- 
Certificate Content
-----END CERTIFICATE-----
Please enter Private Key: Press <Enter> when done
-----BEGIN PRIVATE KEY-----  
Certificate Private Key Content
-----END PRIVATE KEY-----
You should keep a copy of the private key and the CA-signed digital certificate for future
reference.

The installed certificate's CA and serial number for reference:
CA: HyTrust KeyControl Certificate Authority
serial: C9A148B9

The certificate's generated name for reference: ONTAPEncryption
OnPrem-HQ::> security certificate install -vserver OnPrem-HQ -type server-ca -subtype kmip-cert 

Please enter Certificate: Press <Enter> when done
-----BEGIN CERTIFICATE-----  
Certificate Content
-----END CERTIFICATE-----
You should keep a copy of the CA-signed digital certificate for future reference.

The installed certificate's CA and serial number for reference:
CA: HyTrust KeyControl Certificate Authority
serial: 60A148B6

The certificate's generated name for reference: HyTrustKeyControlCertificateAuthority

Paso 4: Configuración de la solución Volume Encryption de NetApp:

Para este tutorial es necesario configurar un servidor de gestión de llaves «KMS» externo para que el sistema de almacenamiento pueda almacenar y recuperar de forma segura las llaves de autenticación para la solución de NetApp Volume Encryption (NVE).

Nota: NetApp recomienda un mínimo de dos servidores para la redundancia y la recuperación de desastres.

El siguiente comando permite añadir el servidor de KMS al sistema de Ontap utilizando la dirección de IP 192.168.7.201, el puerto TCP/5696 y utilizando los certificados configurados previamente.

OnPrem-HQ::> security key-manager external enable -vserver OnPrem-HQ -key-servers 192.168.7.201:5696 -client-cert ONTAPEncryption -server-ca-certs HyTrustKeyControlCertificateAuthority 

OnPrem-HQ::> security key-manager external show                                                                                                                                           

                  Vserver: OnPrem-HQ
       Client Certificate: ONTAPEncryption
   Server CA Certificates: HyTrustKeyControlCertificateAuthority
          Security Policy: -

Key Server
------------------------------------------------
192.168.7.201:5696

Es importante validar que el servicio de KMS esté «available» antes de proseguir a crear los volúmenes encriptados. El comando security key-manager external show-status no permite validar el estado del servicio.

OnPrem-HQ::> security key-manager external show-status

Node  Vserver  Key Server                                   Status
----  -------  -------------------------------------------  ---------------
OnPrem-HQ-01
      OnPrem-HQ
               192.168.7.201:5696                           available
OnPrem-HQ-02
      OnPrem-HQ
               192.168.7.201:5696                           available
2 entries were displayed.

OnPrem-HQ::> 

Paso 5: Crear un volumen encriptado (NVE)

En ésta etapa final del tutorial probaremos que la configuración realizada es la correcta al crear un volumen encriptado dentro de Ontap. Para este paso usaremos el comando vol create utilizando la opcion de encrypt true

OnPrem-HQ::> vol create TEST_Encryption -vserver SAN -size 10G -aggregate OnPrem_HQ_01_SSD_1 -encrypt true 
  
[Job 763] Job succeeded: Successful 

Con el comando vol show podemos verificar que el volumen haya sido creado con la opción de encriptación.

OnPrem-HQ::> vol show -encryption -vserver SAN -encryption-state full 
Vserver   Volume       Aggregate    State      Encryption State
--------- ------------ ------------ ---------- ----------------
SAN       TEST_Encryption OnPrem_HQ_01_SSD_1 online full

OnPrem-HQ::> 

Paso 6: Validar en el servidor KMS la información de Encriptación.

En este ultimo paso entramos al portal de administración de la aplicación «HyTrust KeyControl» para validar que las llaves de encriptacion estén grabadas en la plataforma. Para validar ésta información vamos al menú de [KMIP > Objects] donde se puede validar que las llaves fueron creadas luego de creado el volumen dentro de Ontap.

Resumen

En este tutorial mostramos como configurar el servicio de KMS dentro de Ontap que nos permite crear volúmenes encriptados permitiendo aumentar o mejorar la postura de seguridad en nuestra infraestructura u organización.

NetApp PowerShell Toolkit – Obtener información de Lun

Recientemente en un post del foro de NetApp un usuario solicito ayuda para crear una función en Powershell utilizando las librerías de DataOntap. Aquí les muestro como utilizamos estas librerías para conseguir unir múltiples objetos con información relacionada a los LUN asignados en NetApp.

Un dato curioso sobre esta petición es que de manera nativa las librerías de Ontap no te permiten filtrar la información requerida y que pueda ser desplegada en una sola Tabla. Para esto creamos un objeto dentro de PowerShell donde podemos construir el formato de la información y que este tenga un sentido mas lógico.

Las librerías de NetApp pueden ser instaladas desde el «PowerShell Gallery»:

https://www.powershellgallery.com/packages/DataONTAP/9.8.0

Código de la función <get-luninfo>

Import-Module dataontap



#Connect to Ontap Storage

Connect-NcController -Name <cluster> -Vserver <vserver>



#Get the list of LUNs

$luntable = Get-NcLun | Select-Object Path -ExpandProperty Path



#Declare Function

function get-luninfo {

 param(

     #Declare the required variable

     [string]$lunpath

 )

 #Check if the lun is mapped to any Host (IGROUP)

 if (get-nclunmap $lunpath) {

     #get the lun information

     $lunid = Get-NcLunmap $lunpath | Select-Object LunId -ExpandProperty LunId

     $lunigroup = get-nclunmap $lunpath | Select-Object InitiatorGroup -ExpandProperty InitiatorGroup

     $vserver =  Get-NcLun $lunpath | Select-Object Vserver -ExpandProperty Vserver

     $lunigrouptype = Get-NcIgroup -Name $lunigroup | Select-Object InitiatorGroupType -ExpandProperty InitiatorGroupType

     $lunigrouptypeOS = Get-NcIgroup -Name $lunigroup | Select-Object InitiatorGroupOsType -ExpandProperty InitiatorGroupOsType

     $lunigroupAluaEna = Get-NcIgroup -Name $lunigroup | Select-Object InitiatorGroupAluaEnabled -ExpandProperty InitiatorGroupAluaEnabled

     $initiators = Get-NcIgroup -Name $lunigroup | Select-Object Initiators -Unique -ExpandProperty Initiators

     $initiatorstatus = @()

     #Loop to find the initiators online status

     foreach ($in in $initiators.Initiators.InitiatorName) {

         $status = Confirm-NcLunInitiatorLoggedIn -VserverContext $vserver -Initiator $in | Select-Object Value -ExpandProperty Value

         $initiatorstatus += @(@{Initiator="$in";Online="$status"})

         }

     foreach ($object in $initiatorstatus) {

         $initiatoronline += $object.ForEach({[PSCustomObject]$_})

         }

     #Create a Object to better display and Glue the Information

     $obj = New-Object -TypeName PSObject

     $obj | add-member -MemberType NoteProperty -Name "vServer" -Value $vserver

     $obj | add-member -MemberType NoteProperty -Name "Lun ID" -Value $lunid

     $obj | add-member -MemberType NoteProperty -Name "IGROUP Name" -Value $lunigroup

     $obj | add-member -MemberType NoteProperty -Name "IGROUP TYPE" -Value $lunigrouptype

     $obj | add-member -MemberType NoteProperty -Name "IGROUP TYPE OS" -Value $lunigrouptypeOS

     $obj | add-member -MemberType NoteProperty -Name "IGROUP ALUA ENABLE" -Value $lunigroupAluaEna

     $obj | add-member -MemberType NoteProperty -Name "Lun Path" -Value $lunpath

     #$obj | add-member -MemberType NoteProperty -Name "Initiator Info" -Value $initiatoronline

    

     #Return the Formated Information

     Write-Output $obj | FT

     Write-Output $initiatoronline

 }

 # If the LUN isnt mapped to any HOST, display the available information.

 else {

     $vserver =  Get-NcLun $lunpath | Select-Object Vserver -ExpandProperty Vserver

     $obj = New-Object -TypeName PSObject

     $obj | add-member -MemberType NoteProperty -Name "vServer" -Value $vserver

     $obj | add-member -MemberType NoteProperty -Name "Lun Path" -Value $lunpath

     $obj | add-member -MemberType NoteProperty -Name "Lun Mapping" -Value "Lun Not Mapped"

     Write-Output $obj | FT -Wrap -AutoSize

 }

}

#Calling the Function

foreach ($lun in $luntable) {

 get-luninfo($lun)

 }

Ejemplo de la información obtenida

Instalando Minio en Centos Linux 8

El Problema

En estos últimos meses he estado estudiando para la certificación de «VEEAM VMCE Arquitect» y uno de los requisitos es implementar la opción de «Scale Out Backup Repository». Una forma sencilla de lograr esto es utilizando el servicio de Minio.

Sobre Minio

Minio es un servicio de almacenamiento de objetos de código abierto compatible con el servicio de almacenamiento en la nube de Amazon S3. Las aplicaciones que se han configurado para comunicarse con Amazon S3 también se pueden configurar para comunicarse con Minio, lo que permite que Minio sea una alternativa viable a S3.

Instalación

[Añadiendo el usuario de minio]

[root@VEEAM-MINIO ~]# useradd -r minio-user -s /sbin/nologin

[Creando el archivo de configuración]

[root@VEEAM-MINIO ~]# cat <<EOT >> /etc/default/minio

# Volume to be used for MinIO server.

MINIO_VOLUMES="/usr/local/share/minio/"

# Use if you want to run MinIO on a custom port.

MINIO_OPTS="-C /etc/minio --address <your_server_ip>:9000"

# User for the server.

MINIO_ACCESS_KEY="<change me>"

# Password for the server

MINIO_SECRET_KEY="<change me>"

# Root user for the server. 

MINIO_ROOT_USER="<change me>"

# Root secret for the server. 

MINIO_ROOT_PASSWORD="<change me>"

EOT

[Descargando la aplicación]

[root@VEEAM-MINIO ~]# wget https://dl.min.io/server/minio/release/linux-amd64/minio

[root@VEEAM-MINIO ~]# chmod +x minio #asignando privilegios de ejecutar

[root@VEEAM-MINIO ~]# mv minio /usr/local/bin #moviendo ejecutable al directorio

[root@VEEAM-MINIO ~]# chown minio-user:minio-user /usr/local/bin/minio #asignado permisos

[Creando directorios y asignando permisos]

[root@VEEAM-MINIO ~]# mkdir /usr/local/share/minio

[root@VEEAM-MINIO ~]# chmod 755 /usr/local/share/minio

[root@VEEAM-MINIO ~]# chown minio-user:minio-user /usr/local/share/minio

[root@VEEAM-MINIO ~]# mkdir /etc/minio

[root@VEEAM-MINIO ~]# chown minio-user:minio-user /etc/minio

[Descargando y activando servicio de Minio]

[root@VEEAM-MINIO ~]# wget https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service -O /etc/systemd/system/minio.service

[root@VEEAM-MINIO ~]# systemctl daemon-reload

[root@VEEAM-MINIO ~]# systemctl enable minio

[Inicializando y verificando el servicio]

[root@VEEAM-MINIO ~]# systemctl start minio

[root@VEEAM-MINIO ~]# systemctl status minio

[Permitiendo tráfico en el «firewall» local]

[root@VEEAM-MINIO ~]# firewall-cmd --zone=public --add-port=9000/tcp --permanent

[root@VEEAM-MINIO ~]# firewall-cmd --reload

HomeLab – Cómo habilitar VMware TPS para lograr una mayor consolidación de las máquinas virtuales

En este blog, estaré hablando sobre cómo podemos optimizar la utilización de memoria RAM en nuestro ambiente de prueba «HomeLab». El objetivo principal de este procedimiento es que podamos tener mayores niveles de consolidación a la hora de realizar nuestros laboratorios.

«Transparent Page Sharing» (TPS) es un método por el cual se eliminan las copias de páginas de memoria duplicadas. En otras palabras, el concepto de TPS es algo similar a la deduplicación. Esto ayuda al servidor de ESXi a liberar bloques de memoria repetidas de una máquina virtual permitiendo aumentar los niveles de consolidación.

Memory Deduplication

Si desean saber un poco más sobre TPS su beneficios y riesgos pueden acceder el siguiente enlace «Transparent Page Sharing (TPS) in hardware MMU systems». Aunque se sabe que el uso de TPS puede ser una alarma de seguridad, entiendo que no representa un riesgo importante en un entorno de pruebas como el nuestro. Les facilito una referencia para esta información:

In a nutshell, independent research indicates that TPS can be abused to gain unauthorized access to data under certain highly controlled conditions. In line with its “secure by default” security posture, VMware has opted to change the default behavior of TPS and provide customers with a configurable option for selectively and more securely enabling TPS in their environment. 

Disabling TPS in vSphere – Impact on Critical Applications

Nota: Te muestro cómo cambiar este valor usando Powershell porque te permite hacer el cambio en varios servidores al mismo tiempo.

Para empezar debemos verificar qué valor está configurado actualmente en los servidores ESXi. Para realizar esta tarea utilizamos el comando <Get-VMHost> para extraer la información de los servidores conectados al vCenter. El resultado se envía al comando <Get-AdvancedSetting -Name Mem.ShareForceSalting> que nos permite extraer el valor configurado en la variable «Mem.ShareForceSalting».

PS /home/blabla> Get-VMHost | Get-AdvancedSetting -Name Mem.ShareForceSalting | Select-Object Entity,Name,Value,Type | Format-Table -Wrap -AutoSize

Entity                          Name                  Value   Type
------                          ----                  -----   ----
esxsvr-00f.zenprsolutions.local Mem.ShareForceSalting     2 VMHost
comp-02a.zenprsolutions.local   Mem.ShareForceSalting     2 VMHost
comp-01a.zenprsolutions.local   Mem.ShareForceSalting     2 VMHost

PS /home/blabla> 

En este ejemplo en particular los servidores ESXi están configurados con un valor por defecto de #2. Utilizando la documentación de VMware como referencia, este valor indica que la función TPS «Inter-VM» está desactivada.

Para activar la función TPS «Inter-VM» utilizamos el comando <Set-AdvancedSetting> con el valor de #0. Cabe mencionar que este comando se puede activar con las VMs encendidas o sin que el servidor esté en mantenimiento.

PS /home/blabla> Get-VMHost -Name esxsvr-00f.zenprsolutions.local | Get-AdvancedSetting -Name Mem.ShareForceSalting | Set-AdvancedSetting -Value 0        

Perform operation?
Modifying advanced setting 'Mem.ShareForceSalting'.
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y

Name                 Value                Type                 Description
----                 -----                ----                 -----------
Mem.ShareForceSalting 0                    VMHost               

PS /home/blabla> 

De nuevo validamos con el comando <Get-AdvancedSetting> si el valor configurado es el que especificamos anteriormente.

PS /home/blabla> Get-VMHost | Get-AdvancedSetting -Name Mem.ShareForceSalting | Select-Object Entity,Name,Value,Type | Format-Table -Wrap -AutoSize

Entity                          Name                  Value   Type
------                          ----                  -----   ----
esxsvr-00f.zenprsolutions.local Mem.ShareForceSalting     0 VMHost
comp-02a.zenprsolutions.local   Mem.ShareForceSalting     2 VMHost
comp-01a.zenprsolutions.local   Mem.ShareForceSalting     2 VMHost

PS /home/blabla> 

Para esta prueba encendimos 23 máquinas virtuales (Windows) para poner el servidor en modo de contención y así poder ver qué beneficios tiene el TPS. Este resultado que les muestro a continuación representa las estadísticas de memoria del servidor ESXi obtenidas con el comando <esxtop>. Aquí podemos ver las estadísticas antes de que configuráramos la función «TPS Inter-VM» con el valor #2. La variable que vemos en negrita «PSHARE/MB» representa el valor de memoria compartida que tiene actualmente el servidor, es decir, sólo se está utilizando TPS en modo «Intra-VM». Esta variable tiene un valor de 1400/MB.

2:58:11pm up 50 min, 722 worlds, 23 VMs, 45 vCPUs; MEM overcommit avg: 1.10, 1.10, 0.99
PMEM  /MB: 65398   total: 2139     vmk,60782 other, 2358 free
VMKMEM/MB: 65073 managed:  1265 minfree,  7501 rsvd,  57572 ursvd,  high state
PSHARE/MB:    1648  shared,     248  common:    1400 saving

Ahora pasamos a validar el beneficio de tener habilitada la función «TPS Inter-VM» con el valor #0 en nuestro clúster. Como se puede ver en el siguiente resultado del comando <esxtop>, hubo un ahorro sustancial (32097/MB) de memoria. Esto nos permitió aumentar los niveles de consolidación de nuestro «HomeLab».

3:36:46pm up  1:29, 1024 worlds, 23 VMs, 45 vCPUs; MEM overcommit avg: 1.05, 1.05, 0.95
PMEM  /MB: 65398   total: 2262     vmk,60078 other, 3057 free
VMKMEM/MB: 65073 managed:  1265 minfree,  9092 rsvd,  55980 ursvd, clear state
PSHARE/MB:   33038  shared,     941  common:   32097 saving

Hasta Luego Amigos!

HomeLab – QuickBoot en vSphere 7 update 2 con ESXi Virtual

En este bog, estaré validando si la función de «ESXi QuickBoot» trabaja en modo Nested osea correr ESXi en una VM. Primero que nada debemos saber que es QuickBoot y que requerimientos tiene. Para esto utilizaré como referencia la documentación del portal de VMWare:

Quick Boot es una función de vSphere que acelera el proceso de actualización de un servidor ESXi. Un reinicio normal implica un ciclo de alimentación completo que requiere la inicialización del firmware y de los dispositivos. Quick Boot optimiza la ruta de reinicio para evitar esto, ahorrando un tiempo considerable del proceso de actualización.

Understanding ESXi Quick Boot Compatibility
© 2021 VMware

Requerimientos:

  • La plataforma del manufacturero debe ser compatible
  • Todos los controladores de los dispositivos deben ser compatibles

Limitaciones en vSphere 7.0

  • El TPM esté desactivado

Limitaciones en vSphere 6.7:

  • El TPM esté desactivado
  • No hay VM con dispositivos en «passthrough» configurados.
  • No hay controladores vmklinux cargados en el ESXi

La documentación de VMware incluye un listado de manufactureros de servidores compatibles con ésta tecnología para referencia puede ver en enlace del «knowledge Base».

Para ESXi 7.0 o versiones más recientes, puede comprobar la compatibilidad del «hardware» aquí:

En éste laboratorio haré pruebas con ESXi virtual utilizando «Nested Virtualization». Es importante aclarar que este es un ambiente de prueba. Para utilizar esta tecnología en ambientes de producción es necesario activar la opción de QuickBoot desde «VMware Update Manger» o el renombrado «Lifecycle Manager». Si les interesa les dejo un vídeo aquí «Updates Installation with vSphere ESXi QuickBoot».

[root@comp-01a:~] esxcli hardware platform get
Platform Information
   UUID: 0x27 0xa8 0x30 0x42 0xa3 0xf9 0x54 0xcf 0xe2 0xa3 0x10 0x1d 0xfd 0xb8 0x21 0xd0
   Product Name: VMware7,1
   Vendor Name: VMware, Inc.
   Serial Number: VMware-42 30 a8 27 f9 a3 cf 54-e2 a3 10 1d fd b8 21 d0
   Enclosure Serial Number: None
   BIOS Asset Tag: No Asset Tag
   IPMI Supported: false
[root@comp-01a:~]

El primer paso para activar QuickBoot es validar la compatibilidad del servidor. Para esto es necesario conectarse por SSH al servidor de ESXi para ejecutar el comando <loadESXCheckCompat.py>. En mi caso el comando valido que mi plataforma es compatible.

[root@comp-01a:~] /usr/lib/vmware/loadesx/bin/loadESXCheckCompat.py
This system is compatible with Quick Boot.
[root@comp-01a:~]

Una vez validamos que el servidor es compatible podemos activar la función de QuickBoot con el comando <loadESXEnable -e>.

[root@comp-01a:~] /bin/loadESXEnable -e
INFO: LoadESX Enabled
INFO: Precheck options:
INFO:   All prechecks are enabled.
[root@comp-01a:~]

El paso final para activar la función de QuickBoot sería cargar la configuración de «QuickLaunch» utilizando el comando <loadESX.py>

[root@comp-01a:~] /usr/lib/vmware/loadesx/bin/loadESX.py
DEBUG: LoadESX scripts are up to date.
INFO: Enabling QuickLaunch kernel preload
DEBUG: Using a ramdisk at /tmp/loadESX for intermediate storage
DEBUG: SYSTEM STORAGE IS ENABLED
INFO: Target version: 7.0.2-0.0.17867351
DEBUG: Install boot module "vmware_e.v00" with size 0x2ec40
DEBUG: Install boot module "vmware_f.v00" with size 0x1e3582f
DEBUG: Install boot module "vsan.v00" with size 0x25f08a8
DEBUG: Install boot module "vsanheal.v00" with size 0x80ebe0
DEBUG: Install boot module "vsanmgmt.v00" with size 0x18957cc
DEBUG: Install boot module "xorg.v00" with size 0x358c40
DEBUG: Install boot module "gc.v00" with size 0xe077
DEBUG: Install boot module "imgdb.tgz" with size 0x192800
DEBUG: Install boot module "state.tgz" with size 0x21a00
INFO: loadESX is ready ...
INFO: Performing QuickLaunch kernel preload...
[root@comp-01a:~] 

Les incluyo unos vídeos de prueba para que puedan visualizar cuan rápida es la tecnología de QuickBoot al reiniciar el servidor.

VMware vSphere Normal Boot

VMware vSphere QuickBoot

HomeLab – Cómo desabilitar vSphere Cluster Services (vCLS)

En la versión de vSphere 7 update 1 VMware añadió una nueva capacidad para la tecnología de «Distributed Resource Scheduler» (DRS) que consiste en tres VM llamadas agentes. Las VMs agentes forman el estado de quórum del cluster y tienen la capacidad de auto corregirse. De forma que si apagas o borrar las VMs llamadas vCLS el servidor de vCenter volverá a encender o crear las VM nuevamente. Para efectos de un HomeLab esta nueva función consume recurso de CPU, Memoria y espacio de disco que aunque es mínimo no vale la pena tener una configuración que no añade nada a un ambiente de prueba y desarrollo.

En este blog estaré mostrando como eliminar esta función pero es importante recalcar de no implementar este cambio en ambientes de producción. En la siguiente imagen les muestro la cantidad mínimas de VM utilizadas en vCenter 7U1.

Nota: vSphere DRS depende del estado de los servicios vCLS a partir de vSphere 7.0 Update 1.

Como pueden ver en mi caso el clúster RegionA01-COMP esta compuesto de dos servidores ESXi donde existen tres VM tipo vCLS.

Lo primero que debemos hacer es identificar el ID de dominio del clúster que es necesario para poder añadir un valor avanzado en la configuración del vCenter. Este ID puede ser identificado de dos formas: Desde vCenter o utilizando Powershell con PowerCLI

vCenter: En esta parte puedes obtener el ID del clúster navegando a la pestaña de [Hosts and Clusters] luego seleccionamos el clúster que vamos a editar donde se puede ver que el ID esta en la dirección URL del navegador.

PowerCLI: Utilizando Powershell con el modulo de VMware.PowerCLI podemos obtener el ID del clúster al invocar el commando <Get-Cluster>. Según se muestra en el resultado del commando se puede ver el valor del Id <domain-c81> para el clúster llamado RegionA01-COMP.

PS /home/rebelinux> Get-Cluster RegionA01-COMP | FL

ParentId                        : Folder-group-h23
ParentFolder                    : host
HAEnabled                       : True
HAAdmissionControlEnabled       : True
HAFailoverLevel                 : 1
HARestartPriority               : Medium
HAIsolationResponse             : DoNothing
VMSwapfilePolicy                : WithVM
DrsEnabled                      : True
DrsMode                         : FullyAutomated
DrsAutomationLevel              : FullyAutomated
CryptoMode                      : OnDemand
CollectiveHostManagementEnabled : False
Name                            : RegionA01-COMP
ExtensionData                   : VMware.Vim.ClusterComputeResource
Id                              : ClusterComputeResource-domain-c81

PS /home/rebelinux>

Una vez tengamos el ID del clúster que en mi caso es <domain-c81> procedemos a añadir la configuracion en vCenter navegando a [Advanced Settings => Configure => Edit Settings].

En esta pantalla añadimos el valor <config.vcls.clusters.domain-domain-cID.enabled> que en mi caso sería <config.vcls.clusters.domain-c81.enabled> con el valor de «false» en el campo de «Value».

Una vez se añada el valor las VM de tipo vCLS serán eliminadas del clúster como pueden ver en la imagen ya las VM no existen.

En esta imagen se puede ver las tareas que realizo el vCenter para remover las VM vCLS

Hasta luego!!!