Tales from a Solution Architect vMotioning from Solution Engineering to Solution Architects

Autoscaling en VMware - Despliegue del servidor DSC

Como siguiente paso, vamos a proceder a desplegar una VM que alojará nuestro servidor DSC en modo pull, donde iremos alojando los ficheros de configuración (mof) de las máquinas de nuestro dominio. La desplegaremos en el direccionamiento asignado al cliente Cestas Asociadas (192.168.30.0/24), conjuntamente con el Domain Controller.

Tras haberla desplegado, procederemos a instalar la característica (feature) de Windows PowerShell Desired State Configuration, tanto por la GUI como por Powershell. Si lo hacemos por powershell hay que añadir la consola de IIS a la instalación

Add-WindowsFeature Dsc-Service, Web-Mgmt-Console

Tras esto procedemos a instalar el módulo de Powershell xPSDesiredStateConfiguration descargándolo de https://gallery.technet.microsoft.com/xPSDesiredStateConfiguratio-417dc71d y descomprimiéndolo en %programfiles%\WindowsPowerShell\modules

Habilitamos el listener de WinRM (Windows Remote Management)

winrm quickconfig

Para darle más seguridad al sistema, vamos a proceder a configurar el servidor DSC en modo HTTPS. (Paranoia mode on)

Instalaremos un certificado emitido para el servidor dsc-server.test.local, que previamente habremos solicitado a la CA del dominio, con el friendly name de dsc webserver

Nos apuntaremos el Thumbprint del certificado, que conseguiremos de la siguiente forma:

Get-ChildItem -Path cert: -Recurse | Where { $_.FriendlyName contains dsc* } | select Subject, FriendlyName, Thumbprint | Format-List

Tras esto crearemos una configuración DSC para el propio servidor DSC, que nos configurará todo lo necesario.

configuration NewPullServer
{
    param
    (
        [string[]]$ComputerName = 'localhost'
    )
    Import-DSCResource -ModuleName xPSDesiredStateConfiguration
    Node $ComputerName
    {
        WindowsFeature DSCServiceFeature
        {
            Ensure = "Present"
            Name   = "DSC-Service"
        }
        xDscWebService PSDSCPullServer
        {
            Ensure                  = "Present"
            EndpointName            = "PSDSCPullServer"
            Port                    = 8080
            PhysicalPath            = "$env:SystemDrive\inetpub\wwwroot\PSDSCPullServer"
            CertificateThumbPrint   = "E493BC34B3E0AA33A482FCB3E159670AE585A984"
            ModulePath              = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Modules"
            ConfigurationPath       = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration"
            State                   = "Started"
            DependsOn               = "[WindowsFeature]DSCServiceFeature"
        }
        xDscWebService PSDSCComplianceServer
        {
            Ensure                  = "Present"
            EndpointName            = "PSDSCComplianceServer"
            Port                    = 9080
            PhysicalPath            = "$env:SystemDrive\inetpub\wwwroot\PSDSCComplianceServer"
            CertificateThumbPrint   = "E493BC34B3E0AA33A482FCB3E159670AE585A984"
            State                   = "Started"
            IsComplianceServer      = $true
            DependsOn               = ("[WindowsFeature]DSCServiceFeature","[xDSCWebService]PSDSCPullServer")
        }
    }
}

NewPullServer ComputerName dsc.test.local

Esto nos generará una nueva carpeta, llamada NewPullServer donde contendrá el .mof del servidor dsc.test.local Tras intentar ejecutarlo, con Start-DscConfiguration .\NewPullServer -Wait os dará un fallo, de este estilo: ``` PowerShell provider MSFT_xDSCWebService failed to execute Set-TargetResource functionality with error message: ERROR: C:\Windows\System32\WindowsPowerShell\v1.0\modules\PSDesiredStateConfiguration\PullServer\es\Microsoft.Powershell.Desir edStateConfiguration.Service.Resources.dll does not exist + CategoryInfo : InvalidOperation: (:) [], CimException + FullyQualifiedErrorId : ProviderOperationExecutionFailure + PSComputerName : dsc.test.local

The SendConfigurationApply function did not succeed. + CategoryInfo : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException + FullyQualifiedErrorId : MI RESULT 1 + PSComputerName : dsc.test.local ``` Se soluciona copiando y renombrando C:\Windows\System32\WindowsPowerShell\v1.0\modules\PSDesiredStateConfiguration\PullServer\en\ a C:\Windows\System32\WindowsPowerShell\v1.0\modules\PSDesiredStateConfiguration\PullServer\es\

