Mostrando entradas con la etiqueta Tutoriales. Mostrar todas las entradas
Mostrando entradas con la etiqueta Tutoriales. Mostrar todas las entradas

domingo, 5 de julio de 2020

Instalar MS SQL Server en Ubuntu 16.04

En el post de hoy veremos como instalar MS SQL Server 2017 en Ubuntu 16.04, entiendo que los pasos también aplican para Ubuntu 18.04 aunque no para Ubuntu 20.04, que son las ultimas versiones LTS de Ubuntu.

Arrancamos:

Primero importamos las claves GPG del repositorio:

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

Agregamos el repo de Microsoft a nuestro Ubuntu:

sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2017.list)"

Actualizamos los repos:

sudo apt-get update


Y finalmente instalamos el SQL:

sudo apt-get install -y mssql-server



Una vez finalizada la instalación, ejecutamos el setup de mssql-conf para configurar la contraseña de SA y elegir la versión del SQL:

sudo /opt/mssql/bin/mssql-conf setup


Cuando nos pide la versión a elegir, Elegimos la 2, que es la de Desarrollo, y que si bien no debe usarse para producción (porque deberíamos pagar) nos permite utilizarla de manera gratuita con todas las funcionalidades.

(Las ediciones de SQL Server 2017 que tienen licencia gratuita son: Evaluación, Desarrollo y Express.)

Luego aceptamos la licencia: Yes

Elegimos el Idioma Español: 3

Y configuramos la contraseña de SA: elegimos una contraseña para ese usuario y la confirmamos

(La contraseña debe tener al menos 8 caracteres, incluidas letras mayúsculas y minúsculas, dígitos de base 10 y/o símbolos no alfanuméricos).


Una vez finalizada la configuración verificamos que el servicio se este ejecutando:

systemctl status mssql-server --no-pager


Y listo. Ya podríamos conectarnos de manera remota al puerto TCP predeterminado del SQL Server (1433).

viernes, 3 de julio de 2020

Unir Linux Ubuntu a Dominio Windows

Para unir nuestro servidor con Ubuntu a nuestro Dominio Windows primero tenemos que configurar en Ubuntu una IP fija y los DNS internos.
Luego debemos crear en el DNS un registro A con la IP privada del server Ubuntu y el correspondiente registro PTR.

Hecho eso, procedemos con la instalación y configuración del software pbis open, que es el que nos permitirá unir nuestro Ubuntu Linux al dominio.

Instalar Pbis Open:

Vamos a la siguiente dirección y elegimos la versión del software correspondiente a nuestro sistema operativo.

En mi caso, como es un Ubuntu 18.04 LTS de 64 bits elijo el que dice pbis-open-9.1.0.551.linux.x86_64.deb.sh:


Copiamos la URL del archivo y lo descargamos desde el servidor con el siguiente comando:

wget https://github.com/BeyondTrust/pbis-open/releases/download/9.1.0/pbis-open-9.1.0.551.linux.x86_64.deb.sh


Una vez descargado le damos permisos de ejecución:

chmod +x pbis-open-9.1.0.551.linux.x86_64.deb.sh


Y luego lo instalamos:

sudo ./pbis-open-9.1.0.551.linux.x86_64.deb.sh


Una vez instalado, y antes de unir la maquina al dominio, reiniciamos con:

sudo reboot

Al iniciar, ahora si, la unimos al dominio:

domainjoin-cli join nombrededominio

Nos va a pedir las credenciales de un usuario que tenga permisos para unir maquinas al dominio, las ingresamos y listo:


Ya tenemos la virtual agregada al dominio. Reiniciamos:

sudo reboot

miércoles, 1 de julio de 2020

Crear Azure Bastion

¿Que es Azure Bastion?

