LINUX

Cómo instalar Calicoctl en Docker

Calico es un software gratuito y de código abierto para redes virtuales en centros de datos. Es un enfoque de capa 3 puro para un centro de datos altamente escalable para redes virtuales en la nube. Se integra a la perfección con el sistema de orquestación en la nube, como openstack, clústeres de docker para permitir la comunicación IP segura entre máquinas virtuales y contenedores. Implementa un vRouter altamente productivo en cada nodo que aprovecha el motor de reenvío del kernel de Linux existente. Calico funciona con una tecnología tan impresionante que tiene la capacidad de mirar directamente con la estructura física del centro de datos, ya sea L2 o L3, sin NAT, rampas de entrada / salida de túneles o superposiciones. Calico hace un uso completo de Docker para ejecutar sus contenedores en los nodos, lo que lo hace multiplataforma y muy fácil de enviar, empaquetar e implementar. Calico tiene las siguientes características destacadas listas para usar.

  • Puede escalar decenas de miles de servidores y millones de cargas de trabajo.
  • Calico es fácil de implementar, operar y diagnosticar.
  • Es un software de código abierto con licencia Apache License versión 2 y utiliza estándares abiertos.
  • Es compatible con contenedores, máquinas virtuales y cargas de trabajo nativas.
  • Es compatible con los protocolos de Internet IPv4 e IPv6.
  • Está diseñado internamente para admitir políticas de red completas, flexibles y seguras.

En este tutorial, realizaremos una red privada virtual entre dos nodos que ejecutan Calico en ellos con la tecnología Docker. Aquí hay algunos pasos sencillos sobre cómo podemos hacerlo.

1. Instalación de etcd

Para comenzar con la red privada virtual de calico, necesitaremos tener una máquina Linux ejecutando etcd. Como CoreOS viene preinstalado y preconfigurado con etcd, podemos usar CoreOS pero si queremos configurar Calico en otras distribuciones de Linux, entonces tendremos que configurarlo en nuestra máquina. Como estamos ejecutando Ubuntu 14.04 LTS, primero tendremos que instalar y configurar etcd en nuestra máquina. Para instalar etcd en nuestra caja de Ubuntu, necesitaremos agregar el repositorio ppa oficial de Calico ejecutando el siguiente comando en la máquina en la que queremos ejecutar el servidor etcd. Aquí, instalaremos etcd en nuestro primer nodo.

# apt-add-repository ppa:project-calico/icehouse

The primary source of Ubuntu packages for Project Calico based on OpenStack Icehouse, an open source solution for virtual networking in cloud data centers. Find out more at https://www.projectcalico.org/
More info: https://launchpad.net/~project-calico/+archive/ubuntu/icehouse
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmpi9zcmls1/secring.gpg' created
gpg: keyring `/tmp/tmpi9zcmls1/pubring.gpg' created
gpg: requesting key 3D40A6A7 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpi9zcmls1/trustdb.gpg: trustdb created
gpg: key 3D40A6A7: public key "Launchpad PPA for Project Calico" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

Luego, necesitaremos editar / etc / apt /ferences y hacer cambios para preferir los paquetes proporcionados por Calico para Nova y Neutron.

# nano /etc/apt/preferences

Necesitaremos agregar las siguientes líneas.

Package: *
Pin: release o=LP-PPA-project-calico-*
Pin-Priority: 100

Configuración de Calico PPA

A continuación, también necesitaremos agregar el PPA BIRD oficial para Ubuntu 14.04 LTS para que las correcciones de errores se instalen antes de que estén disponibles en el repositorio de Ubuntu.

# add-apt-repository ppa:cz.nic-labs/bird

The BIRD Internet Routing Daemon PPA (by upstream & .deb maintainer)
More info: https://launchpad.net/~cz.nic-labs/+archive/ubuntu/bird
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmphxqr5hjf/secring.gpg' created
gpg: keyring `/tmp/tmphxqr5hjf/pubring.gpg' created
gpg: requesting key F9C59A45 from hkp server keyserver.ubuntu.com
apt-ggpg: /tmp/tmphxqr5hjf/trustdb.gpg: trustdb created
gpg: key F9C59A45: public key "Launchpad Datov� schr�nky" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