Tras esto la ejecución de la configuración se completará correctamente. Desde el IIS Manager podremos confirmar que los bindings del servidor DSC se han creado en el protocolo HTTPS.

Autoscaling en VMware - Diseño Parte 2 - Decisiones

En este post detallaré las decisiones que tomo en cuanto al diseño y detallo un poco más la infraestructura a usar.

En cuanto a la infraestructura a usar, lo haré sobre mi homelab, con 2 ESX (1 de gestión y 1 de "producción"), 1 NAS Synology DS412+ y un Switch Cisco SG300-10. Provisiono una red 192.168.30.0/24 que será la red principal del escenario. El default gateway será el propio Cisco, con un SVI (Switch Virtual Interface) en la Vlan30.

La configuración pertinente del Cisco en cuanto al SVI es esta

interface vlan 30
 name VM-Network-to-NUC-and-ESX
 ip address 192.168.30.1 255.255.255.0
 ip dhcp relay enable
!

Como veis, he activado el dhcp relay, ya que tengo un DHCP funcionando sobre Windows 2012R2 en mi ESX de Management, y será el encargado de repartir las direcciones en el scope de la Vlan30. La configuración es la siguiente:

ip dhcp relay address 192.168.1.252
ip dhcp relay enable
ip dhcp information option

En cuanto a nivel de software:

  • En la capa de hypervisor se usará VMware vSphere 5.5U2
  • Se desplegará la appliance vCenter Orchestrator (ya que uso el vCenter Server Appliance como vCenter del homelab) para crear los flows que hará el kick-off del despliegue de una VM
  • Usaré chef en hosted-mode, ya que de momento descarto desplegar un servidor en mi homelab porque el número de máquinas a gestionar va a ser muy reducido. Con este chef se gestionará la parte de VMware y seguramente a posteriori se realice bootstrapping de las VMs del dominio.
  • Se creará una customization para el template de las máquinas miembros del dominio test.local
  • Usaré Windows 2012R2, con una template preparada con un poco del conocimiento propio y mucho del conocimiento de Google :)
  • Usaré la versión Standard de SQL Server 2014
  • Desplegaré una VM que hará de Domain Controller del dominio test.local en la IP 192.168.30.3 (estática) que tendrá el rol añadido de CA interna del dominio
  • Se usará un servidor dedicado para el DSC configurado en modo HTTPS

Autoscaling en VMware - Diseño Parte 1

La compañía Cestas Asociadas ha requerido de los servicios de la empresa donde trabajo (Darknet Inc.) para diseñar su plataforma de Producción, usando exclusivamente tecnologías Microsoft. No le tienen miedo al Cloud ni a los arquitectos locos como yo, así que deciden arriesgarse.

Se recogen los siguientes requerimientos:

  • Plataforma web e-commerce de venta de cestas
  • Usarán tecnologías Microsoft (IIS, SQL Server)
  • La solución debe ser fácilmente escalable
  • La solución debe ser compatible con su actual Active Directory
  • Requieren que la plataforma sea autoescalable

Limitaciones

  • Necesitan que la plataforma (pagan en modalidad IaaS) sea cost-effective
  • No quieren extender su Active Directory hacia la nube

Hipótesis

  • Los desarrolladores son grandes expertos que consiguen que el código no tenga defectos que afecten negativamente al rendimiento
  • El cliente proveerá de la conectividad necesaria en el DataCenter

Riesgos

  • La falta de coordinación con los developers y SysAdmins del cliente pueden poner en riesgo el proyecto

Al ser un diseño completamente ficticio, basado lejanamente en experiencias propias, estos factores los iré ampliando según se me vayan ocurriendo :)

Autoscaling en VMware (proyecto de aprendizaje)

