Mostrando entradas con la etiqueta Software. Mostrar todas las entradas
Mostrando entradas con la etiqueta Software. 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

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

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



viernes, 29 de mayo de 2020

Javascript PROMISES en 10 minutos

Hola mis ardillas! ¿como van?

La verdad es que a raíz de la impresionante recepción que tuvo el posteo anterior relacionado con la programación ¬¬, me pareció que sería una excelente idea dejarles otro video de Javascript.

Si, para los miles que me preguntaron, ya hablé con nathaner.io y le comente lo que había subido pero ya estaba al tanto, porque es un gran fan de este blog. Realmente se mostró muy entusiasmado, algo así:

No se si tanto en realidad ¬¬
Bueno, vamos al asunto.

En este video se explican las Promises (promesas) agregadas en ES6 (ECMAScript 6) de Javascript, se aborda la función ejecutor y se aprende a resolver o rechazar una promesa.

También explica como obtener los valores de la resolución de la Promise mediante el uso de then, o como capturar el motivo del rechazo de la Promise mediante el uso del catch.

Finalmente se revisa el método finally que les permitirá ejecutar algún código luego de que la Promise o bien se resolvió correctamente o fue rechazada.

Todo en 10 minutos, ¿que haces en 10 minutos? No me contestes.
Basta de promesas ¬¬
Les dejo el vídeo para que disfruten:


Tremendo. Emocionante (?).

Por si les interesa la programación les dejo su canal de Youtube: Programando el destino

Eso es todo amigos.

COMPARTÍ, ¿que te cuesta?
Demostrame que los programadores son mejores que los administradores de sistemas.

Hasta la próxima campeón (?)

jueves, 28 de mayo de 2020

OpenFortiVPN desde terminal, y aprende a usar tmux

Bueno, después del post de Kubernetes quedé exhausto (?), así que vamos con algo livianito, algo así como una ensalada informática (?).

Estás en tu casa, yo se que te encantan éstas situaciones, que las visualizas. Estás en tu casa, aburrido, en cuarentena, no hay nada en la tele, hace 10 minutos que pasas los canales y no encontras nada que te llame la atención. ¿Entonces que haces?. Pensas, "creo que este es un buen momento para adelantar algo de trabajo". Ya se que no es cierto, pero usemos la imaginación, necesito un pie para meter lo que viene en el post, ¿si?. Bueno, pensas, ¡que bonito sería trabajar este domingo desde casa! (así, con signos de exclamación y todo).
Te dirigís hacia tu maquina, la encendes (me encanta contar el paso a paso, perdón), inicia tu Kubuntu 20.04 y te dispones a trabajar. Pero te das cuenta de algo, no tenes acceso a los servidores de la oficina desde tu casa, empezas a sudar, pero de inmediato recordas que no habías conectado la VPN, cuando chequeas te das cuenta que el panorama es peor de lo que imaginabas, porque... no tenes un cliente VPN instalado. Entras en crisis, estás llorando desconsoladamente como un niño, te sonas la nariz con una servilleta y entras a Ardillas en la red para ver si hay una solución a tu problema. Entonces vas a la ventana de la derecha en el blog, donde dice "buscar en este blog" y escribis "cliente VPN Fortinet", o simplemente VPN, y aparece este post guiñandote el ojo, que te va a permitir conectarte a la VPN de tu trabajo, y seguir adelante este domingo sin tristezas...

Si bien existe una versión oficial de FortiClient para Linux a la que es posible acceder por CLI la verdad es que no la probé, y siendo que OpenFortiVPN siempre me pareció simple, fácil y la verdad es que nunca me dio problemas, prefiero recomendar este cliente para las conexiones VPN SSL con Fortinet.
De todas formas les dejo algunos links para todas las Plataformas:
El FortiClient para Windows lo pueden descargar desde este link.
Para OSX desde este link.
Para Android lo pueden descargar de aca.
Para Linux (Ubuntu, Fedora y Centos) pero con entorno gráfico pueden seguir estos pasos.
Y si tienen otra plataforma pueden acceder directamente a esta pagina.

