Definir contêineres e modos de isolamento do Windows Server e Hyper-V
O administrador do Windows Server da Contoso precisa entender como os contêineres são executados no Windows Server e como o isolamento de ambientes de tempo de execução é alcançado, principalmente o isolamento de processos e os modos de isolamento do Hyper-V. O administrador também precisa entender como executar diferentes modos de isolamento e em que circunstâncias diferentes modos de isolamento são apropriados ou necessários.
Modos de isolamento
O servidor Windows pode executar contêineres em um dos dois modos de isolamento distintos. Ambos os modos suportam processos idênticos para criar, gerenciar e executar contêineres. No entanto, há uma diferença entre o grau de isolamento fornecido para o contêiner e, consequentemente, a segurança entre o contêiner, outros contêineres e o sistema operacional host.
O Windows Server oferece suporte aos seguintes modos de isolamento de contêiner:
Isolamento do processo. Os contêineres executados no modo de isolamento de processo podem ser chamados de contêineres do Windows Server.
Isolamento do Hyper-V. Os contêineres executados no modo de isolamento do Hyper-V podem ser chamados de contêineres do Hyper-V.
Modo de isolamento de processo para contêineres do Windows Server
Considerado o modo de isolamento tradicional para contêineres do Windows Server, o modo de isolamento de processo permite que várias instâncias de contêiner sejam executadas simultaneamente em um host. Ao executar nesse modo, os contêineres compartilham o mesmo kernel entre si e com o sistema operacional host. Cada contêiner provisionado apresenta seu próprio modo de usuário para permitir que o Windows e os processos de aplicativos sejam executados isolados de outros contêineres. Quando você configura contêineres do Windows para usar o modo de isolamento de processos, os contêineres podem executar vários aplicativos em estados isolados no mesmo computador, mas não fornecem isolamento com segurança aprimorada.
Nota
O Docker é uma coleção de ferramentas, soluções e serviços baseados em nuvem de código aberto que fornecem um modelo comum para empacotar (também conhecido como containerização) o código do aplicativo em uma unidade padronizada para desenvolvimento de software. Você aprenderá mais sobre o Docker e os tempos de execução do contêiner na próxima unidade.
Quando você inicia um novo contêiner, o Docker (ou o tempo de execução do contêiner padrão) se comunica com os serviços de computação para criar um novo contêiner baseado em uma imagem. Para cada contêiner, o Docker cria um contêiner do Windows. Cada contêiner do Windows requer um conjunto de processos do sistema, que são sempre os mesmos em todos os contêineres. Em seguida, você pode usar seu próprio processo de aplicativo para diferenciar cada contêiner. Para fazer isso, você pode usar uma estrutura de aplicativo, como .NET, um componente do Windows Server, como o IIS (Serviços de Informações da Internet), ou uma estrutura ou processos de terceiros executados no contêiner.
Modo de isolamento do Hyper-V para contêineres do Hyper-V
Quando os contêineres compartilham o kernel e a memória, há a possibilidade de que, caso uma vulnerabilidade seja explorada por um invasor, um aplicativo possa sair de seu ambiente de sandbox e, inadvertidamente, fazer algo mal-intencionado. Para evitar isso, o Windows fornece um método alternativo para executar contêineres que é mais seguro chamado modo de isolamento Hyper-V, às vezes chamado de contêineres Hyper-V.
Com o modo de isolamento do Hyper-V, cada contêiner é executado dentro de uma VM altamente otimizada. A vantagem do modo de isolamento do Hyper-V é que cada contêiner efetivamente tem seu próprio kernel, o que fornece um nível aprimorado de estabilidade e segurança. A VM fornece uma camada adicional de isolamento em nível de hardware entre cada contêiner e o computador host. Quando implantado, um contêiner usando o modo de isolamento do Hyper-V é iniciado em segundos, o que é muito mais rápido do que uma VM com um sistema operacional Windows completo.
Nota
Contêineres baseados no Windows em execução no Windows Server padrão para usar o modo de isolamento de processo. Os contêineres baseados no Windows executados no Windows 10 Pro e Enterprise usam como padrão o modo de isolamento do Hyper-V.
O gráfico a seguir compara as arquiteturas de contêineres do Windows Server e do Hyper-V e seus dois modos de isolamento. O gráfico ilustra que o kernel do host do Windows é compartilhado pelo modo de usuário do host e pelo Windows Server. A execução nesse kernel compartilhado é uma máquina virtual, dentro da qual está um contêiner Hyper-V. O contêiner Hyper-V tem seu próprio kernel do Windows que não é compartilhado.
Atenção
O modo de isolamento de processo no Windows 10 destina-se apenas ao desenvolvimento e teste. A partir da atualização de outubro de 2018 do Windows 10, os usuários que executam um host Windows 10 Pro ou Enterprise podem executar um contêiner do Windows no modo de isolamento de processo. Os usuários devem solicitar diretamente o modo de isolamento do processo usando o parâmetro --isolation=process. Seu host deve estar executando o Windows 10 build 17763+ e você deve ter uma versão do Docker com Engine 18.09 ou mais recente.
Importante
Como contêiner do Windows Server e o sistema operacional host, compartilham o kernel, você deve garantir que as tags de versão do host e da imagem do contêiner correspondam, caso contrário, o contêiner pode falhar ao iniciar ou exibir um comportamento indefinido. Os contêineres do Hyper-V podem ser usados como uma alternativa para executar imagens de contêiner mais antigas em hosts mais recentes - por exemplo: uma imagem do Windows Server 2019 em um host do Windows Server 2022 só funciona com isolamento do Hyper-V.
Como especificar um modo de isolamento usando um comando do Docker
Discutiremos mais sobre os tempos de execução do Docker e do contêiner na próxima unidade, no entanto, neste contexto, só precisamos estar cientes de que o Docker fornece um conjunto de comandos que podemos usar para criar contêineres. Ao criar um contêiner usando o Docker, você pode especificar o modo de isolamento usando o parâmetro --isolation e o modo de isolamento de processo ou o modo de isolamento do Hyper-V:
- Crie um contêiner usando o modo de isolamento de processo usando este comando:
docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd
- Crie um contêiner usando o modo de isolamento do Hyper-V usando este comando:
docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd`
Quando usar contêineres do Hyper-V em contêineres do Windows Server
Os fatores a serem considerados ao escolher entre usar contêineres Hyper-V e contêineres do Windows Server são confiança, segurança e isolamento. Considere o uso de contêineres Hyper-V quando:
Uma aplicação requer um kernel Windows dedicado.
A confiança do aplicativo é necessária porque:
O sistema operacional host pode não confiar totalmente no aplicativo em execução nele.
Os aplicativos executados lado a lado no mesmo host podem não confiar uns nos outros.
É necessária uma maior segurança.
É necessário um maior isolamento.
Alguns cenários que podem orientar algumas dessas decisões incluem:
Provedores de nuvem. Quando os recursos de hardware são compartilhados e utilizados, todos os fatores mencionados anteriormente podem se aplicar a cargas de trabalho executadas de clientes diferentes.
Políticas de conformidade. Talvez seja necessário aderir a políticas de segurança, dados ou outras que exijam isolamento e maior segurança em suas cargas de trabalho e aplicativos em execução.
Ambientes de tempo de execução (também conhecidos como ambientes de desenvolvimento, teste ou produção). Você pode não precisar de isolamento adicional em ambientes de desenvolvimento ou teste, mas pode fazê-lo em cenários de produção. Você também pode ter um aplicativo distribuído em um modelo de microsserviços. Cargas de trabalho de contêiner diferentes na arquitetura de aplicativos de microsserviços podem ter necessidades de isolamento diferentes que você pode precisar considerar.
Atenção
Nem todos os serviços de orquestração, como o Kubernetes, suportam contêineres Hyper-V. Quando os contêineres do Hyper-V não são suportados, mas é necessário um maior isolamento, talvez seja necessário recorrer a uma VM completa para executar um conjunto de contêineres que podem ser executados lado a lado.