Prepara un clúster de Windows para la implementación
En esta página, se describe cómo preparar tu clúster de Windows para la implementación.
Antes de comenzar
- Completa la migración y obtén los artefactos generados.
- Crea el clúster en el que deseas implementar tu carga de trabajo. Para obtener más información, consulta Cómo crear un clúster de Windows.
- Configura
kubectl
y conéctate al clúster.
Elige y configura tu registro de Docker
Como parte de la implementación, compilas y subes la imagen de Docker de tu contenedor a un registro de Docker.
En el registro de Docker, puedes elegir usar lo siguiente:
Artifact Registry
Cualquier registro de Docker que admita la autenticación básica
La solución recomendada es usar Artifact Registry en el mismo proyecto del clúster de implementación. GKE puede acceder al registro de forma predeterminada. Para obtener más información, consulta los requisitos para la integración con GKE.
Si deseas usar un registro privado de Docker, obtén información para configurarlo.
Configura las cargas de trabajo migradas para usar gMSA
Las cargas de trabajo de la aplicación IIS de Windows suelen estar unidas a Active Directory (AD) y operan con identidades de dominio. Cuando se migran estas VMs a contenedores, los contenedores en sí no se unen al dominio, sino que sus nodos host del clúster de Kubernetes pueden unirse a un dominio.
Cuando implementas tus contenedores migrados en un clúster, puedes usar una cuenta de servicio administrada grupal (gMSA). Usa gMSA para ejecutar el contenedor dentro de una identidad de cuenta de servicio específica. Adjunta una gMSA en el clúster de Kubernetes como parte de la configuración del pod, en lugar de hacerlo como parte de una configuración de identidad estática dentro de la imagen del contenedor.
Migrate to Containers te ayuda en el proceso de transformar tus cargas de trabajo. Migrate to Containers descubre automáticamente la configuración de los grupos de aplicaciones de IIS y agrega recomendaciones al plan de migración generado. Luego, puedes evaluar estas recomendaciones y modificarlas para tu entorno y requisitos específicos.
Si Migrate to Containers determina que la configuración de un grupo de aplicaciones no requiere una gMSA, se mantiene la configuración del grupo de aplicaciones original. Por ejemplo, cuando usa un tipo de cuenta integrada como ApplicationPoolIdentity
, NetworkService
, LocalSystem
o LocalService
.
Para admitir gMSA en un contenedor de Windows migrado, debes hacer lo siguiente:
Edita el plan de migración con el fin de establecer las propiedades necesarias para configurar el contenedor migrado y así poder usar una gMSA.
Configura el clúster de destino que aloja el contenedor implementado.
Configura un clúster de destino para admitir gMSA
Adjunta una gMSA en el clúster de Kubernetes como parte de la configuración del pod, en lugar de hacerlo como parte de una configuración de identidad estática dentro de la imagen del contenedor.
Para configurar un clúster que aloja el contenedor migrado de Windows para que admita gMSA, debes haber hecho lo siguiente:
Para obtener más información, consulta lo siguiente:
- Crea gMSA para contenedores de Windows.
- Crea una cuenta de servicio administrada de grupo
- Usa gMSA (documentación de Google Cloud).
- Configura tu app para que use una gMSA (documentación de Microsoft).
Implementa un contenedor al almacenar certificados SSL como secretos de Kubernetes
Te recomendamos que uses Cloud Load Balancing, Ingress o Cloud Service Mesh como frontend de HTTPS para proteger el acceso externo a tu contenedor implementado. Esta opción te permite proteger la comunicación externa sin incluir certificados dentro del clúster. Para obtener más información, consulta Personaliza un plan de migración.
También puedes almacenar certificados de capa de conexión segura (SSL) como secretos de Kubernetes y montarlos en el tiempo de ejecución dentro del contenedor.
Para usar Secrets de Kubernetes, sigue estos pasos:
Crea un archivo PFX con el certificado y la contraseña.
Crea un yaml de configuración que defina el acceso al sitio:
sites: - sitename: "sitename" sslport: 443 pfxpath: c:\sslconfig\pfx password: "password" thumbprint: "3e858d0551fc0536f52d411dad92b680a4fad4da"
Aquí:
sitename
especifica el nombre del sitio configurado para usar SSL. La propiedadsites
puede contener varias entradassitename
.sslport
especifica el puerto que se escuchará en las conexiones SSL (por lo general, 443).pfxpath
especifica la ruta al archivo PFX. Configúralo como parte delvolumeMounts
de la implementación del Pod.password
especifica la contraseña del archivo PFX.thumbprint
especifica la huella digital SHA-1 del archivo PFX que puede recuperarse con el comando de PowerShell:Get-PfxCertificate -FilePath "path to pfx"
O visualizar en el administrador de certificados de Windows.
Crea el secreto de Kubernetes:
kubectl create secret generic secret-name --from-file=pfx=path-to-pfx --from-file=config=path-to-config
Crea el volumen y la activación del volumen en la implementación de la imagen:
apiVersion: v1 kind: Pod metadata: name: iis-pod labels: app: iis-server-simple spec: nodeSelector: kubernetes.io/os: windows containers: - name: iis-server image: your-image-url volumeMounts: - name: ssl-secret mountPath: c:\sslconfig env: - name: M4A_CERT_YAML value: c:\sslconfig\config volumes: - name: ssl-secret secret: secretName: secret-name
Aquí:
mountPath
es la misma ruta que especificapfxpath
en el archivo de configuración que creaste en el paso 2.M4A_CERT_YAML
es una variable de entorno establecida en la ruta completa del archivo de configuración YAML que creaste en el paso 2.secret-name
es el nombre del secreto que creaste en el paso 3.
Configura SSL
No se recomienda almacenar claves privadas de certificados SSL dentro de una imagen de contenedor. Esto se debe a que cualquier persona que lea la imagen pueda acceder a ellas. Migrate to Containers proporciona varias formas de controlar la SSL para Windows.
Usa un certificado autofirmado generado de forma automática
De forma predeterminada, a un contenedor de Windows con una vinculación HTTPS se le asigna un certificado autofirmado generado de forma automática que se genera cuando se inicializa el contenedor de Docker. Esta configuración te permite probar la carga de trabajo migrada, pero no se puede usar en un entorno de producción. El certificado es autofirmado y se vuelve a generar cada vez que se ejecuta el contenedor.
Recomendación: Usa Cloud Load Balancing, Ingress o Cloud Service Mesh
Puedes personalizar las vinculaciones en el plan de migración para usar HTTP. Luego, usa Cloud Load Balancing, Ingress o Cloud Service Mesh como un frontend HTTPS para proteger el acceso externo. Esta opción te permite proteger la comunicación externa sin incluir certificados dentro del clúster.
Para personalizar la vinculación, edita la definición de
site
en el plan de migración que representa la migración con el fin de establecerprotocol
enhttp
:sites: site: - applications: - path: / virtualdirectories: - path: / physicalpath: '%SystemDrive%\inetpub\wwwroot' bindings: - port: 8080 protocol: http name: Default Web Site
A continuación, puedes reenviar solicitudes del frontend HTTPS a la ruta HTTP y al puerto de la carga de trabajo de Windows.
Almacena certificados SSL como Secrets de Kubernetes
Se recomienda usar Cloud Load Balancing, Ingress o Cloud Service Mesh como frontend HTTPS para proteger el acceso externo. Sin embargo, también puedes almacenar certificados SSL como secretos de Kubernetes y activarlos en el tiempo de ejecución en el contenedor.
Para usar certificados SSL almacenados como secretos de Kubernetes, debes editar la imagen de implementación del contenedor. Para obtener más información, consulta Implementa un contenedor al almacenar certificados SSL como secretos de Kubernetes.
Configura el registro en Cloud Logging
Migrate to Containers usa la herramienta LogMonitor para extraer registros de un contenedor de Windows y reenviarlos al clúster de GKE. Luego, estos registros se reenvían de forma automática a Cloud Logging, el cual proporciona un paquete de herramientas para que supervises tus contenedores.
De forma predeterminada, Migrate to Containers habilita el registro de IIS para supervisar los registros de IIS, y también reenvía los registros de eventos de la aplicación y el sistema a Cloud Logging.
Configura el registro
Al expandir el archivo artifacts.zip
generado, se crean varios directorios, lo que incluye el directorio m4a
. El directorio contiene una carpeta para cada imagen.
En el directorio m4a
, se incluye el archivo LogMonitorConfig.json
que puedes editar para controlar el registro.
Para obtener más información sobre cómo editar LogMonitorConfig.json
, consulta Authoring a Config File (Crea un archivo de configuración).
Configurar LCA
Algunas aplicaciones IIS requieren que otorgues permisos de listas de control de acceso (LCA) específicos en archivos y carpetas para que las aplicaciones funcionen de forma correcta. De forma automática, Migrate to Containers analiza todas las aplicaciones IIS migradas y agrega todos los permisos específicos definidos en la VM de origen que se aplican a las cuentas IIS (la cuenta IUSR
y el grupo IIS_IUSRS
), además de aplicarlos a los archivos y los directorios copiados en la imagen de contenedor generada.
Debido a que las imágenes de contenedor de Windows no admiten la configuración de las LCA como parte del comando COPY
de Docker, las LCA se configuran en una secuencia de comandos llamada set_acls.bat
.
De forma automática, Migrate to Containers crea set_acls.bat
en el directorio de la imagen activada para la aplicación de windows específica.
Luego, Migrate to Containers llama a set_acls.bat
cuando ejecutas el comando docker build
.
Edita set_acls.bat
para agregar o quitar permisos personalizados, o editar permisos que no están relacionados con usuarios IIS específicos y que, por lo tanto, Migrate to Containers no detectó.
La secuencia de comandos usa la herramienta integrada icacls de Windows para establecer permisos.
Acerca de la caché de ensambles global de .NET
Migrate to Containers analiza la imagen de origen de la caché global de ensambles (GAC) de .NET para recursos de .NET instalados en la máquina de origen y que no están disponibles como parte de las imágenes oficiales. Cualquier DLL descubierto se copia en el contexto de Docker y se instala como parte de la compilación de la imagen de destino mediante una secuencia de comandos de utilidad install_gac.ps1
.
Todos los ensambles de .NET se copian en el contexto de Docker en el directorio m4a\gac
. Para quitar los ensambles de la imagen, bórralos del directorio m4a\gac
.
Registro de DLL del objeto COM
Los DLLs que exponen objetos COM se analizan y registran automáticamente. Durante la fase de extracción, los archivos copiados se analizan en busca de DLL que se registran como objetos COM, que luego se registran en el contenedor.
Este proceso se realiza sin entrada del usuario. Sin embargo, puedes influir en este proceso si agregas más DLLs para copiar. En caso de ser necesario, se verifican y registran estos DLL.