Luego de darles las opciones oficiales, procedemos con la instalación del cliente en cuestión.

INSTALAR OPENFORTIVPN

Para instalar (en Debian):

sudo apt-get install openfortivpn


Para ver la ayuda:

man openfortivpn

Para conectarte:

sudo openfortivpn HOSTNAME:PUERTO -u USUARIO


Facilisimo, ¿no?

INSTALAR TMUX

Y ahora vamos con tmux que es un software que nos permite lanzar múltiples terminales (ventanas y paneles) dentro de una única pantalla. Muy útil cuando tenes que hacer varias cosas en simultaneo desde la terminal.

Para instalar tmux:

sudo apt-get install tmux

Para crear una ventana:

Primero escribimos tmux para ingresar a la aplicación y luego pulsamos:

Ctrl+B c

Abajo en la franja verde vamos viendo las terminales que creamos. Por ejemplo, yo cree 4:

0:bash 1:bash 2:bash 3:bash


El asterisco nos marca en que ventana estamos ubicados.

Para movernos a la ventana 1 presionamos:

Ctrl+B 1

En esta ventana dejo corriendo el cliente VPN:


Luego me dirijo a la ventana 2:

Ctrl+B 2

Y dejo corriendo un TOP:


Bueno, y así con todo ¬¬

Para listar todas las ventanas:

Ctrl+B w

Para cambiar el nombre de una ventana:

Ctrl+B ,

Para dividir paneles verticalmente:

Ctrl+B %


Para dividir paneles horizontalmente:

Ctrl+B  » + h

Para cambiar entre paneles:

Ctrl+B  tecla de flecha


Para cerrar la ventana actual:

Ctrl+B &

Para cerrar en panel actual:

Ctrl+B » + X

Bueno, esto fue todo, sencillo, pero emotivo (?).
No se porque sos tan egoísta y no compartís, pero tenes que saber que com par tir, extender la mano a tus hermanos, com par tir para hacer un mundo nueeevo.

Perdón, chau.

PD: No me juzguen ni lo cuenten.

lunes, 25 de mayo de 2020

Kubernetes para principiantes

Bueno, ya vimos Ansible, ya vimos Docker y ahora vamos con Kubernetes.
No, hoy no te voy a hacer el chiste del hacker, aunque si, me sigue causando gracia.
Hoy vamos al grano, porque es un post largo que creo que les va a resultar útil.

Kubernetes (K8s) es un proyecto open source que nació en Google y sirve para orquestar contenedores (Docker), aunque no nos permite crear imágenes, ni subirlas al registry, solo sirve para gestionarlos. Es un buen complemento, sino el ideal, de Docker (motor de contenedores) para los entornos de producción grandes en donde Docker solo, no puede escalar.
Distribuye de la mejor forma posible la carga de todos los NODOS.

POD: La unidad mas chica en Kubernetes es un POD, que agrupa dentro suyo diferentes contenedores (en general uno solo) que tienen un componente (kubelet) "que le avisa" al NODO MASTER si la aplicación se encuentra o no corriendo. Y si no esta corriendo entonces Kubernetes levanta una nueva para mantener la cantidad de replicas que configuramos para que se encuentren corriendo. Estas instancias se levantan en base a una imagen, como los containers de Docker.
Los PODs por definición son stateless, y Kubernetes los crea o destruye de manera constante en función de las necesidades. Si los PODs deben tener datos persistentes, deben utilizarse volúmenes.
Los containers levantados en el mismo POD comparten el stack de red y pueden hablar entre si, así como también pueden compartir un volumen y acceder a la misma información. Cada POD tiene su propia direccion IP.
La desventaja de que los containers dentro del POD compartan el stack de red es que no podes tener 2 containers adentro del mismo POD escuchando en el mismo puerto, porque al tener la misma red hay colisión de puertos, pero esto se resuelve poniendo esos 2 containers en PODs diferentes.

NODO: Un NODO conjunto de PODs.

