# aws-bare-metal-kvm
O propósito desse repositório é mostrar formas de virtualização utilizando KVM em um servidor bare metal na AWS
Esse tipo de instâncias EC2 oferecem o melhor dos dois mundos, permitindo que o sistema operacional seja executado diretamente no hardware subjacente, ao mesmo tempo que fornece acesso a todos os benefícios da nuvem.
[Amazon EC2 Bare Metal Instances](https://aws.amazon.com/blogs/aws/new-amazon-ec2-bare-metal-instances-with-direct-access-to-hardware/)
# Sumário
- [Pré-requisitos](#pr--requisitos)
- [Criando nossa Amazon EC2](#criando-nossa-amazon-ec2)
- [Instalando o KVM](#instalando-o-kvm)
- [Criando a primeira VM Ubuntu](#criando-a-primeira-vm-ubuntu)
- [Definindo um IP estático utilizando a rede Default Nat-based networking](#definindo-um-ip-est-tico-utilizando-a-rede-default-nat-based-networking)
* [Definindo o IP estático para a nossa VM](#definindo-o-ip-est-tico-para-a-nossa-vm)
- [Expondo nossa VM para acesso externo via IP Tables](#expondo-nossa-vm-para-acesso-externo-via-ip-tables)
- [Criando nosso primeiro servidor Windows](#criando-nosso-primeiro-servidor-windows)
* [Pré-requisitos](#pr--requisitos-1)
* [Criando VM Windows](#criando-vm-windows)
- [Referências](#refer-ncias)
# Pré-requisitos
- Amazon VPC configurada com no minínimo uma subnet pública
# Criando nossa Amazon EC2
Para essa demonstração utilizaremos a EC2 do tipo **i3.metal**:
> [i3.metal](https://aws.amazon.com/pt/ec2/instance-types/i3/)
Logue no console da AWS e selecione EC2 > instances > Launch Instance
>Obs: Utilizaremos o Ubuntu 18.04 como sistema operacional
Selecione a instância do tipo i3.large > Configure Instance Details
Selecione a VPC onde você quer fazer o lançamento da sua instância e também a subnet
>Obs: Será necessário realizar SSH na instância portanto, realize o lançamento em uma subnet pública ou possua mecânismos para acessar sua instância (VPN/Bastion)
Selecione a quantidade de GB para o volume Root (Utilizaremos essa máquina virtual para realizar virtualização portanto defina uma quantidade adequada)
Defina a Tag Name para a sua EC2
> Obs: Utilizarei o nome kvm-virtualization-lab
Clique em **Configure Security Group**
Crie um Security Group específico para a sua EC2 ou seleciona um já existente.
>Obs: Lembre-se de verificar as portas necessárias no Security Group para realizar o acesso remoto as nossas máquinas virtualizadas
Clique em **Review and Launch**
Valide as informações e clique em **Launch**
Crie uma chave privada .pem caso você não possua ou utilize uma já existente
Clique em **Launch Instance**
Aguarde alguns minutos para que sua EC2 esteja pronta para ser acessada
# Instalando o KVM
Neste repositório existem alguns scripts que nos ajudarão a realizar todos as etapas de configuração.
```bash
ssh -i bare-metal-demo.pem ubuntu@XXX.XXX.XXX.XXX
```
Realize SSH no servidor e siga os passos a seguir:
```bash
sudo su -
```
```bash
cd /opt/ && apt-get update && apt-get install git -y
```
```
git clone https://github.com/BRCentralSA/aws-bare-metal-kvm.git
```
Realize a instalacão do KVM e dos componentes necessários
```
cd aws-bare-metal-kvm && ./install-kvm-ubuntu.sh
```
# Criando a primeira VM Ubuntu
Nesta demonstração iremos criar um servidor Ubuntu 18.04 com 1GB de RAM e 2 vCpu
```
./create-ubuntu-vm.sh
```
Aguarde a finalização da criação, pode levar algum tempo, após finalizar será necessário realizar o login novamente no servidor
Uma tela de Logon será mostrada, utilize o usuário e senha default.
**User:** ubuntu
**Pass:** ubuntu
Volte para o Host OS e liste as VM'ms
```bash
sudo virsh -c qemu:///system list
```
# Definindo um IP estático utilizando a rede Default Nat-based networking
Iremos utilizar a rede **default** criada no processo de instalação do KVM
Utilizando o **virsh**
Você pode criar, excluir, executar, parar e gerenciar suas máquinas virtuais a partir da linha de comando, usando uma ferramenta chamada virsh. Virsh é particularmente útil para administradores Linux avançados, interessados em scripts ou automatizar alguns aspectos do gerenciamento de suas máquinas virtuais
```bash
virsh net-list
```
```bash
virsh net-info default
```
A rede baseada em NAT é comumente fornecida e habilitada como padrão pela maioria das principais distribuições de Linux que suportam virtualização KVM.
Esta configuração de rede usa uma ponte Linux em combinação com Network Address Translation (NAT) para permitir que um sistema operacional convidado obtenha conectividade de saída, independentemente do tipo de rede (com fio, sem fio, dial-up e assim por diante) usado no host KVM sem exigindo qualquer configuração de administrador específica.
## Definindo o IP estático para a nossa VM
Execute o script define-static-networking-kvm.sh
```bash
./define-static-networking-kvm.sh
```
Coloque o nome da máquina virtual que você quer definir o IP, no nosso caso é ubuntu-01
Copie a linha que começa com ** Obs: Não esqueça de liberar o Security Group na nossa EC2 para a porta 2222
```bash
ssh ubuntu@EC2_IP -p 2222
```
O resultado deve ser o mesmo de realizar o login de dentro do Host OS
# Referências
Networking with KVM
https://aboullaite.me/kvm-qemo-forward-ports-with-iptables/
Setup KVM on Ubuntu 18.04
https://blog.programster.org/set-up-ubuntu-18-04-KVM-server
https://ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/
Helper Script to create VM
https://blog.programster.org/ubuntu-18-04-getting-started-with-kvm-using-php-helper-script
Forwarding connection
https://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections
Libvirt Default Networking
https://wiki.libvirt.org/page/Networking