Ahora, una vez finalizados los trabajos de PPA, actualizaremos el índice del repositorio local y luego instalaremos etcd en nuestra máquina.

# apt-get update

Para instalar etcd en nuestra máquina ubuntu, ejecutaremos el siguiente comando apt.

# apt-get install etcd python-etcd

2. Comenzando Etcd

Una vez completada la instalación, configuraremos el archivo de configuración etcd. Aquí, editaremos /etc/init/etcd.conf usando un editor de texto y agregue la línea exec / usr / bin / etcd y haz que se vea como la siguiente configuración.

Configuración de ETCD
Nota: En la configuración anterior, necesitaremos reemplazar 10.130.65.71 y node-1 con la dirección IP privada y el nombre de host de su caja de servidor etcd. Después de terminar con la edición, necesitaremos guardar y salir del archivo.

Podemos obtener la dirección IP privada de nuestro servidor etcd ejecutando el siguiente comando.

# ifconfig

ifconfig

Cuando termine nuestra configuración de etcd, ahora iniciaremos nuestro servicio etcd en nuestro nodo de Ubuntu. Para iniciar el demonio etcd, ejecutaremos el siguiente comando.

# service etcd start

Una vez hecho esto, comprobaremos si etcd realmente se está ejecutando o no. Para asegurarnos de eso, necesitaremos ejecutar el siguiente comando.

# service etcd status

3. Instalación de Docker

A continuación, instalaremos Docker en nuestros dos nodos que ejecutan Ubuntu. Para instalar la última versión de Docker, simplemente necesitaremos ejecutar el siguiente comando.

# curl -sSL https://get.docker.com/ | sh

Instalación del motor Docker

Una vez completada la instalación, iniciaremos el demonio de la ventana acoplable para asegurarnos de que se está ejecutando antes de movernos hacia Calico.

# service docker restart

docker stop/waiting
docker start/running, process 3056

3. Instalación de Calico (calicoctl)

Ahora instalaremos calico en nuestra máquina Linux para ejecutar los contenedores de calico. Necesitaremos instalar Calico en cada nodo que queramos conectar a la red Calico. Para instalar Calico, necesitaremos ejecutar el siguiente comando con permiso de root o sudo.

En el primer nodo

# wget https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl

--2015-09-28 12:08:59-- https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl
Resolving github.com (github.com)... 192.30.252.129
Connecting to github.com (github.com)|192.30.252.129|:443... connected.
...
Resolving github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)... 54.231.9.9
Connecting to github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)|54.231.9.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6166661 (5.9M) [application/octet-stream]
Saving to: 'calicoctl'
100%[=========================================>] 6,166,661 1.47MB/s in 6.7s
2015-09-28 12:09:08 (898 KB/s) - 'calicoctl' saved [6166661/6166661]

# chmod +x calicoctl

Después de terminar con hacerlo ejecutable, haremos que el binario calicoctl esté disponible como comando en cualquier directorio. Para hacerlo, necesitaremos ejecutar el siguiente comando.

# mv calicoctl /usr/bin/

En el segundo nodo

# wget https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl

--2015-09-28 12:09:03-- https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl
Resolving github.com (github.com)... 192.30.252.131
Connecting to github.com (github.com)|192.30.252.131|:443... connected.
...
Resolving github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)... 54.231.8.113
Connecting to github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)|54.231.8.113|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6166661 (5.9M) [application/octet-stream]
Saving to: 'calicoctl'
100%[=========================================>] 6,166,661 1.47MB/s in 5.9s
2015-09-28 12:09:11 (1022 KB/s) - 'calicoctl' saved [6166661/6166661]

# chmod +x calicoctl

Después de terminar con hacerlo ejecutable, haremos que el binario calicoctl esté disponible como comando en cualquier directorio. Para hacerlo, necesitaremos ejecutar el siguiente comando.

# mv calicoctl /usr/bin/

Del mismo modo, necesitaremos ejecutar los comandos anteriores para instalar en todos los demás nodos.