NODO MASTER: Se encargan de coordinar el clúster. Tiene que haber mínimo uno por cluster. Generalmente no ejecutan contenedores, sino que deciden en qué nodo se ejecuta cada contenedor. Usualmente son 3 nodos para alta disponibilidad. Esto es debido a etcd, que guarda el estado global del clúster y su información es crítica. Si hay 3 nodos de etcd y se pierde uno, el sistema puede seguir funcionando, ya que los dos nodos restantes pueden seguir verificándose el uno al otro. Pero ya no se puede perder ningún otro. Por eso, los nodos de etcd se escalan siempre de dos en dos, si hay 3 se puede perder 1, si hay 5 se pueden perder 2 y así sucesivamente.

El NODO MASTER ejecuta los siguientes procesos:
- kube-apiserver que es la forma en la que interactuamos con los otros NODOS del cluster.
- Kubernetes Controller (kube-controller) que compara el estado actual del cluster con el estado que debería tener (chequea por ejemplo si la cantidad de PODs que hay en un NODO es la que debería haber, y sino los levanta).
- Kubernetes Scheduler (kube-scheduler) que es el que se encarga de escuchar al controller y cuando el controller le avisa que le faltan PODs, el scheduler se fija en que NODO pueden estar mejor ubicados y los levanta ahí.
- etcd que es una base de datos que se utiliza para mantener la configuración global del clúster. La información contenida en etcd es crítica y debe tenerse siempre un plan de copias de seguridad.

NODO MINION (WORKERS): Se encargan de la ejecución de los contenedores desplegados en el clúster. Tienen instalado el agente de Kubernetes llamado kubelet (que se encarga de monitorizar que un contenedor se inicie, funcione correctamente y en caso de error, reiniciarlo inmediatamente) y un kube-proxy, que gestiona la red virtual y las IPs virtuales que de cada contenedor.

CLUSTER: Es un conjunto de NODOS.
Entre sus principales funciones se encuentran:
. Permite Escalar
. Permite balanceo de carga
. Reparación automática del contenedor (si falla o muere, el cluster automáticamente levanta uno nuevo)
. Distribución inteligente de la carga de trabajo
. Permite almacenamiento persistente en la nube
. Optimiza nuestros recursos
Para entornos de Workstation se puede usar Minikube .

SERVICES: Los PODs no son visibles más allá de su propio contenedor. Para solucionar esto, existen los services, que son objetos que permiten reenviar tráfico de red a un conjunto de PODs, lo cual nos permite acceder a nuestras aplicaciones. Los services utilizan servidores DNS instalados en la red para registrarse en esta y permitir el acceso por nombres de servicio a sus PODs, facilitando el descubrimiento de los mismos.

VOLUMENES PERSISTENTES: Es una pieza de almacenamiento en el cluster que sirve para guardar los datos de nuestros PODs. Su ciclo de vida es independiente de los PODs individuales.

LABELS/SELECTORS: Los selectors son filtros de las etiquetas. Las labels son muy útiles cuando por ejemplo manejamos 500 contenedores que hacen de webserver y cuya etiqueta es webserver, entonces, si queremos eliminarlos a todos ponemos que borre todo lo que tenga esa etiqueta en lugar de borrar uno por uno.

En Kubernetes, podemos exponer nuestras aplicaciones de varias maneras:
ClusterIP, es el servicio que se genera de forma predeterminada y nos permite acceder a los servicios dentro del clúster. Este servicio no es accesible desde Internet, para que lo sea necesitaríamos habilitar el acceso a través del proxy de Kubernetes.
- Usando un servicio de tipo Kubernetes NodePort, que expone la aplicación en un puerto a través de cada uno de sus nodos. Sólo un servicio por puerto. No es para ambientes en Producción.
- Usando un servicio de tipo Kubernetes LoadBalancer, que crea un balanceador de carga externo que apunta a un servicio Kubernetes en su clúster.
- Usando un Kubernetes Ingress Controller, que permite un enrutamiento HTTP basado en host o URL. Ingress no es un tipo de servicio como el resto, se trata más de un enrutador que permite la entrada al clúster y gestionar el acceso a múltiples servicios. Hay que tener en cuenta que un Ingress Controller generalmente no elimina la necesidad de un LoadBalancer externo: el Ingress Controller solo agrega una capa adicional de enrutamiento y control detrás del balanceador de carga.
Estos son los patrones básicos para enrutar el tráfico externo a su clúster Kubernetes.

