Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2025-11-11 GMT+08:00

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:

  1. Configurar Cloud-Init.

    Para obtener más información, véase Configurar Cloud-Init.

  2. 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

  1. 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.
  2. 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
  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.

  2. 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.

      echo "NOZEROCONF=yes" >> /etc/sysconfig/network

    • apply_network_config: false solo es requerido por los usuarios que usan Cloud-Init 18.3 o posterior.
  3. 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
  4. 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
  5. 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
  6. 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 (.).
    1. 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 hostname

      Una 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.

    2. 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.

    3. Ejecute los siguientes comandos para eliminar el archivo __init__.pyc y el archivo __init__.pyo optimizado:

      rm -rf __init__.pyc

      rm -rf __init__.pyo

    4. Ejecute los siguientes comandos para borrar los registros:

      rm -rf /var/lib/cloud/*

      rm -rf /var/log/cloud-init*

  7. 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
  8. 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

Si Cloud-Init se ha instalado correctamente, se muestra la información de la versión y no se produce ningún error. Por ejemplo, no se mostrarán mensajes que indiquen la falta de archivos.

(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.