Ansible

De MediaWiki
Ir a la navegación Ir a la búsqueda


Metodos de conexión remota en Ansible

Introdución

Ansible:

  • é unha plataforma de software libre para configurar e administrar equipos, permitindo a xestión da configuración e a orquestación de infraestruturas.
  • é un proxecto de código aberto implementado en Python e ten unha arquitectura con módulos que poden manexar prácticamente calquera sistema operativo, contorna de nube e ferramenta ou marco de administración do sistema.
  • é amplamente usada para xestionar a configuración de servidores, para tarefas de aprovisionamento de instancias cloud, operacións dev-ops, ...
  • ten unha filosofía que pode resumirse en que o estado de configuración final que queres que teña un equipo queda definido nun arquivo de texto, chamado playbook


Máis datos:

  • Lanzamento inicial no 2012 (escrito orixialmente por Michael DeHaan, o creador da aplicación de aprovisionamento Cobbler) e posteriormente adquirido por Red Hat.
  • Combina instalación multi-nodo (permite despregar configuracións de servidores e servicios por lotes), execucións de taefas ad hoc e administración de configuracións.
  • Arquitectura agentless. Non require un axente nos servidores cliente polo que optimiza o rendemento e evita abrir portos especiais, con utilizar só a conexión por SSH. O traballo envíaase aos hosts cando se executa Ansible. Os módulos son os programas que realizan o traballo real das tarefas dun play.
  • Sintaxe moi sinxela con baixa curva de aprendizaxe e sen requirir coñecementos de programación
  • Con máils de 1000 módulos disponibles. Asi para activos diferentes podemos falar a mesma lingua do dispositivo administrado; e tamén poderemos desenvolver módulos en python.
  • Con adoptación masiva por ser fácil de usar para os administradores de sistemas
  • Compatible con ferramentas DevOps coma Vagrant e Jenkins.

O deseño de Ansible contempla:

Mínimo por natureza
Os sistemas de administración non deben impoñer dependencias adicionais.
Consistente
Seguro
Ansible non instala axentes vulnerables nos nodos. Manexa as máquinas remotamente a través de SSH, que é o seu único requisito xunto con Python
Alta confiabilidade
O modelo de idempotencia é aplicado para as instalacións e configuracións, para previr efectos secundarios na execución repetitiva de guións (scripts)
Suave curva de aprendizaxe
Os playbooks ou libretos usan unha linguaxe descriptiva simple baseada en YAML.

Resumindo, Ansible é unha utilidade de orquestación e administración de configuración de código aberto que pode automatizar e estandarizar a configuración de hosts remotos e máquinas virtuáis. A súa funcionalidade de orquestación permite a Ansible coordinar o lanzamento e o apagado seguro de aplicacións de varios niveles.

Así no canto de escribir scripts personalizados e individualizados, os administradores do sistema crean un play ou unha xogada de alto nivel en Ansible.

Ese play realiza unha serie de tarefas no host ou grupo de hosts especificados no play.

Un ficheiro que contén un ou máis plays chámase Playbook.

Qué non pode facer ansible?

  • Non pode auditar os cambios realizados localmente por outros usuarios no sistema
  • Pode agregar paquetes a unha instalación, pero NON realizar a instalación mínima inicial do sistema
  • Pode modificar a configuración, pero NON a monitorea
  • Non realiza un seguemento dos cambios realizados nos ficheiros do sistema, e de qué usuario ou proceso realizou os cambios

Arquitectura

Arquitectura Cliente Servidor de Ansible
Arquitectura Cliente Servidor de Ansible. Nodos e plataformas xestionadas

Existen dous tipos de máquinas na arquitectura de Ansible:

  • o nodo de control
  • os hosts administrados

O software ansible está instalado no nodo de control e todos os seus compoñentes se manteñen nel.

Os hosts administrados enumeranse nun inventario de host ,un ficheirode texto no nodo de control que inclue unha lista de nomes de host administrados FQDN (fully qualified domain name) ou enderezos IP.

Ansible utiliza SSH coma protocolo de comuncación cos hosts administados. Os módul referenciados nos playbooks copianse nos hosts administrados. Despois se executan, en orde, cos argumentos especificados no playbook. Os usuarios de Ansible poden escribir os seus propios módulos personalizados se é preciso pero os módulo s principais que veñen con Ansible poden realizar a maioría das tarefas de administración do sistema.

Alternativas

Puppet Chef Salt Ansible
Soporte Puppet Labs Opscode SaltStack Ansible Works
Control da interface Manifest (DSL) Recipes (DSL:Ruby) SLS (SoLt Sate/YAML) Playbook (YAML,JSON)
Axente Master/Axente (Standalone) Servidor/Cliente
Chef-solo (Standalone)
Master/Axente (minions)
Standalone (masterless)
Standalone (masterless)
Tecnoloxía core Ruby Ruby Python Python
Comunicación http, ssh / SSL STOMP, rest/SSL ZeroMQ SSH / JSON
Execución remota Mcollective, complexa Coitelo, complexa Integrada por defecto, sinxela Integrada por defecto, sinxela
Apoiado/usado por Google, eBay, Twitter Facebook, Ancestry, Splunk Linkedin, HP Cloud Rackspace, Evernote
Data de lanzamento 2005 2009 2011 2012

Instalación

Python

Na máquina servidora e cliente require Python (no momento actual v2.6 ou superior):

usuario@servidorAnsible:~$ python3 -V
Python 3.12.1

Dependencias

Para as dependencias:

apt install software-properties-common