MINIKUBE: Es un proyecto que nos permite probar Kubernetes en una maquina local y utiliza maquinas virtuales de Virtual Box (por defecto). Kubernetes necesita al menos 3 nodos para funcionar, lo cual no siempre es posible en una maquina local. Para eso se creó Minikube, que es una versión reducida de Kubernetes, que corre en una única máquina virtual que hace de maestro y esclavo a la vez.
Ademas de Minikube también necesitara instalar kubectl para poder comunicarse con el servidor Kubernetes.

Kubernetes tiene también una parte Web, con un dashboard que permite monitorizar y gestionar el clúster. Minikube viene instalado con uno por defecto.

DEPLOYMENT: Para mantener los PODs prestando servicio sin interrupción utilizamos los deployments, acá definimos cuantas replicas queremos, como queremos desplegarlos, como queremos escalar y Kubernetes se encarga de mantener el clúster funcionando. Los deployments crean replication controllers que por defecto mantienen el número de réplicas que especificamos en el despliegue, pero nos permitirán cambiar este numero a futuro si así lo deseamos.

Bueno, hasta acá toda la teoría, pero estas aburrido, ¿no?
Queres tocar, queres poner manos a la obra, queres revolcarte en este chiquero (?).
Empecemos:


sábado, 23 de mayo de 2020

Curso Javascript - EVENTOS [addEventListener]

Hola mis ardillas queridas! ¿como van?
Bueno, últimamente cuando voy por la calle me paran muchos programadores que me dicen, ¿y las entradas de programación para cuando?
A lo que yo respondo:

Sin embargo, la otra vez me quedé pensando, y me dije a mi mismo, ¿por que no?.
La cuestión es que me decidí a hacer un post de programación, mas precisamente de Javascript.
Me senté frente a mi computadora, y me acordé algo esencial: No se programar.
Entonces me fui a dormir.
Pero a la mañana siguiente, mientras desayunaba mi café con leche y tocino (?), recordé que alguna vez un programador escribió como invitado en este blog.
Específicamente, escribió un post llamado Primeros pasos con HTML y CSS que pueden ver haciendo click AQUI.
Entonces decidí invitarlo nuevamente a que colabore con este increíble blog de informática y tecnología. Así que fui a su canal de Youtube, vi los títulos de sus videos y le robé el mas interesante (?), que es el del título.
En este vídeo se explica el manejo de Eventos en Javascript, puntualmente el Evento Click para los botones. Se muestra el uso del atributo onclick así como el manejo de eventos mediante los Listeners utilizando el método addEventListener.
Sin mas preámbulos, disfrutenlo:


Increíble, ¿no?.
Para que se queden tranquilos, porque se que estas cosas no les gustan, le voy a decir que lo tomé prestado, pero antes de decirle quiero simplemente ver si sigue siendo seguidor de este sensacional blog.
De paso lo saludo, bienvenido nuevamente Hades_Ra, ahora conocido como nathaner.io.
Por si les interesa la programación les dejo su canal de Youtube: Programando el destino

Eso es todo amigos.

COMPARTÍ, ¿que te cuesta?
Demostrame que los programadores son mejores que los administradores de sistemas.

Nos vemos (?)

jueves, 21 de mayo de 2020

Ocultar archivo usando esteganografia en Linux

Yo se que el post anterior te dejó pensando, se que ahora estás empezando a creer en vos mismo y está naciendo en vos un nuevo hacker.
Y si alguien te dice que no... Nunca dejes que nadie te diga que no sos un hacker 
Pero mi querida ardilla, yo quiero que vayas mas allá, quiero que sueñes conmigo, quiero que ahora te imagines que sos un espía, un espía que maneja información confidencial, toda guardada en un archivo txt (?). Y tu misión es copiar ese archivo con esa información en el escritorio de Ramón (?). Pero Ramón comparte la PC con su esposa y sus hijos, y el archivo tiene que si o si quedar en su escritorio, aunque nadie, excepto Ramón, puede acceder a esa información, ¿como haces?