Azure Bastion es un servicio (PaaS) que proporciona conectividad RDP y SSH de manera segura y sin problemas a las máquinas virtuales a través del protocolo TLS.
Gracias a este servicio las máquinas virtuales no necesitan una dirección IP pública, ya que las conexiones se realizan hacia Azure Bastion, agregando de esta forma una capa de seguridad a las virtuales.
Con Azure Bastion, la conexión a la máquina virtual se realiza directamente desde el portal de Azure. No se necesita un cliente, agente o software adicional.
La implementación de Azure Bastion es por red virtual, con lo cual estará disponible para todas las máquinas virtuales que se encuentren en esa red.
Con Azure Bastion las maquinas virtuales no solo no necesitan una IP publica sino que tampoco necesitan exponer los puertos RDP ni SSH, debido a esto, están protegidas contra el escaneo de puertos por parte de usuarios maliciosos y malintencionados ubicados fuera de la red.
Con algunas variaciones de acuerdo a la cantidad de conexiones y sesiones en uso, Azure Bastion soporta, en principio, 25 conexiones RDP concurrentes y 50 de SSH.

En cuanto a los precios se pueden verificar aqui.

Pasamos a lo importante.

Crear host de Azure Bastion:

Ingresamos al portal de Azure y elegimos crear un recurso:


Buscamos Bastion, nos aseguramos que sea el de Microsoft:


Y elegimos crear:


Completamos los datos que nos pide como nuestra suscripción, el grupo de recursos (en mi caso use uno que ya tenia), el nombre de la instancia, la región en donde lo vamos a crear, luego la red virtual  y por ultimo el nombre de la ip publica:


En cuanto al grupo de recursos de Azure en el que se creará el Bastion, si no tienen uno, deben crear uno nuevo.

Con respecto a la red virtual pueden crear una nueva o utilizar una red virtual existente. Si van a utilizar una red virtual existente, tienen que asegurarse de que tenga suficiente espacio libre de direcciones para los  requisitos de subred de Bastion.
La subred estará dedicada al host de Bastion y debe nombrarse como AzureBastionSubnet. Esta subred debe ser al menos /27 o mayor.

AzureBastionSubnet no admite rutas definidas por el usuario, pero sí admite grupos de seguridad de red.

La dirección IP pública de Bastion es a la que se accederá a través de RDP o SSH (a través del puerto 443). La IP pública debe estar en la misma región que el recurso Bastion que están creando.

Cuando terminamos la configuración, hacemos click en Revisar + Crear y luego en Crear. Esto valida los valores. Una vez que pasa la validación, comienza la implementacion:



viernes, 19 de junio de 2020

Instalar Saltstack en Ubuntu

¿Que es SaltStack?

SaltStack es un software de código abierto basado en Python que sirve para automatizar la ejecución remota de tareas y configuraciones.
Es de la familia de Chef, Puppet y Ansible, sobre este ultimo hablamos en el blog.
A través de la "Infraestructura como código", SaltStack nos permite realizar la implementación y administración de sistemas, automatización de la configuración, orquestación, corrección de vulnerabilidades, etc.

La arquitectura de SaltStack:

Utiliza una arquitectura maestro-esclavo y sus componentes mas importantes son:

Master: Servidor que se comunica con los agentes instalados en los dispositivos finales llamados Minions.

Minions : Son los nodos en los cuales se instala un agente que le permite al Master administrarlos y ejecutar comandos de forma remota.

Grains: Es una interfaz que proporciona información del sistema, como el sistema operativo, la memoria, el nombre de dominio, el núcleo, la dirección IP, etc.

States: Los estados son archivos YAML (.SLS) para almacenar la configuración de los Minions.

El Master y los Minions se comunican a través de Keys. Una vez que se forma una red segura entre ellos, el cliente puede comunicarse sin problemas con el Master para recibir instrucciones.

Instalar SaltStack:

Agregamos la llave del repo:

wget -O - https://repo.saltstack.com/py3/ubuntu/20.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -

Agregamos el repo en /etc/apt/sources.list.d/saltstack.list:

deb http://repo.saltstack.com/py3/ubuntu/20.04/amd64/latest focal main

Actualizamos el sistema:

sudo apt-get update

Instalación del Master:

sudo apt-get install salt-master

Verificamos la versión:

salt --versions-report


Ahora editamos el archivo del Master:

sudo nano /etc/salt/master

Y cambiamos las siguientes lineas:

interface: 192.168.2.116
gather_job_timeout: 120
timeout: 120

Verificamos el estado del Master:

systemctl status salt-master


Verificamos las llaves:

sudo salt-key -L


Vemos que no hay ninguna Aceptada, ni Denegada ni Rechazada.