Ansible

Para instalar Ansible:

root@servidorAnsible:~# apt install ansible

Comprobamos que queda instalado:

root@servidorAnsible:~# ansible --version
ansible [core 2.14.3]
 config file = None
 configured module search path = ['/root/.ansible/plugins/modules',
'/usr/share/ansible/plugins/modules']
 ansible python module location =
/usr/lib/python3/dist-packages/ansible

Configuración

Non xerou ficheiro de configuración, e precisamos dous:

 config file = None
/etc/ansible/ansible.cfg
Configuración de ansible
/etc/ansible/hosts
Inventario de equipos
Especificamos os equipos que serán administrados por ansible
Podemos especificalos empregando FQDN ou IP’s
Para empregar FQDN precisamos ter un servidor DNS na nosa rede
Permite agrupar os equipos en aulas ou departamentos

Configuración de Ansible - ansible.cfg

Creamos o arquivo de configuración a man na ruta por defecto:

root@servidorAnsible:~# mkdir /etc/ansible/
root@servidorAnsible:~# cd /etc/ansible/
root@servidorAnsible:/etc/ansible# vi ansible.cfg
[defaults]
inventory=/etc/ansible/hosts

Comprobamos como xa emprega o noso arquivo de configuración:

root@servidorAnsible:/etc/ansible# ansible --version
ansible [core 2.14.3]
 config file = /etc/ansible/ansible.cfg
 configured module search path = ['/root/.ansible/plugins/modules',
'/usr/share/ansible/plugins/modules']

Configuración de Ansible - inventario

Crearemos os arquivos de configuración en /etc/ansible

Temos que engadir os clientes en /etc/ansible/hosts. Este é un arquivo moi importante no que seDefine o inventario de equipos a xestionar mediante ansible
Definimos dous grupos de clientes correspondentes a dúas aulas ficticias
Poderemos xestionalos de xeito individual ou de xeito conxunto
Se tivésemos un Servidor DNS poderíamos empregar nomes de equipos, de momento só IP’s
[aula1]
10.0.2.10
[aula2]
10.0.2.20

Para crear o arquivo de inventario (aínda que só temos dous equipos clientes, damos de alta outros dous ficticios):

root@servidorAnsible:/etc/ansible# vi hosts
#Definimos os equipos da Aula1
[aula1]
10.0.2.10
Definimos os equipos da Aula2
[aula2]
10.0.2.20

Para comprobar que o inventario está correctamente configurado:

root@servidorAnsible:/etc/ansible# ansible all --list-hosts
 hosts (2):
 10.0.2.10
 10.0.2.20

Primeiras probas con ansible

Empregamos o módulo ping de ansible para comprobar a conexión cos nodos clientes (Importante: asegúrate que estén arrancados!!)

Sintaxe: ansible Equipos -m módulo
Se queremos saber se os equipos da Aula1 están acendidos
ansible aula1 -m ping

Inicialmente, teremos erro: Ansible emprega ssh para conectarse co cliente, como é a primiera vez que se conecta con ese cliente pídenos confirmación

root@servidorAnsible:/etc/ansible# ansible aula1 -m ping
The authenticity of host '10.0.2.10 (10.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:/E+kj4vt6mKk2ud2cbKew2816I0ZwmM2I8RMhXefUQM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
10.0.2.10 | UNREACHABLE! => {
 "changed": false,
 "msg": "Failed to connect to the host via ssh: Warning: Permanently added '10.0.2.10'
(ED25519) to the list of known hosts.\r\nroot@10.0.2.10: Permission denied
(publickey,password).",
 "unreachable": true
}

Con -u indicamos usuario, pero falla novamente porque non sabe o contrasinal dese usuario para realizar a conexión por ssh:

root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario 10.0.2.10 | UNREACHABLE! => {

"changed": false,
"msg": "Failed to connect to the host via ssh: usuario@10.0.2.10: Permission denied

(publickey,password).",

"unreachable": true

}

Con -k contrasinal, pero falla unha vez máis porque é necesario ter instalado sshpass no servidor ansible

root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario -k
SSH password:
10.0.2.10 | FAILED! => {
 "msg": "to use the 'ssh' connection type with passwords or pkcs11_provider, you must
install the sshpass program"

Instalamos sshpass:

 root@servidorAnsible:/etc/ansible# apt install sshpass

Ahora sí devolverá en cor verde (os erros estaban amosándose en vermello) indicando éxito. O equipo 10.0.2.10 respondeu o móudlo ping correctamente. A resposta é un JSON que pode conter moita información:

root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario -k
SSH password:
10.0.2.10 | SUCCESS => {
 "ansible_facts": {
 "discovered_interpreter_python": "/usr/bin/python3"
 },
 "changed": false,
 "ping": "pong"

De non estar acendido, a resposta sería:

root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario -k
SSH password:
10.0.2.10 | SUCCESS => {
 "ansible_facts": {
 "discovered_interpreter_python": "/usr/bin/python3"
 },
 "changed": false,
 "ping": "pong"
10.0.2.11 | UNREACHABLE! => {
 "changed": false,
 "msg": "Failed to connect to the host via ssh: ssh: connect to host 10.0.2.11 port
22: No route to host",
 "unreachable": true

Con isto so fixemos un ping a un equipo mais se tivésemos dados de alta 100 equipos dentro da categoría aula1 con un só comando, veríamos cales responden e polo tanto saberíamos cales están acendidos

Ampliación

Tarefas

  1. Tarefa 1 - Creación do Servidor Ansible

Referencias