Usando esteganografía, muy fácil, ¿no?.

Ahora, ¿que carajo es la esteganografía?.
Según Wikipedia, la esteganografía (del griego στεγανος steganos, "cubierto" u "oculto", y γραφος graphos, "escritura") trata el estudio y aplicación de técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, para ser enviados y que no se perciba el hecho.
Impresionante.

Ahora que tiene que ver Ramón, la esposa, la esteganografia... Ni idea, pero me pareció que tenía que hacer una intro ¬¬
No, mentira. Lo que vamos a hacer es valernos de la esteganografia para poder dejar el archivo .txt con la información confidencial en el escritorio de Ramón, y que su esposa y sus hijos no se den cuenta.

Para ello, vamos a usar un software llamado Outguess. Que se encuentra en los repositorios de nuestro GNU/Linux Debian.

Para instalarlo:

sudo apt-get install outguess


Para ocultar archivo:

outguess -k "clavesecreta" -d /root/textooculto.txt /root/ImagenOriginal.jpg /root/ImagenConTextoOculto.jpg

Acá lo que hacemos es ocultar el archivo textooculto.txt dentro del archivo de imagen ImagenOriginal.jpg. La unión de ambos dará como resultado el archivo ImagenConTextoOculto.jpg que al abrirlo veremos la imagen, pero que dentro suyo, tendrá albergando en su interior (?) el archivo textooculto.txt.
La clavesecreta es la que nos va a pedir luego cuando necesitemos "desocultarlo".


Para "desocultarlo":

outguess -k "clavesecreta" -r /root/ImagenConTextoOculto.jpg ArchivoOcultoDesocultado.txt

Luego de esto, veremos el archivo que teníamos que aparentemente era solo una imagen (ImagenConTextoOculto.jpg) y el archivo .txt con la información que habíamos agregado antes (ArchivoOcultoDesocultado.txt).


No lo podes creer, ya lo sé. Esto de internet es una locura (?).
Ya sos un espía, tene cuidado.

Compartí de una vez, dale hermano, no seas egoísta, ¿que te cuesta?

Te mando un beso (?).

sábado, 16 de mayo de 2020

Instalar Ansible y crear Playbook

Hola mis queridas ardillas! ¿como van después de tanto tiempo?
Como nadie lee esta parte vamos a lo nuestro ¬¬.
En el post de hoy vamos a ver como instalar Ansible y crear un Playbook que nos permita instalar Apache, y en caso de estar ya instalado, iniciar el servicio si no lo está.

Supongo que si estas acá ya sabes lo que es Ansible, pero si no lo sabes, según Wikipedia Ansible es una plataforma de software libre para configurar y administrar ordenadores. Ansible es categorizado como una herramienta de orquestación. Gestiona nodos a través de SSH y no requiere ningún software remoto adicional (excepto Python 2.4 o posterior​).

Para instalar Ansible:

sudo apt-get install ansible

Creamos el archivo con el Playbook:

nano InstalarIniciarApache.yml

Y pegamos lo siguiente:

---
- name: Instalar Apache
  hosts: Webserver
  user: root
  become: true

  tasks:

  - name: Instalar Apache
    apt:
      name: apache2
      state: present

  - name: Encender Apache
    service:
      name: apache2
      state: started

Ctrl + O para guardar.
ENTER para mantener el nombre.
Ctrl + X para salir.

Que manejo del teclado impresionante que tenes.
Presten atención a los espacios y a cada mínimo detalle de la sintaxis porque sino básicamente no funciona y podes estar horas para resolverlo... si lo resolves ¬¬

Ahora vamos a definir hosts que en nuestro Playbook llamamos Webserver y que van a ser aquellos a los que le vamos a aplicar nuestro Playbook y en consecuencia, le vamos a instalar Apache o vamos a levantar el servicio si es que se encuentra detenido.