Instalación del Minion:

Agregamos la llave del repo:

wget -O - https://repo.saltstack.com/py3/ubuntu/20.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -

Agregamos el repo en /etc/apt/sources.list.d/saltstack.list:

deb http://repo.saltstack.com/py3/ubuntu/20.04/amd64/latest focal main

Actualizamos el sistema:

sudo apt-get update

Ahora instalamos el Minion:

sudo apt-get install salt-minion

Editamos el archivo del Minion:

sudo nano /etc/salt/minion

Y agregamos las siguientes lineas:

master: 192.168.2.116
id: primer-minion

Verificamos el estado del Minion:

systemctl status salt-minion


En la parte del archivo minion donde decía master podríamos haber dejado la palabra salt y editar el archivo /etc/hosts asignándole a salt la IP del servidor, pero para los fines de este ejemplo directamente usamos la IP y no el nombre DNS.

Reiniciamos el servicio para que el Minion intente conectarse al Master:

systemctl restart salt-minion

Chequeamos las llaves en el Master:

sudo salt-key -L

Y vemos que ya nos aparece el primer-minion (que es el ID con el que definimos nuestro Minion) pero en las keys no aceptadas:



jueves, 18 de junio de 2020

Instalar Openshift Origin en Ubuntu

¿Que es Openshift?

A grandes rasgos podría decirse que es el Kubernetes de Red Hat, aunque en realidad Kubernetes es parte de Openshift, y Red Hat lo que hace es introducirle mejoras y comercializarlo. Con lo cual quizás podríamos decir que es un "Kubernetes con esteroides", y pago (la versión comercial).

¿Que es Kubernetes? Lo explico acá.

Ahora, ¿que es Openshift Origin?
RedHat suele tener dos versiones de sus productos, la versión de la comunidad, que es gratuita y sin soporte, salvo el soporte que uno puede conseguir en la comunidad obviamente, y la versión de pago.
Openshift Origin es la versión gratuita de código abierto de Openshift.
También existe Minishift, que seria el equivalente a Minikube de Kubernetes (son versiones para ser instaladas en una única máquina para probar el producto de forma fácil).

Dicho esto, pasemos a lo importante.
Para instalar Openshift Origin primero tenemos que tener funcionando Docker en nuestra maquina.

Instalar Docker:

Importamos la clave GPG de Docker:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Agregamos el repo:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"

Actualizamos el sistema e instalamos:

sudo apt-get update

sudo apt-get install -y docker-ce docker-ce-cli

Agregamos nuestro usuario al grupo de Docker:

sudo usermod -aG docker ardillasenlared

Instalar Openshift Origin:

Descargamos el archivo con el software:

wget https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz

Lo descomprimimos:

tar xvzf openshift*.tar.gz

Ingresamos a la carpeta de Openshift recién creada:

cd openshift-origin-client-tools*/

Movemos los binarios oc y kubectl a /usr/local/bin:

sudo mv  oc kubectl  /usr/local/bin/

Verificamos la versión:

oc version

Habilitamos que pueda usar registries inseguros:

cat << EOF | sudo tee /etc/docker/daemon.json
{
    "insecure-registries" : [ "172.30.0.0/16" ]
}
EOF

Reiniciamos el servicio de Docker:

sudo service docker restart

Iniciamos el cluster en el servidor:

oc cluster up

Bajamos el cluster:

oc cluster down

Configuramos para que Openshift no redirija constantemente a 127.0.0.1.
Para ello, abrimos el archivo de configuración con el comando:

sudo nano ./openshift.local.clusterup/openshift-controller-manager/openshift-master.kubeconfig

Y cambiamos:

server: https://127.0.0.1:8443

Por:

server: https://SERVER_IP:8443

Guardamos y levantamos nuevamente el cluster pero esta vez especificando la IP:

oc cluster up --public-hostname=SERVER_IP



lunes, 8 de junio de 2020

Conectarse por RDP a Ubuntu desde Windows y crear carpeta compartida

Bueno, en mi caso Kubuntu, pero es lo mismo.
Para conectarnos por RDP a Ubuntu desde Windows, instalamos en Ubuntu un software llamado xrdp.

