Configurando Cloud-Init
Cenários
Você precisa configurar Cloud-Init depois que ele for instalado.
Pré-requisitos
- Cloud-Init foi instalado.
- Um EIP foi vinculado ao ECS.
- Você fez login no ECS.
- O modo de obtenção do endereço IP do ECS é DHCP.
Procedimento
São necessárias as seguintes operações:
- Configure o Cloud-Init.
Para mais detalhes, consulte Configurar Cloud-Init.
- Verifique se Cloud-Init está configurado com êxito.
Para mais detalhes, consulte Verifique a configuração do Cloud-Init.
Configurar Cloud-Init
- Configure as permissões de usuário para efetuar login no ECS. Se você selecionar o usuário root, habilite as permissões SSH do usuário root e habilite o login remoto no ECS usando uma senha.
- Se você injetar uma senha, use-a para fazer login no ECS remotamente usando SSH ou noVNC.
- Se você injetar uma chave privada, use-a para fazer login no ECS remotamente usando SSH.
Execute o seguinte comando para abrir o arquivo /etc/cloud/cloud.cfg usando o editor vi:
vi /etc/cloud/cloud.cfg
- (Opcional) Em /etc/cloud/cloud.cfg, defina apply_network_config como false.
Esta etapa é apenas para o Cloud-Init 18.3 ou posterior.
Figura 1 Exemplo de configuração
- Ative o login remoto usando a senha do usuário root e ative as permissões SSH do usuário root. Tome o CentOS 6.7 como um exemplo. Se o valor de disable_root no arquivo de configuração for 1, as permissões serão desabilitadas. Se o valor for 0, as permissões serão ativadas. (Em alguns SO, o valor true indica que as permissões estão desativadas e false indica que as permissões estão ativadas). Defina disable_root como 0, ssh_pwauth como 1, e lock_passwd como false (indicando que as senhas do usuário não estão bloqueadas).
users: - name: root lock_passwd: False disable_root: 0 ssh_pwauth: 1
- Habilite a atualização do nome do host. Não comente ou exclua a instrução -update_hostname.
cloud_init_modules: - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups - ssh
- Execute o seguinte comando para abrir o arquivo /etc/ssh/sshd_config usando o editor vi:
vi /etc/ssh/sshd_config
- Altere o valor de PasswordAuthentication no arquivo sshd_config para yes.
Para SUSE e openSUSE, altere os valores dos seguintes parâmetros no arquivo sshd_config para yes:
- PasswordAuthentication
- ChallengeResponseAuthentication
- Exclua o usuário linux e o diretório /home/linux do modelo de imagem.
userdel linux
rm -fr /home/linux
- Permita que o agente acesse a fonte de dados do OpenStack do IaaS.
Adicione as seguintes informações à última linha de /etc/cloud/cloud.cfg:
datasource_list: [ OpenStack ] datasource: OpenStack: metadata_urls: ['http://169.254.169.254'] max_wait: 120 timeout: 5
- Você pode decidir se deseja definir max_wait e timeout. Os valores de max_wait e timeout na saída do comando anterior são apenas para referência.
- Se a versão do SO for anterior ao Debian 8 ou CentOS 5, você não pode habilitar o agente para acessar a fonte de dados do OpenStack IaaS.
- A rota zeroconf padrão deve ser desativada para ECSs CentOS e EulerOS para acesso preciso à fonte de dados OpenStack IaaS.
- Evite que o Cloud-Init domine a rede em /etc/cloud/cloud.cfg.
Se a versão do Cloud-Init for 0.7.9 ou posterior, adicione o seguinte conteúdo ao /etc/cloud/cloud.cfg:
network: config: disabled
O conteúdo adicionado deve estar no formato YAML.
Figura 2 Impedindo que o Cloud-Init assuma a rede
- Adicione o seguinte conteúdo ao /etc/cloud/cloud.cfg:
manage_etc_hosts: localhost
Isso impede que o sistema permaneça no estado Waiting for cloudResetPwdAgent por um longo período de tempo durante a inicialização ECS.
Figura 3 Adicionando manage_etc_hosts: localhost
- Modifique o arquivo de configuração cloud_init_modules.
Mova o ssh de baixo para cima para acelerar o login do SSH.
Figura 4 Acelerando o login SSH para o ECS
- Modifique a configuração para que o nome do host do ECS criado a partir da imagem não contenha o sufixo .novalocale possa conter um ponto (.).
- Execute o seguinte comando para modificar o arquivo __init__.py:
vi /usr/lib/python2.7/site-packages/cloudinit/sources/__init__.py
Pressione i para entrar no modo de edição. Procure por toks. As seguintes informações são exibidas:
if toks: toks = str(toks).split('.') else: toks = ["ip-%s" % lhost.replace(".", "-")] else: toks = lhost.split(".novalocal") if len(toks) > 1: hostname = toks[0] #domain = '.'.join(toks[1:]) else: hostname = toks[0] if fqdn and domain != defdomain: return "%s.%s" % (hostname, domain) else: return hostname
Após a conclusão da modificação, pressione Esc para sair do modo de edição e digite :wq! para salvar as configurações e sair.
Figura 5 Modificando o arquivo __init__.py
- Execute o seguinte comando para alternar para a pasta cloudinit/sources:
cd /usr/lib/python2.7/site-packages/cloudinit/sources/
- Execute os seguintes comandos para excluir o arquivo __init__.pyc e o arquivo __init__.pyo otimizado:
rm -rf __init__.pyc
rm -rf __init__.pyo
- Execute os seguintes comandos para limpar os logs:
rm -rf /var/log/cloud-init*
- Execute o seguinte comando para modificar o arquivo __init__.py:
- Execute o seguinte comando para editar o arquivo /etc/cloud/cloud.cfg.d/05_logging.cfg para usar o cloudLogHandler para processar logs:
vim /etc/cloud/cloud.cfg.d/05_logging.cfg
Figura 6 Configurando o valor do parâmetro para cloudLogHandler
Verifique a configuração do Cloud-Init
Execute o seguinte comando para verificar se o Cloud-Init foi configurado corretamente:
cloud-init init --local
(Opcional) Execute o seguinte comando para definir o período de validade da senha para o máximo:
chage -M 99999 $user_name
user_name é um usuário do sistema, como o usuário root.
É aconselhável definir o período de validade da senha para 99999.