Como una nueva iniciativa de aprendizaje, desarrollo profesional y personal, he decidido embarcarme en un proyecto bastante ambicioso, por el que montaré una infraestructura virtual sobre mi laboratorio, como Proof Of Concept, que usando tecnologías VMware, Powershell DSC y Chef dará el mismo servicio de AutoScaling que Amazon.

Desarrollaré todo el proyecto, desde la fase de diseño hasta la implementación y liberaré casi toda (si no toda) la documentación que genere.

Y con esto me meto en un follón que me tendrá ocupado bastante tiempo libre y en el que aprenderé en profundidad las siguientes cosas:

  • VMware vCenter Orchestrator
  • Powershell Desired State Configuration
  • Chef

Todo enfocado hacia el SDDC del futuro y de los sistemas realmente cloud :)

Como montar un Exchange 2013 en un Resource Forest - Parte 2

En este caso seguiremos con el despliegue de Exchange 2013 en la VM que hemos desplegado con Windows 2012R2.

Instalaremos los pre-requisitos necesarios

Add-WindowsFeature Web-Asp-Net,Web-Client-Auth,Web-Dir-Browsing,Web-Http-Errors,Web-Http-Logging,Web-Http-Redirect,Web-Lgcy-Mgmt-Console,Web-Metabase,Web-WMI,Web-Net-Ext,Web-Basic-Auth,Web-Digest-Auth,Web-Dyn-Compression,Web-Stat-Compression,Web-Windows-Auth,Web-ISAPI-Filter,Web-Request-Monitor,Web-Static-Content,Web-Http-Tracing,WAS-Process-Model,Web-Mgmt-Console,Desktop-Experience,NET-Framework-Core,RPC-over-HTTP-Proxy,Telnet-Client,RSAT-Clustering,RSAT-ADDS,GPMC,Failover-Clustering,RSAT-Clustering-CmdInterface Restart

Instalaremos los roles de CAS y de Mailbox en el servidor (lo siento, pero no tengo capturas de pantalla de esto, estaba fuera mientras se hacía :) ) Una vez instalado y reiniciado, empezaremos a meternos en materia.

En el AD del dominio cliente.local crearemos la OU de UsuariosExchange y un conjunto de usuarios de origen.

Import-Module ActiveDirectory
New-ADOrganizationalUnit -Name UsuariosExchange -Path 'dc=cliente,dc=local' -ProtectedFromAccidentalDeletion:$false

$password="P@ssw0rd!"
1..100 | Foreach-Object {
$r = Get-Random -Minimum 0 -Maximum 10
New-ADUser -Name "newtestuser$_" -Path "ou=UsuariosExchange,dc=cliente,dc=local" -Enabled $True -AccountPassword (ConvertTo-SecureString $password -AsPlainText -force) -PasswordNeverExpires $True}

Tras esto podremos comprobar en el DC que los usuarios existen User Creation

En el Exchange entramos en la EAC (https://localhost/ecp/) con las credenciales de test\Administrator, configuraremos la zona horaria (esto solo has de hacerlo la primera vez que entras) En el listado de Destinatarios (Mailboxes en inglés), crearemos un nuevo Buzón vinculado ("linked mailbox") User Creation

Seleccionamos el Bosque ("Forest") de confianza. User Creation

Al ser una confianza en un único sentido, necesitareis introducir las credenciales de una cuenta con permisos del dominio cliente.local (yo he usado Administrator). User Creation

Seleccionaremos la cuenta que queremos linkar User Creation User Creation

En el siguiente paso definiremos cual es la cuenta del Resource Forest que vamos a crear. User Creation Nota: Las cuentas que se creen se van a crear en la OU que tú les digas quedando desactivadas, te recomiendo las dejes por separado para no liar las cuentas :)

Y con esto se termina! Ya tenéis las cuentas linkadas entre los dominios Resource y Account, puedes verificarlo en el listado de Buzones User Creation

Desde un equipo del otro dominio accedes a la URL del ECP (https://192.168.30.30/owa/) y accedemos con las credenciales de cliente\newtestuser1. User Creation

Tras esto, habréis accedido al buzón del usuario. ¿Fácil no? Pues esto solo es una pequeña muestra de lo que puedes conseguir. Próximamente haremos cosas más avanzadas con el Exchange 2013