4. Inicio de los servicios de Calico

Una vez que hayamos instalado Calico en cada uno de nuestros nodos, iniciaremos nuestros servicios de Calico. Para iniciar los servicios de calico, necesitaremos ejecutar los siguientes comandos.

En el primer nodo

# calicoctl node

WARNING: Unable to detect the xt_set module. Load with `modprobe xt_set`
WARNING: Unable to detect the ipip module. Load with `modprobe ipip`
No IP provided. Using detected IP: 10.130.61.244
Pulling Docker image calico/node:v0.6.0
Calico node is running with id: fa0ca1f26683563fa71d2ccc81d62706e02fac4bbb08f562d45009c720c24a43

En el segundo nodo

A continuación, exportaremos una variable global para conectar nuestros nodos calico al mismo servidor etcd que está alojado en el nodo1 en nuestro caso. Para hacerlo, necesitaremos ejecutar el siguiente comando en cada uno de nuestros nodos.

# export ETCD_AUTHORITY=10.130.61.244:2379

Luego, ejecutaremos el contenedor calicoctl en cada uno de nuestros dos nodos.

# calicoctl node

WARNING: Unable to detect the xt_set module. Load with `modprobe xt_set`
WARNING: Unable to detect the ipip module. Load with `modprobe ipip`
No IP provided. Using detected IP: 10.130.61.245
Pulling Docker image calico/node:v0.6.0
Calico node is running with id: 70f79c746b28491277e28a8d002db4ab49f76a3e7d42e0aca8287a7178668de4

Este comando debe ejecutarse en todos los nodos en los que queremos iniciar nuestros servicios de Calico. El comando anterior inicia un contenedor en el nodo respectivo. Para comprobar si el contenedor se está ejecutando o no, ejecutaremos el siguiente comando de la ventana acoplable.

# docker ps

Contenedores Docker en ejecución

Si vemos un resultado similar al resultado que se muestra a continuación, podemos confirmar que los contenedores de Calico están en funcionamiento.

5. Contenedores de partida

A continuación, necesitaremos iniciar algunos contenedores en cada uno de nuestros nodos que ejecutan los servicios de Calico. Asignaremos un nombre diferente a cada uno de los contenedores que ejecutan ubuntu. Aquí, workload-A, workload-B, etc. se ha asignado como nombre único para cada uno de los contenedores. Para hacerlo, necesitaremos ejecutar el siguiente comando.

En el primer nodo

# docker run --net=none --name workload-A -tid ubuntu

Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
91e54dfb1179: Already exists
library/ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:73fbe2308f5f5cb6e343425831b8ab44f10bbd77070ecdfbe4081daa4dbe3ed1
Status: Downloaded newer image for ubuntu:latest
a1ba9105955e9f5b32cbdad531cf6ecd9cab0647d5d3d8b33eca0093605b7a18

# docker run --net=none --name workload-B -tid ubuntu

89dd3d00f72ac681bddee4b31835c395f14eeb1467300f2b1b9fd3e704c28b7d

En el segundo nodo

# docker run --net=none --name workload-C -tid ubuntu

Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
91e54dfb1179: Already exists
library/ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:73fbe2308f5f5cb6e343425831b8ab44f10bbd77070ecdfbe4081daa4dbe3ed1
Status: Downloaded newer image for ubuntu:latest
24e2d5d7d6f3990b534b5643c0e483da5b4620a1ac2a5b921b2ba08ebf754746

# docker run --net=none --name workload-D -tid ubuntu

c6f28d1ab8f7ac1d9ccc48e6e4234972ed790205c9ca4538b506bec4dc533555

De manera similar, si tenemos más nodos, podemos ejecutar el contenedor docker de ubuntu en él ejecutando el comando anterior asignando un nombre de contenedor diferente.

6. Asignación de direcciones IP

Una vez que tengamos nuestros contenedores docker ejecutándose en cada uno de nuestros hosts, agregaremos un soporte de red a los contenedores. Ahora, asignaremos una nueva dirección IP a cada uno de los contenedores usando calicoctl. Esto agregará una nueva interfaz de red a los contenedores con las direcciones IP asignadas. Para hacerlo, necesitaremos ejecutar los siguientes comandos en los hosts que ejecutan los contenedores.

