OpenShift v3 (Mega Tutorial) – Parte 1 – Instalación base

OpenShift

OpenShift v3 – Instalación base

Disponemos de dos procesos de instalación:

  1. Simplificado: Que a su vez consta de tres versiones. La información de este mecanismo no la detallaré en este tutorial, pero si queréis probarlo lo tenéis disponible en la documentación de OpenShift
    • Contenedor Docker: Podemos obtener de dockehub una imagen all-in-one.
    • Descargar el binario: Red Hat ofrece binarios para ser ejecutados en nuestro sistema. Otro modelo all-in-one disponible en el github de OpenShift.
    • Compilar el código fuente: Es una alternativa al binario, compilar el código fuente de OpenShift. También all-in-one en github
  2. Avanzado: Hace uso de Ansible y será el que sigamos en este tutorial, por aproximarse a lo que sería un entorno de producción.

¿Empezamos?

La estructura de máquinas virtuales será la siguiente:

  • 4 máquinas virtuales con al menos 1024MB de RAM y 1vCpu(opcionalmente pueden reducirse a 2 máquians, master y node, en cuyo caso necesitarán al menos de 2048MB de RAM)
    • gw.osc.test (Máquina gateway con servicios DNS)
    • master.osc.test (Máquina master)
    • node-[1-2].osc.test (Nodos de computación)
  • Instalación de Centos 7 mínima, sin entorno gráfico
  • Conexión a internet desde todas las máquinas.
  • IP estática para cada una de las máquinas.

 

Todas las operaciones de instalación se realizarán con el usuario root.

Lo primero de todo será instalar y configurar un servidor DNS, que aunque puede ir en Master, se aconseja que sea externo, yo lo haré en Gateway

yum install bind bind-utils
yum install bind-utils

El siguiente paso es configurar el servidor, por ello editaremos el fichero /etc/named.confde la siguiente manera:


//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
listen-on port 53 { any; };
//listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
forwarders { 8.8.8.8; };

/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;

dnssec-enable no;
dnssec-validation no;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};

zone "osc.test" IN {
type master;
file "osc.test.zone";
};

zone "100.168.192.IN-ADDR.ARPA." IN {
type master;
file "100.168.192.IN-ADDR.ARPA.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Y ahora editaremos los ficheros de zona y de zona inversa que estarán en /var/named/osc.test.zone/var/named/100.168.192.IN-ADDR.ARPA.zone respectivamente. Esta configuración es de ejemplo, las IP, los hostname, dominios, etc, se podrán ajustar a vuestras necesidades:


$ORIGIN osc.test.
$TTL 3H
@ IN SOA osc.test. root.osc.test. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS gw.osc.test.
@ IN A 192.168.100.99
gw     IN A 192.168.100.99
master IN A 192.168.100.100
node-1 IN A 192.168.100.101
node-2 IN A 192.168.100.102
; This wildcard record is intended to allow OpenShift router to route applications by hostname
*.apps.osc.test. 300 IN A 192.168.100.100

$ORIGIN 100.168.192.IN-ADDR.ARPA.
$TTL 3H
@ IN SOA osc.test. root.osc.test. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS gw.osc.test.
99  PTR gw.osc.test.
100 PTR master.osc.test.
101 PTR node-1.osc.test.
102 PTR node-2.osc.test.

Configuramos el propietario

chown named:named /var/named/{osc.test.zone,100.168.192.IN-ADDR.ARPA.zone}

Ahora sólo queda arrancar y habilitar el servicio.

systemctl start named
systemctl enable named

 

Para finalizar ajustaremos el firewall


firewall-cmd --add-service=dns

firewall-cmd --add-service=dns --permanent

Y desde uno de nuestros nodos, que debería apuntar a la IP de Gateway como DNS en el fichero /etc/resolv.conf, probamos una transferencia de dominio:


root@node-1 ~]# dig -t axfr osc.test

; DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 -t axfr osc.test
;; global options: +cmd
osc.test. 10800 IN SOA osc.test. root.osc.test. 0 86400 3600 604800 10800
osc.test. 10800 IN NS gw.osc.test.
osc.test. 10800 IN A 192.168.100.99
gw.osc.test.     10800 IN A 192.168.100.99
master.osc.test. 10800 IN A 192.168.100.100
node-1.osc.test. 10800 IN A 192.168.100.101
node-2.osc.test. 10800 IN A 192.168.100.102
osc.test. 10800 IN SOA osc.test. root.osc.test. 0 86400 3600 604800 10800
;; Query time: 0 msec
;; SERVER: 192.168.100.99#53(192.168.100.99)
;; WHEN: Thu Sep 01 12:19:41 UTC 2016
;; XFR size: 7 records (messages 1, bytes 202)

Firewall

Como preparación para el resto de las configuraciones, vamos a dejar configurado el firewall.

Puertos:

Nodo a Nodo
Puerto Protocolo Descripción
4789 UDP Requerido para la comunicación SDN entre los pods en diferentes nodos
Nodos a Master
Puerto Protocolo Descripción
8053 TCP/UDP Para dnsmasq
4789 UDP Requerido para la comunicación SDN entre los pods en diferentes nodos
8443 TCP Para el acceso al API de gestión
Master a Nodos
Puerto Protocolo Descripción
80 TCP Para el enrutado de las aplicaciones
4789 UDP Requerido para la comunicación SDN entre los pods en diferentes nodos
10250 TCP Para que el Master pueda hacer proxy a través de kubelet con los comandos oc

Instalando paquetes

Llegó el momento de instalar cosas interesantes. Empezaremos por los paquetes básicos:


yum install wget git net-tools bind-utils iptables-services bridge-utils bash-completion

Vamos a instalar también los repositorios de EPEL, aunque los tendremos deshabilitados


yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

Ahora vamos a instalar, sólo en el Gateway, openshift-ansible, que será la herramienta que utilicemos para instalar OpenShift.

Primero instalaremos ansible, y luego clonaremos el repositorio de github de openshift-ansible. Debemos asegurarnos de estar en la rama master, que será la última versión estable


yum -y --enablerepo=epel install ansible pyOpenSSL

cd ~


git clone https://github.com/openshift/openshift-ansible

cd openshift-ansible

git checkout master

 

Tiempo de instalar y configurar docker para usar el registry interno:


yum install docker

sed -i '/OPTIONS=.*/c\OPTIONS="--selinux-enabled --insecure-registry 172.30.0.0/16"' /etc/sysconfig/docker

cat <<EOF > /etc/sysconfig/docker-storage-setup
DEVS=/dev/vdb
VG=docker-vg
EOF
docker-storage-setup
systemctl start docker
systemctl enable docker

Al modificar OPTIONS hemos configurado docker para que confíe en cualquier registry dentro de esa subred, sin necesidad de validar certificados. Docker, por defecto, requiere el uso de certificados para acceder a cualquier registry. Esto es una medida de seguridad. Se puede securizar el registry interno, pero eso está más allá del objetivo de este tutorial.

 

Durante la configuración del almacenamiento persistente en la opción DEVS selecciona el dispositivo que tengas disponible.

Por último, configuraremos el Master para que pueda acceder vía SSH a los nodos. Crearemos una clave de tipo rsa con passphrase en blanco


ssh-keygen
ssh-copy-id root@master.osc.test
ssh-copy-id root@node-1.osc.test
ssh-copy-id root@node-2.osc.test

 

Y hasta aquí la instalación básica. En el próximo post empezaremos con la instalación de nuestro cluster, pero primero veremos cómo funciona Ansible. Nos vemos.

Tutorial OpenShift v3 – Parte 2

Deja un comentario

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