Instalar y habilitar xrdp:

sudo apt install xrdp
sudo systemctl enable xrdp



Desde la otra maquina, con Windows, probamos un telnet al puerto RDP (por defecto, 3389) a ver si responde:

telnet 192.168.2.106 3389

Si responde ya nos podemos conectar, y sino hay que habilitar el puerto en el Firewall así:

sudo ufw allow 3389/tcp

En mi caso por defecto estaba habilitado.
Ahora en Windows vamos a Inicio, Ejecutar y escribimos mstsc:


Luego ingresamos la IP de nuestro Ubuntu:


Nos va a aparecer una advertencia, ponemos que si:


Y finalmente nos aparece la pantalla para ingresar nuestras credenciales:


Asegúrense de no haber iniciado sesión antes (o si lo hicieron cierrenla), sino queda la pantalla negra y nunca abre el RDP. Parecería ser un bug, pero la verdad es que no tuve mucho tiempo de investigar el error (y lo que encontré no me funcionó), con lo cual si alguno sabe por favor comente y lo agrego a la entrada.
Pero bueno, con la sesión cerrada podemos ingresar correctamente:


Ahora vamos a compartir una carpeta de Linux hacia Windows

domingo, 7 de junio de 2020

Protege tu Servidor con Fail2ban

¿Que es Fail2ban?

Es una herramienta escrita en Python que sirve para securizar un servidor monitoreando logs y bloqueando conexiones de intrusos en base a ciertos patrones predefinidos. Es decir, cuando por ejemplo detecta que en un log hay cierta cantidad de intentos fallidos de conexión, en base a la configuración que hayamos definido bloquea la IP del intruso a través de iptables para impedir que el mismo siga intentando conectarse. Este bloqueo/baneo de la IP puede ser permanente o temporal, dependiendo de como lo hayamos definido nosotros.

La ubicación que contiene la totalidad de filtros de fail2ban es /etc/fail2ban/filter.d:

Entre sus filtros mas destacables se encuentran:

sshd.conf: Para los intentos fallidos a SSH.
proftp.conf: Para los intentos fallidos hacia el FTP ProFTP del cual hice un post de instalación y configuración.
exim.conf: Para detectar autenticaciones al servidor de correo Exim.
squid.conf: Para los intentos de omitir este famoso proxy del cual tambien hice un post aca y aca.


Los filtros contienen principalmente expresiones regulares que se utilizan para detectar intentos de intrusión, fallas de contraseña, etc.
Una vez definida una expresión regular se irá comprobando que la misma no aparezca en ninguno de los logs que Fail2ban esta monitoreando. En el caso que la expresión regular aparezca en los logs se contabilizará un intento fallido de autenticación, el mismo se ira incrementando hasta llegar al numero que configuramos, una vez que llegue tomará una acción, que generalmente sera bloquear la IP.
Si vamos a usar los servicios estándares predeterminados (que son los que vemos mas arriba) no será necesario modificar ni crear ningún filtro, podemos utilizar los que vienen por defecto.

En cuanto a las acciones, las mismas se encuentran en la ruta /etc/fail2ban/action.d. Allí una serie de scripts definen las acciones a realizar al detectar los ataques definidos en las expresiones regulares de los filtros.
Como con los filtros, estas acciones que ya nos trae por defecto deberían ser suficientes, pero esta la posibilidad de crear acciones nuevas.

Archivo jail.conf:

jail.conf es el archivo de configuración más importante. En este archivo es donde indicamos que servicios debe proteger Fail2ban (por defecto vienen todos, o casi, activados), entre otras cosas podemos:

- Definir que servicios queremos que monitoree Fail2ban.
- Que filtro y acción aplicar.
- Definir el puerto del servicio, para casos como por ejemplo ssh donde se suele cambiar el puerto 22 que viene por defecto.
- Elegir que log del servicio vamos a monitorear.
- Definir la cantidad de intentos fallidos y el tiempo de bloqueo.

Algunos parámetros:

Sección [DEFAULT]
ignoreip: Acá van las IPs que no queres que se bloqueen, generalmente va la red o subredes internas.
maxretry: Número de intentos antes de banear la IP.
findtime: Definimos en cuanto tiempo el contador de intentos fallidos se va a resetear.
bantime: Duración (en segundos) para la prohibición de la IP. Usar número negativo para la prohibición "permanente".
ignorecommand: Acá podemos definir un comando que sera exceptuado cuando una determinada IP intente conectarse a nuestro servidor.
logtarget: Es para indicar en que ubicación se van a almacenar los logs de Fail2ban, por defecto  /var/log/fail2ban.log

En [ACTION]:
Podemos definir la dirección del mail a la que queremos que lleguen los avisos de bloqueo:
destemail = root@localhost

En [JAILS]:

enable: Activamos o desactivamos el monitoreo del servicio con true o false.
port: Definimos el puerto del servicio.
filter: Nombre del filtro que utilizará la "cárcel" para detectar coincidencias.
logpath: Definimos que log tiene que monitorear.

A modo de ejemplo:

[DEFAULT]
ignoreip = 127.0.0.1 (Ignora la propia ip)
bantime = 600 
findtime = 600
maxretry = 3
backend = auto

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
#logpath = /var/log/secure
#logpath = /var/log/auth.log
maxretry = 3

Si modificamos parámetros para que los mismos se hagan efectivos tenemos que reiniciar el servicio de Fail2ban:

sudo service fail2ban restart

Ahora vamos a lo importante:

Instalar Fail2ban:

sudo apt-get install fail2ban


Hacer backup del archivo de configuración:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.orig


Ver reglas de iptables cargadas:

sudo iptables -L -n

Como mencionamos mas arriba, Fail2ban no se limita a SSH. Contiene filtros acciones predeterminados para muchos demonios servicios. Se pueden modificar o crear otros nuevos. En este caso como la idea es mostrar el de SSH vamos a probar loguearnos fallidamente a la IP de nuestro servidor con Fail2ban para ver si nos banea:

Intentos fallidos hasta el bloqueo
Vemos que ya no nos deja seguir intentando, se queda ahí. Esto es porque tengo configurado 5 intentos fallidos. Si reviso el log de Fail2ban se ve con mas claridad:

sudo cat /var/log/fail2ban.log | more

jueves, 4 de junio de 2020

DockerFile: Crear imagen personalizada con Docker

La otra vez veíamos en este impresionante post, como descargar una imagen, crear un contenedor, modificarlo y luego subir la imagen a Docker Hub para poder descargarla desde cualquier maquina del planeta tierra, y desde otras galaxias también (siempre que tengan el motor de Docker instalado).

Bueno, mucha gente me paró por la calle y me dijo "¿hay alguna forma de automatizar todo esto de manera que sean solo 2 clicks?". A lo que yo respondí: "No uso mouse, no hago clicks... y para tener tu contenedor con todo listo, solo tenes que ejecutar este comando":

sudo docker run --name VirtualArdillas -it ardillasenlared/ubuntu:ardillas /bin/bash

- Con esto te bajas la imagen de Ubuntu que subí la otra vez a Docker Hub y ya tenes todo listo para usar, no necesitas DockerFile, ¿para que lo queres? ¬¬
- Bueno, perdón que te contradiga, o mejor dicho, que me contradiga, pero si quiero personalizar esa imagen que está subida voy a tardar mas tiempo, porque esa imagen solo me sirve si busco lo que ya tiene instalado, de lo contrario una imagen a partir de un DockerFile seria mas útil.
- ¿Por que? ¿Que es DockerFile?.
- Dockerfile es un documento de texto que contiene todos los comandos que un usuario quiere ejecutar para crear una imagen. Docker puede construir imágenes automáticamente leyendo las instrucciones de Dockerfile. Usando docker build los usuarios pueden crear una compilación automatizada que ejecuta varios comandos y que nos sirve para instalar programas y/o realizar configuraciones que formaran parte de una imagen de manera simple y rápida.
- Que bien, ganaste. Me convenciste con eso del Docker Fail.
- DockerFile.
- Eso, y aprende a pronunciar.

En este DockerFile vamos a hacer lo mismo que la otra vez pero a partir de un archivo, repasemos:

1. Actualizar los repos:

apt-get update