En el primer nodo

# calicoctl container add workload-A 192.168.0.1
# calicoctl container add workload-B 192.168.0.2

En el segundo nodo

# calicoctl container add workload-C 192.168.0.3
# calicoctl container add workload-D 192.168.0.4

7. Agregar perfiles de políticas

Después de que nuestros contenedores tengan las interfaces de red y la dirección IP asignadas, ahora necesitaremos agregar perfiles de políticas para permitir la conexión en red entre los contenedores. Después de agregar los perfiles, los contenedores podrán comunicarse entre sí solo si tienen los perfiles comunes asignados. Eso significa que, si tienen diferentes perfiles asignados, no podrán comunicarse entre ellos. Entonces, antes de poder asignar. primero tendremos que crear algunos perfiles nuevos. Eso se puede hacer en cualquiera de los hosts. Aquí, ejecutaremos el siguiente comando en 1st Node.

# calicoctl profile add A_C

Created profile A_C

# calicoctl profile add B_D

Created profile B_D

Una vez creado el perfil, simplemente agregaremos nuestra carga de trabajo al perfil requerido. Aquí, en este tutorial, colocaremos la carga de trabajo A y la carga de trabajo C en un perfil común A_C y la carga de trabajo B y D en un perfil común B_D. Para hacerlo, ejecutaremos el siguiente comando en nuestros hosts.

En el primer nodo

# calicoctl container workload-A profile append A_C
# calicoctl container workload-B profile append B_D

En el segundo nodo

# calicoctl container workload-C profile append A_C
# calicoctl container workload-D profile append B_D

8. Prueba de la red

Después de haber agregado un perfil de política a cada uno de nuestros contenedores usando Calicoctl, ahora probaremos si nuestra red está funcionando como se esperaba o no. Tomaremos un nodo y una carga de trabajo e intentaremos comunicarnos con los otros contenedores que se ejecutan en el mismo o en diferentes nodos. Y debido al perfil, deberíamos poder comunicarnos solo con los contenedores que tienen un perfil común. Entonces, en este caso, la carga de trabajo A debería poder comunicarse solo con C y viceversa, mientras que la carga de trabajo A no debería poder comunicarse con B o D. Para probar la red, haremos ping a los contenedores que tienen perfiles comunes de el primer host que ejecuta la carga de trabajo A y B.

Primero haremos ping a workload-C que tenga la ip 192.168.0.3 usando workload-A como se muestra a continuación.

# docker exec workload-A ping -c 4 192.168.0.3

Luego, haremos ping a workload-D con ip 192.168.0.4 usando workload-B como se muestra a continuación.

# docker exec workload-B ping -c 4 192.168.0.4

Prueba de ping exitosa

Ahora, comprobaremos si podemos hacer ping a los contenedores que tienen perfiles diferentes. Ahora haremos ping a workload-D con la dirección IP 192.168.0.4 usando workload-A.

# docker exec workload-A ping -c 4 192.168.0.4

Una vez hecho esto, intentaremos hacer ping a workload-C con la dirección IP 192.168.0.3 usando workload-B.

# docker exec workload-B ping -c 4 192.168.0.3

Prueba de ping fallida

Por lo tanto, las cargas de trabajo que tienen los mismos perfiles pueden hacer ping entre sí, mientras que tener perfiles diferentes no pueden hacer ping entre sí.

Conclusión

Calico es un proyecto increíble que proporciona una manera fácil de configurar una red virtual utilizando la última tecnología de Docker. Se considera una excelente solución de código abierto para redes virtuales en centros de datos en la nube. Calico está siendo experimentado por personas en diferentes plataformas en la nube como AWS, DigitalOcean, GCE y más en estos días. Como Calico se encuentra actualmente en experimentación, su versión estable aún no se ha lanzado y aún está en prelanzamiento. El proyecto consta de documentación, tutoriales y manuales bien documentados en su sitio de documentación oficial.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar