Configuración de Cloud-Init
Escenarios
Es necesario configurar Cloud-Init después de que esté instalado.
Prerrequisitos
- Se ha instalado Cloud-Init.
- Una EIP ha sido vinculada al ECS.
- Ha iniciado sesión en ECS.
- El modo de obtención de la dirección IP del ECS es DHCP.
Procedimiento
Se requieren las siguientes operaciones:
- Configurar Cloud-Init.
Para obtener más información, véase Configurar Cloud-Init.
- Revise si se configuró correctamente Cloud-Init.
Para obtener más información, véase Comprobar la configuración de Cloud-Init.
Configurar Cloud-Init
- Configurar los permisos de usuario para iniciar sesión en ECS. Si selecciona usuario root, habilite los permisos SSH del usuario root y habilite el inicio de sesión remoto en el ECS mediante una contraseña.
- Si introduce una contraseña, utilícela para iniciar sesión en el ECS de forma remota mediante SSH o noVNC.
- Si inyecta una clave, utilícela para iniciar sesión en el ECS de forma remota mediante SSH.
- Habilite el inicio de sesión remoto usando la contraseña del usuario root y habilite los permisos SSH del usuario root.
Tome CentOS 6.7 como ejemplo. Si el valor de disable_root en el archivo /etc/cloud/cloud.cfg es de 0, los permisos están habilitados. (En algunos sistemas operativos, el valor true indica que los permisos están deshabilitados y false indica que los permisos están habilitados). Establezca ssh_pwauth en 1 y lock_passwd en False (indicando que las contraseñas de usuario no están bloqueadas).
users: - name: root lock_passwd: False disable_root: 0 ssh_pwauth: 1
- Evite que Cloud-Init se haga cargo de la red en /etc/cloud/cloud.cfg.
Si la versión de Cloud-Init es 0.7.9 o posterior, agregue el siguiente contenido a /etc/cloud/cloud.cfg:
Figura 1 Evitar que Cloud-Init se apodere de la red
El contenido agregado debe estar en formato YAML.
- Habilite al agente para acceder al origen de datos de OpenStack de IaaS.
Añada la siguiente información a la última línea de /etc/cloud/cloud.cfg:
datasource_list: [ OpenStack ] datasource: OpenStack: metadata_urls: ['http://169.254.169.254'] max_wait: 120 timeout: 5 apply_network_config: false
- Puede decidir si desea establecer max_wait y timeout. Los valores de max_wait y timeout en la salida del comando anterior son solo de referencia.
- Si la versión del sistema operativo es anterior a Debian 8 o CentOS 5, no puede habilitar al agente para acceder a la fuente de datos de OpenStack de IaaS.
- La ruta zeroconf predeterminada debe estar deshabilitada para los ECS de CentOS y EulerOS para un acceso preciso al origen de datos OpenStack de IaaS.
- apply_network_config: false solo es requerido por los usuarios que usan Cloud-Init 18.3 o posterior.
- Añada el siguiente contenido a /etc/cloud/cloud.cfg:
manage_etc_hosts: localhost
Esto evita que el sistema permanezca en el estado Waiting for cloudResetPwdAgent durante mucho tiempo durante el inicio de ECS.
Figura 2 Adición de manage_etc_hosts: localhost
- Ejecute el comando vi /etc/ssh/sshd_config para abrir el archivo /etc/ssh/sshd_config usando el editor vi.
Cambie el valor de PasswordAuthentication en el archivo sshd_config a yes.
Para SUSE y openSUSE, cambie los valores de los siguientes parámetros en el archivo sshd_config a yes:
- PasswordAuthentication
- ChallengeResponseAuthentication
- Modifique cloud_init_modules en el archivo de configuración cloud.cfg.
- Mueva ssh de abajo a arriba para acelerar el inicio de sesión de SSH.
- Habilite la actualización del nombre de host. No comente ni elimine la sentencia -update_hostname.
cloud_init_modules: - ssh - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups
- Modifique la configuración para que el nombre de host del ECS creado a partir de la imagen no contenga el sufijo .novalocal y pueda contener un punto (.).
- Ejecute el siguiente comando para modificar el archivo __init__.py:
vi /usr/lib/python*.*/site-packages/cloudinit/sources/__init__.py
La versión de Python varía según el sistema operativo.
Pulse i para entrar en el modo de edición. Modifique el contenido del archivo de la siguiente manera en función de la palabra clave toks:
if toks: toks = str(toks).split('.') else: #toks = ["ip-%s" % lhost.replace(".", "-")] # Comment out this line. toks = lhost.split(".novalocal") # Add this line. if len(toks) > 1: hostname = toks[0] #domain = '.'.join(toks[1:]) # Comment out this line. else: hostname = toks[0] if fqdn and domain != defdomain: #return hostname # Comment out this line. return "%s.%s" % (hostname, domain) # Add this line. else: return hostnameUna vez completada la modificación, pulse Esc para salir del modo de edición y entrar en :wq! para guardar la configuración y salir.
- Ejecute el siguiente comando para cambiar a la carpeta cloudinit/sources:
cd /usr/lib/python*.*/site-packages/cloudinit/sources/
La versión de Python varía según el sistema operativo.
- Ejecute los siguientes comandos para eliminar el archivo __init__.pyc y el archivo __init__.pyo optimizado:
rm -rf __init__.pyc
rm -rf __init__.pyo
- Ejecute los siguientes comandos para borrar los registros:
rm -rf /var/log/cloud-init*
- Ejecute el siguiente comando para modificar el archivo __init__.py:
- Ejecute el siguiente comando para editar el archivo /etc/cloud/cloud.cfg.d/05_logging.cfg para usar cloudLogHandler para procesar registros:
vim /etc/cloud/cloud.cfg.d/05_logging.cfg
[logger_cloudinit] level=DEBUG qualname=cloudinit handlers=cloudLogHandler propagate=1
- Elimine el usuario linux y el directorio /home/linux de la plantilla de imagen.
userdel linux
rm -fr /home/linux
Comprobar la configuración de Cloud-Init
Ejecute el siguiente comando para comprobar si Cloud-Init se ha configurado correctamente:
cloud-init init --local
(Opcional) Ejecute el siguiente comando para establecer el período de validez de la contraseña al máximo:
chage -M 99999 $user_name
user_name es un usuario del sistema, como usuario root.
Se recomienda establecer el período de validez de la contraseña en 99999.