También hicimos una actualización del sistema operativo con apt-get upgrade pero en este caso tenemos que evitar el RUN apt-get upgrade y dist-upgrade ya que hay muchos paquetes que pueden no actualizarse dentro de un contenedor sin privilegios. Podemos ejecutarlo manualmente luego.

2. Crear el usuario ardillasenlared

adduser ardillasenlared

3. Instalar nano, sudo, iputils-ping, net-tools, ssh:

apt-get install nano
apt-get install sudo
apt-get install iputils-ping
apt-get install net-tools
apt-get install ssh
apt-get install nmap (este en realidad no estaba, pero va de yapa)

4. Dar permisos de sudo al usuario ardillasenlared:

En el post hicimos esto:

nano /etc/sudoers

Y agregar lo siguiente:

ardillasenlared ALL=(ALL:ALL) ALL

Pero en el Dockerfile vamos a agregarlo al grupo sudo, el resultado es el mismo.

5. Y por ultimo corregir el error:

sudo: setrlimit(RLIMIT_CORE): Operation not permitted

Para ello teníamos que crear el archivo /etc/sudo.conf con la siguiente linea:

Set disable_coredump false

¿Como hacemos todo esto con un DockerFile? Así:

#Bajar la imagen base de Ubuntu 20.04
FROM ubuntu:20.04

#Actualizar repos e instalar iputils-ping, net-tools, ssh y nmap
RUN apt-get update && \
      apt-get -y install sudo nano iputils-ping net-tools ssh nmap

#Crear el usuario ardillasenlared con contraseña password y agregarlo a sudoers
RUN useradd -m ardillasenlared && echo "ardillasenlared:password" | chpasswd && adduser ardillasenlared sudo

#Crear archivo sudo.conf con la linea Set disable_coredump false para que no aparezca el error
RUN touch /etc/sudo.conf && echo "Set disable_coredump false" > /etc/sudo.conf

#Iniciar shell bash al levantar le contenedor con el usuario ardillasenlared
USER ardillasenlared
CMD /bin/bash


A la hora de crear nuestro Dockerfile siempre tenemos que tener en cuenta que su ejecución no tiene interacción, con lo cual tenemos que armarlo de manera que no tengamos que hacer absolutamente nada (por ejemplo, cuando hace un apt-get install programa siempre te pregunta si queres instalar las dependencias y demás, con el parametro "-y" le estamos diciendo que le diga que si a todo sin preguntar).

Una vez creado el archivo con ese código, pasamos a crear la imagen con todo lo que definimos en el Dockerfile. Para eso ejecutamos:

sudo docker build -t ubuntuardillas:1.0 . (hay un punto al final)


Si hacemos un sudo docker images vamos a ver una nueva llamada ubuntuardillas.

Luego levantamos un contenedor a partir de la imagen recién creada:

sudo docker run --name ardillas1.0 -it ubuntuardillas:1.0


Vemos que directamente nos da una shell de bash, como configuramos en el Dockerfile, y ademas nos loguea con el usuario ardillasenlared creado en el mismo procedimiento.

Vamos a probar un ping, nmap y luego a instalar algo con sudo:


Cuando me solicita la contraseña de sudo ingreso password que es la que configuramos en el Dockerfile.
Vemos que todo responde según lo esperado, y que el nmap a 192.168.2.106 nos indica que el puerto 22 esta abierto, entonces aprovecho y pruebo el ssh contra esa virtual:


Y vemos que tiene ssh instalado también.

En caso de querer cambiar la contraseña del usuario ardillasenlared tenes que ejecutar:

passwd ardillasenlared


Te va a solicitar primero la contraseña actual (password) y luego una nueva.

Para crear otro usuario podes seguir los siguientes pasos.

Con esto ya creamos nuestra imagen personalizada a partir de lo que definimos en el archivo Dockerfile.

Espero que le haya servido!

COMPARTAN, dejen de guardarse el conocimiento para uds, no sean egoístas!

Bye!

miércoles, 3 de junio de 2020

Subir imagen de Docker a Docker Hub

Recién buscaba como instalar Ubuntu con Docker (mas precisamente, como crear un contenedor con Ubuntu 20.04 a partir de una imagen de Docker Oficial), y la mayoría de los resultados me decía como instalar Docker en Ubuntu. Así que, si buscabas lo mismo que yo, este es el lugar.