Editamos el archivo /etc/ansible/hosts y agregamos los nodos sobre los cuales vamos a realizar las tareas automáticas:

sudo nano /etc/ansible/hosts 

Buscamos la linea que dice [webservers] y agregamos, en mi caso, las 2 IPs de los nodos de mi red:


Una aclaración importante, todo en Linux es casesensitive, o sea si en el Playbook pusieron Webserver con la "W" en el host también va con "W", porque si lo ponen con "w" (minúscula) no va a funcionar.
Para saber la ip de la maquina podes ejecutar ifconfig o ip addr.
Ctrl + O para guardar.
ENTER para mantener el nombre.
Ctrl + X para salir.

Muy bien con ese teclado, hacker.

Bueno, ahora tenemos que configurar la parte de la autenticación con los nodos, que lo vamos a hacer con llave SSH.
En la maquina central/principal/donde instalamos Ansible ejecutamos:

ssh-keygen -t rsa

Presionamos ENTER ambas veces:


Una vez realizado este paso tenemos 2 archivos en nuestro home, mas precisamente en /home/tusuario/.ssh a saber:

id_rsa y id_rsa.pub



Una es la publica (si, la que dice .pub, muy bien, estas aprendiendo demasiado rápido). La publica la copiamos en cada nodo remoto con el siguiente comando:

ssh-copy-id -i id_rsa.pub root@192.168.2.111

Deben reemplazar la ip por la de sus nodos. Ponemos "yes" y ya queda copiada:


Fijense que nos dice que probemos loguearnos de esta forma en la maquina remota:

ssh 'root@192.168.2.111'

Y no debería pedirnos password. Si les pasa esto:


Es porque no tienen permisos para loguearse con root por SSH.
Lo que tienen que hacer es editar el archivo /etc/ssh/sshd_config.
Buscar la linea "PermitRootLogin" y ponerle yes.
Por las dudas verifiquen que la siguiente linea también se encuentre en yes:
PubkeyAuthentication yes


Reinician el servicio y prueban de nuevo:

service ssh restart 

Ya con esto tenemos conectividad desde la maquina principal hacia los nodos.
Para verificar ejecutamos:

ansible all -m ping -u root

Y vemos que ambos nodos responden (ignoren mi Warning de Python ¬¬)


Bueno, ahora viene la hora de la verdad, probar nuestro Playbook para ver si nos instala Apache. Primero verifico que ninguno de los 2 nodos lo tiene instalado:

service apache2 status

Luego ejecutamos nuestro Playbook:


Como vemos en uno de los nodos se instalo bien y en el otro nos dio error.
Vamos a verificar que este el servicio iniciado en el que se instalo bien:

service apache2 status


Y en el otro sigue sin levantar:


Para evitar el error de Python con Ansible lo que hice fue configurar manualmente para que use el interprete de Python3:

ansible-playbook InstalarIniciarApache.yml -e 'ansible_python_interpreter=/usr/bin/python3'

Y ahí se instalo correctamente:


Verificamos que quedo instalado:


Por ultimo, probamos bajar el servicio de Apache en el host remoto para luego ejecutar el Playbook a ver si lo levanta. Nos conectamos al host remoto:

ssh 'root@192.168.2.111'

Para bajar el servicio ejecutamos:

service apache2 stop 

Para verificar el estado:

service apache2 status

Luego salimos del host remoto con exit y ejecutamos el Playbook:

ansible-playbook InstalarIniciarApache.yml -e 'ansible_python_interpreter=/usr/bin/python3'

Por ultimo nos logueamos en el remoto de nuevo y vemos el estado de apache:

ssh 'root@192.168.2.111'

service apache2 status




Funciono :)

¿Increíble no? Esto de las computadoras es una verdadera locura.

Para seguirme en Facebook: PINCHA ACA
Para seguirme en Twitter: PINCHA ACA o ACA
Podes suscribirte a los mails también (a la derecha, donde dice ingresa tu mail), tremendo, este blog tiene todo.
Menos Youtube, muy pronto, próximamente, coming soon!

Si te sirvió compartí, no seas egoísta.
Hasta la próxima!