¿Para que nos puede servir tener un contenedor con Ubuntu? Para un millón de cosas, pero por ejemplo, en un entorno de pruebas, en lugar de crear 2 o 3 máquinas virtuales con VirtualBox y Ubuntu podríamos simplemente crear 2 o 3 contenedores con dicho sistema operativo, algo que sería muchísimo mas rápido y práctico. Y yendo un poco mas lejos, podríamos tener una imagen de Ubuntu con todo lo necesario para que solamente tengamos que descargarla, levantar el contenedor y ya tendríamos todo a disposición. Esto es lo que vamos a hacer en este post.

Primero vamos al Docker Hub y buscamos la imagen Oficial de Ubuntu.
En este caso vamos a instalar la ultima (que es la 20.04) con el siguiente comando:

sudo docker pull ubuntu:latest

Si quisieramos otra versión podríamos revisar las etiquetas  y ver que por ejemplo para instalar la 19.10 deberíamos usar docker pull ubuntu:19.10 o si quisieramos la Bionic que es la 18.04 deberíamos ejecutar docker pull ubuntu:bionic.

Luego de ejecutar el comando aguardamos unos minutos dependiendo nuestra conexión y quedará descargada:


Para chequear:

sudo docker images


Ahora vamos a levantar un contenedor a partir de dicha imagen, llamado VirtualUbuntu00 y al mismo tiempo vamos a iniciar una shell de bash en el contenedor:

sudo docker run --name VirtualUbuntu00 -it ubuntu:latest /bin/bash

Vamos a verificar la versión del Kernel del mismo con:

uname -a


lunes, 1 de junio de 2020

Instalar Kubernetes en Azure

Bueno vamos a probar Kubernetes en Azure, así de una, sin vueltas, sin caretearla (?).
Para empezar ingresamos al Portal de Azure con nuestras credenciales y en "Inicio" a la izquierda vamos a ver los servicios que nos ofrece Azure para desplegar.
Uno de ellos es "Servicios de Kubernetes", clickeamos ahí:


Luego vamos a crear nuestro primer cluster haciendo click en "Agregar" o "Crear Servicio de Kubernetes":


Elegimos nuestra suscripción, creamos un nuevo grupo de recursos o resource group, elegimos el nombre del cluster y la región. Y mas abajo elegimos el tamaño del nodo y la cantidad, este paso es muy importante, porque al definir el tamaño del nodo básicamente estamos eligiendo las especificaciones técnicas (cpu, memoria, disco) que van a tener las maquinas virtuales que van a formar los nodos del cluster y esto no se podrá cambiar después de crearlo. El numero de nodos si se puede cambiar.
En mi caso elijo la maquina virtual mas barata que es la DS2 v2, que tiene un 2 CPU y 7GB de RAM.



Fijense que a la derecha aparecen los precios de las virtuales (Costo Mensual Estimado):



sábado, 30 de mayo de 2020

Rollback de Deployments y Namespace en Kubernetes

Hola Ardillas, para estos posts largos prefiero ir directamente al asunto y evitar chistes como el del hacker, así que arranquemos.

Para los que no quieren leer todo (aunque lo recomiendo) podríamos dividir el post en 3 grandes títulos que voy a marcarlos en mayúscula, azul y subrayado así TITULO
Los títulos son:
CREAR NAMESPACE
CREAR DEPLOYMENT
ROLLBACK DE UN DEPLOYMENT

Antes de avanzar con el post de rollback de un deployment en si vamos a ver que tengo corriendo actualmente en mi cluster de Kubernetes:

Para ver un listado de lo que tenemos corriendo en el cluster:

kubectl get all


Fijense que diferencia los PODs, de los servicios, de los deployments y las replicas.

Ver detalle de todos los PODs en el namespaces actual:

kubectl get pods -o wide


Ver detalle de todos los PODs en todos los namespaces:

kubectl get pods --all-namespaces  


En este caso vemos los mismos ya que tengo solo un namespace (los otros que aparecen son del sistema).

Ver cantidad de replicas:

kubectl get rs


Ver historial de cambios de un deployment:

kubectl rollout history deployment/nombredeldeploy