0% encontró este documento útil (0 votos)
110 vistas28 páginas

OpenShift Uso

Este documento describe los procedimientos para utilizar un cluster OpenShift. Explica los conceptos clave como contenedores, imágenes y Dockerfile. Luego detalla los planes de control y operación de OpenShift, incluidos los procedimientos para la administración del cluster, autenticación, despliegue de aplicaciones, enrutamiento, redes y servicios. Finalmente incluye una sección de bibliografía sobre OpenShift versión 4.

Cargado por

cesar.econocom
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
110 vistas28 páginas

OpenShift Uso

Este documento describe los procedimientos para utilizar un cluster OpenShift. Explica los conceptos clave como contenedores, imágenes y Dockerfile. Luego detalla los planes de control y operación de OpenShift, incluidos los procedimientos para la administración del cluster, autenticación, despliegue de aplicaciones, enrutamiento, redes y servicios. Finalmente incluye una sección de bibliografía sobre OpenShift versión 4.

Cargado por

cesar.econocom
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 28

1

PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

https://www.youtube.com/playlist?list=PLiCqqNxsrxJdbcEFKLASxNhUqZp_vvt3A
https://www.youtube.com/playlist?list=PLiCqqNxsrxJdbcEFKLASxNhUqZp_vvt3A
https://www.youtube.com/playlist?list=PLiCqqNxsrxJdbcEFKLASxNhUqZp_vvt3A

C.D.G. - 1
2
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

1.- Uso del Cluster: Listado Procedimientos 3


1.1.- Plano de Control: Administración Cluster. 3
1.2.- Plano Operación: Despliegue Aplicaciones. 5
2.- Gestor de Contenedores 6
2.1.- Contenedores 6
2.2.- Imágenes de Contenedor. 6
2.3.- Dockerfile. 8
3.- OpenShift Versión 4 9
3.1.- Plano de Control: Administración Cluster. 9
3.1.1.- API Server: Interacción con el Cluster. 9
3.1.2.- Inventario: Recursos y Estado. 12
3.1.3.- RBAC: Autenticación y Autorización. 15
3.1.4.- Scheduling: Gestión Despliegues. 18
3.1.5.- Registry: Imágenes de Contenedor. 19
3.1.6.- Monitorización: Consola Web, Métricas, Logs. 19
3.2.- Plano Operación: Despliegue Aplicaciones 20
3.2.1.- Lógica: Build. 20
3.2.2.- Lógica: Deploy. 21
3.2.3.- Lógica: Ingress. 23
3.2.4.- Lógica: SDN. 24
3.2.5.- Lógica: Service. 25
3.2.6.- Datos: Persistencia. 27
4.- Bibliografía 28
4.1.- OpenShift Versión 4. 28

C.D.G. - 2
3
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

1.- USO DEL CLUSTER: LISTADO PROCEDIMIENTOS


1.1.- PLANO DE CONTROL: ADMINISTRACIÓN CLUSTER.
PROCEDIMIENTOS UTILIZACIÓN DEL CLUSTER:
PLANO DE CONTROL – ADMINISTRACIÓN CLUSTER

API Server Login Who am I? Connect Command GIT


Interacción ✓Client OC ✓Client OC ✓Check Cluster: ✓Config Repo
✓Bash Connections CRIO/Kubelet ✓Clone
Cluster ~/.kube/config
completion ✓Check ✓Branch
✓Kubeadmin ✓External Registry Almacenamiento:
✓X.509 ✓External Cluster PV/PVC
✓Troubleshoot ✓External Cloud ✓Troubleshoot

Inventario Project Recurso Estado Applications Config


Recursos y ✓Crear ✓Crear ✓Recursos ✓Template ✓Secret
✓Borrar ✓Editar ✓Eventos -Procesar ✓ConfigMap
Estado
✓Crear as user ✓Borrar ✓Logs -Crear
✓Bootstrap ✓Etiquetar -BE efímero/persistente
-FE webserver/alone
✓Anotar -APP: FE+BE
✓Rsh/rsync/cp ✓Helm Chart
✓Debug

RBAC Add User Remove User Permisos Bindings Impersonate


Autenticación y ✓OAuth: ✓OAuth: ✓Rules ✓User  Role/CRole ✓Sudo… para el
Proveedor Id. Proveedor Id. ✓Role Scope: ✓SA  SCC cluster.
Autorización
✓Type User: ✓Type User: -Role ✓Group Role/CRole
-Regular -Regular -Cluster Role(CRole) ✓Self-provisioner,
-System -System ✓Role Predefined: eliminar la
-SA -SA -admin capacidad de crear
-edit
✓Identity ✓Identity -view
proyectos.
✓Group ✓Group -self-provisioner
-basic-user
-cluster-admin
-cluster-status
✓SCC Predefined:
-anyuid
-restricted
-privileged
-hostaccess
-hostmount-anyuid
-hostnetwork
-node-exporter

Scheduling Scale Quotas Deploy Limits EndPoint NodeSelector Taints /


Gestión EndPoint ✓Deploy ✓Deploy EndPoint Toleration
✓Scale -compute-resource - ✓Deploy Node
Despliegues -core-objects-counts ✓Project
✓Horizontal - ✓Deploy
✓Project - ✓Project
Autoscaler -
✓Troubleshoot ✓Troubleshoot - ✓Project
✓Troubleshoot
✓Troubleshoot -
✓Troubleshoot
-Label Nodos

C.D.G. - 3
4
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PROCEDIMIENTOS UTILIZACIÓN DEL CLUSTER:


PLANO DE CONTROL – ADMINISTRACIÓN CLUSTER

Registry Install Expose Route IS=Image Stream


Blueprints ✓ Instalar ✓Cluster Operator ✓Crear IS
✓Credentials Reg. Externo ✓Push/Pull IS
✓Secret Credentials Reg. Externo
✓Troubleshoot Push/Pull Reg. Externo
-Token caducado: regenerar Secret + IS

Monitorización Métricas Console Histórico/Logging


Métricas ✓Personalizar Login

C.D.G. - 4
5
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

1.2.- PLANO OPERACIÓN: DESPLIEGUE APLICACIONES.


PROCEDIMIENTOS DE UTILIZACIÓN DEL CLUSTER:
PLANO OPERACIÓN – APLICACIONES

Lógica Build Deploy Rutas/Ingress SDN Servicio


Comunicación ✓Ensamblado ✓Imagen Contenedor ✓HTTP ✓Whitelist Network ✓Troubleshoot
-Directo ✓Procesar Plantilla ✓Certificado Self-Signed Policies config: -Selector SVC
-Inyección ✓Inyección Variables ✓HTTPS-Edge -deny-all -Puerto
Dependencias ✓Montaje Volúmenes ✓HTTPS-Passthrough -allow-from-ingress
✓Pipeline ✓Rollout ✓HTTPS-Reencrypt -multitenant
Construcción ✓Rollback ✓Encapsulado Ingress
-allow-specific
-S2I -allow-pods-projects
✓Triggers en Ruta
-Inline Docker ✓Activar políticas
✓Hooks Lifecycle ✓Troubleshoot HTTPS
✓Triggers Ingress
✓Probes -Certificado no Válido
✓Hooks Web -etiqueta ingress
✓Troubleshoot controller
✓Troubleshoot
Permisos: ✓Verificación
Ensamble
-Síntomas: status Network Policy
-Detección
-Saltarlas: SA-SCC
Código Fuente ✓Whitelist en
-Adaptarse:Dockerfile
-Dependencias Bootstrap Proyecto
✓Troubleshoot
✓Troubleshoot -multitenant
Service Discovery
Construcción ✓Troubleshoot
-Docker
-Compilador
-Dependencias
-Error Código

Datos PV PVC Volumen Disponibilidad


Persistencia ✓Volume Plugin ✓Create ✓Create ✓Operadores
Storage Class ✓Troubleshoot ✓Troubleshoot Aplicación
✓Machine ✓Troubleshoot
Config
Operator
✓Troubleshoot

C.D.G. - 5
6
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

2.- GESTOR DE CONTENEDORES


2.1.- CONTENEDORES
GESTOR DE CONTENEDORES
podman ps <format>
sudo podman ps --format="{{.ID}} {{.Names}} {{.Status}}"
sudo podman ps -a > /tmp/my-containers
podman image tree <id>
sudo podman image tree ae96a4ad4f3f --whatrequires
podman logs <contenedor/id>
sudo podman logs -f mysql
podman exec <contenedor> <cmd>
sudo podman exec -it mysql /bin/bash
sudo podman exec -it mysqldb-port
/opt/rh/rh-mysql57/root/usr/bin/mysql -uroot items -e "SELECT * FROM Item"
sudo podman exec mysql
/bin/bash -c 'mysql -uuser1 -pmypa55 -e "select * from items.Projects;"'
podman run <imagen>
sudo podman run --name mysql-2 -it rhscl/mysql-57-rhel7 /bin/bash

sudo semanage fcontext -a -t container_file_t '/var/local/mysql(/.*)?'


sudo restorecon -R /var/local/mysql
sudo podman run -d --name mysql
-e MYSQL_DATABASE=items -e MYSQL_USER=user1
-e MYSQL_PASSWORD=mypa55 -e MYSQL_ROOT_PASSWORD=r00tpa55
-v $PWD/work/data:/var/lib/mysql/data
-v $PWD/work/init:/var/lib/mysql/init
-p 13306:3306
--ip 10.88.100.101 do180/mysql-57-rhel7
podman stop <nombre>
sudo podman stop mysql-1
podman rm
sudo podman rm mywebserver myflaskserver 860a4b23
sudo podman rm -f -a
sudo podman rm -f –latest

2.2.- IMÁGENES DE CONTENEDOR.


IMÁGENES DE CONTENEDOR
podman images <format>
sudo podman images --format "table {{.ID}} {{.Repository}} {{.Tag}}"
sudo podman images -a --sort repository --no-trunc --format json
sudo podman images –-noheading --filter dangling=true
podman inspect <nombre imagen>
sudo podman inspect -f '{{ .NetworkSettings.IPAddress }}' mysql
podman diff <nombre imagen>
sudo podman diff --format json official-httpd
skopeo inspect <ruta> --tls-verify={true/false}
--creds <user>:<pass>
skopeo inspect oci:/home/user/myimage{
skopeo inspect containers-storage:myimage
skopeo inspect docker://registry.redhat.io/rhscl/postgresql
--creds developer1:MyS3cret!
C.D.G. - 6
7
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

IMÁGENES DE CONTENEDOR
podman login <opt> <registry> Token:
${XDG_RUNTIME_DIR}/containers/auth.json
$HOME/.docker/config.json
Registries:
/etc/containers/registries.conf
sudo podman login
quay.io --verbose
sudo podman login
-u testuser -p testpassword localhost:5000
sudo podman login
--authfile authdir/myauths.json docker.io
sudo podman login
--cert-dir /etc/containers/certs.d/
-u user -p password localhost:5000
sudo podman login --tls-verify=false -u test -p test localhost:5000
sudo podman login -u user --password-stdin < testpassword.txt docker.io
echo $testpassword | sudo podman login -u user --password-stdin docker.io
podman commit
sudo podman commit -a 'Cesar Delgado' official-httpd custom-httpd
podman tag
sudo podman tag custom-httpd quay.io/${QUAY_USER}/custom-httpd:v1.0
podman pull/push
sudo podman push quay.io/${QUAY_USER}/custom-httpd:v1.0
sudo podman pull -q quay.io/${QUAY_USER}/custom-httpd:v1.0
skopeo copy <origen> <destino> --src-creds <user>:<pass>
--dest-creds <user>:<pass>
--src-tls-verify={true/false}
--dest-tls-verify={true/false}
read -p "PASSWORD: " -s PASS
skopeo copy containers-storage:myimage
docker://quay.io/user/image
--dest-creds=user:$PASS
skopeo copy oci:/home/my/image
docker://quay.io/user/image
--dest-creds=user:$PASS
skopeo copy docker://quay.io/user/repo
docker://registry.redhat.io/rhscl/postgresql
--src-creds quayUser:quayPass
--dest-creds rhUser:rhPass
podman rmi <id imagen>
sudo podman rmi do180/mynginx:v1.0-SNAPSHOT
sudo podman rmi -a -f
sudo podman rmi –-force c4dfb1609ee2 93fd78260bd1 c0ed59d05ff7
skopeo delete <ruta> --creds <user>:<pass>
--tls-verify={true/false}
skopeo delete oci:/home/user/myimage
skopeo delete containers-storage:myimage
skopeo delete docker://registry.redhat.io/rhscl/postgresql
--creds developer1:MyS3cret!
podman build -t <name> <Dockerfile>
sudo podman build --layers=false -t do180/apache .
sudo podman build -t do180/apache /home/user/git/apache

C.D.G. - 7
8
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

2.3.- DOCKERFILE.
CONSTRUCCION IMÁGENES CONTENEDOR
# FROM => Imagen UBI de partida
FROM docker.io/ubuntu:bionic

# LABEL => Descripción de la imagen de contenedor


LABEL maintainer="[email protected]" \
Version=4.0.9 \
UBI=docker.io/ubuntu:bionic \
URL_UBI=https://hub.docker.com/_/ubuntu

# ENV => Variables de entorno necesarias para la construcción


ENV REDIS_VERSION=4.0.9 \
REDIS_USER=redis \
REDIS_RUN_DIR=/run/redis \
REDIS_DATA_DIR=/var/lib/redis \
REDIS_LOG_DIR=/var/log/redis
#-------------------------------------
# Operaciones Atómicas INIT/START
# => INIT crea entorno de trabajo como root
# => START comprueba que existe el entorno de trabajo, sino ERROR.
# a) Carpetas de trabajo con permisos adecuados
# b) Proceso principal levanta en puerto no privilegiado
#-------------------------------------
#==> INIT – Instalación entorno: cargar paquetería en imagen
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y redis-
server=5:${REDIS_VERSION}* \
&& sed 's/^bind /# bind /' -i /etc/redis/redis.conf \
&& sed 's/^logfile /# logfile /' -i /etc/redis/redis.conf \
&& sed 's/^daemonize yes/daemonize no/' -i /etc/redis/redis.conf \
&& sed 's/^protected-mode yes/protected-mode no/' -i /etc/redis/redis.conf
\
&& sed 's/^# unixsocket /unixsocket /' -i /etc/redis/redis.conf \
&& sed 's/^# unixsocketperm 700/unixsocketperm 777/' -i
/etc/redis/redis.conf \
&& rm -rf /var/lib/apt/lists/*

COPY entrypoint.sh /sbin/entrypoint.sh


ADD [ “README.txt” , “/sbin” ]

#==> INIT – Condiciones de trabajo:


# - Carpetas, usuarios y permisos
RUN usermod -g 0 -u 1001 redis && \
mkdir ${REDIS_DATA_DIR} ${REDIS_LOG_DIR} ${REDIS_RUN_DIR} && \
chgrp -R 0 ${REDIS_DATA_DIR} ${REDIS_LOG_DIR} ${REDIS_RUN_DIR} && \
chmod -R g=u ${REDIS_DATA_DIR} ${REDIS_LOG_DIR} ${REDIS_RUN_DIR} && \
chmod 755 /sbin/entrypoint.sh
WORKDIR ${REDIS_RUN_DIR}

# - Puerto
EXPOSE 6379/tcp
#==> START: arrancar aplicación bajo estas condiciones
# 1.- Usuario no privilegiado (ID encima de 1000)
# 2.- Puerto no privilegiado (Puerto encima 1024).
USER redis
CMD ["/sbin/entrypoint.sh"]

C.D.G. - 8
9
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.- OPENSHIFT VERSIÓN 4


3.1.- PLANO DE CONTROL: ADMINISTRACIÓN CLUSTER.
3.1.1.- API SERVER: INTERACCIÓN CON EL CLUSTER.

PLANO CONTROL:
API SERVER
oc login <URL_API> -u <user> -p <passwds>
____ 1.- Login
oc login -u ${DEV_USER} -p ${DEV_PASSWORD} ${URL_MASTER_API}

____ 2.- Instalación Cliente OC

____ 3.- Bash Completion


oc completion bash > .oc_bashcompletion.sh
echo "source ~/.oc_bashcompletion.sh" >> ~/.bashrc
source ~/.bashrc

____ 4.- Acceso usuario virtual (recién instalado cluster)


export KUBECONFIG=/home/user/auth/kubeconfig
oc --kubeconfig /home/user/auth/kubeconfig get nodes
oc whoami <opt>
oc whoami -t # Token
oc whoami -c # Contexto
oc whoami –-show-console
oc config <opt>
vim $HOME/.kube/config
____ 1.- Configuración Cliente OC
vim $HOME/.kube/config
# Listado Clusters
clusters:
- cluster:
insecure-skip-tls-verify: true
server: https://api.ocp4.example.com:6443
name: api-com:6443

# Configuración Conexiones
contexts:
- context:
cluster: api-com:6443
namespace: default
user: admin
name: default/api-ocp4-example-com:6443/admin
current-context: default/api-ocp4-example-com:6443/admin
kind: Config
preferences: {}

# Credenciales {identidad + token}


users:
-name: admin
user:
token: ErPG5n4aT6CuDQ8mJPSwS5WpvYD_N6Fhj8Yd603l7Ns

____ 2.- Cambio conexiones


oc config use-context
oc config set-context

C.D.G. - 9
10
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO CONTROL:
API SERVER
Verificación del Cluster => Planteamiento

1- Smoke Test: ensamblado y despliegue de aplicación


____ 1.- Localizar imágenes de construcción
oc get is -n openshift | grep nginx

____ 2.- Ensamblar una aplicación “Hello World” en imagen de despliegue


oc new-app –-name hello-world-nginx –-as-deployment-config
nginx:latest~https://github.com/RedHatTraining/DO280-apps#master
--context-dir hello-world-nginx -o yaml > ./smoketest-nginx.yaml
oc create -f ./smoketest-nginx.yaml
oc delete -f ./smoketest-nginx.yaml

____ 3.- Exposición de ruta y verificaciones


oc expose svc/hello-world-nginx
oc get pods, endpoints
RUTA=${oc get route }
curl http://${RUTA}
2- Check Logs: nodos, cluster-operators, Kubelet
____ 1.- Descripción del Cluster
oc login -u kubeadmin -p ${KUBEADM_PASSWD} ${MASTER_API_URL}
oc get clusterversion, clusteroperators, nodes
oc describe cluserversion

____ 2.- Descripción de los Nodos


oc adm top node
oc describe node my-node-name
oc adm node-logs my-node-name
oc adm node-logs -u kubelet my-node-name
oc adm node-logs -u crio my-node-name

____ 3.- Descripción de los Cluster Operators (Operadores Infraestructura)


oc get pod -n openshift-image-registry
oc logs --tail 3 -n openshift-image-registry
cluster-image-registry-operator-564bd5dd8f-s46bz
oc logs --tail 3 -n openshift-image-registry
-c cluster-image-registry-operator
cluster-image-registry-operator-564bd5dd8f-s46bz
oc logs --tail 1 -n openshift-image-registry image-registry-794dfc7978-w7w69
3- Verificar Cluster: CRI-O, Kubelet y SDN
____ 1.- Verificar Kubernetes
oc debug node/master01
sh-4.2# chroot /host
sh-4.2# systemctl status kubelet
sh-4.2# systemctl status cri-o
sh-4.2# crictl ps --name openvswitch
sh-4.4# exit

____ 2.- Levantar servicios caidos


sh-4.2# systemctl start kubelet

C.D.G. - 10
11
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO CONTROL:
API SERVER
4- Smoke Test: Acceso al Sistema Almacenamiento Externo (Montar PVs)
____ 1.- Listado PVs y Storage Classes del Cluster
oc get storageclass
oc get pv -o custom-columns=NAME:.metadata.name,CLAIM:.spec.claimRef.name

Configurar Repositorio GIT


git config --global user.email "[email protected]"
git config --global user.name "Cesar"
echo “REPO NAME” > README.md
git init
git add .
git commit -m "Inicializando Repositorio"
git remote add CesarTest https://github.com/CesarTest/hello-openshift.git
git remote -v
git push --set-upstream CesarTest master
Clonar + Branch Repo GIT
git clone https://github.com/CesarTest/DO288-apps
git checkout master
git checkout -b docker-build
git push -u CesarTest docker-build

C.D.G. - 11
12
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.1.2.- INVENTARIO: RECURSOS Y ESTADO.

PLANO CONTROL:
RECURSOS - DESCRIPCIÓN
oc get <resource> <name> <opt> -o yaml : fichero definición recurso
-l <label>: filtra por etiqueta
-n <namespace>: busca en namespace
____ 1.- Lista todos los recursos
oc get all # Recursos Convencionales
oc get pv,pvc,is,template,cm,secret,probes # Recursos no Convencionales
oc get all -l app=miaplicacion

____ 2.- Proyectos y namespaces


oc get netnamespaces, networkpolicy, project
oc get template -n openshift | grep mysql-persistent
oc get template mysql-persistent -n openshift -o yaml > ./miplantilla.yaml

____ 3.- Deployments


oc get deployment,dc,bc,pod,service,ingress,route
oc get deployment/hello -o json | jq '.metadata.annotations'
oc get deployment/hello -o json | jq '.spec.template.spec.containers[0].image'
oc get deployment/hello -o jsonpath='{.spec.template.spec.containers[].image}{"\n"}'

____ 4.- Servicio


oc get svc mongodb -o custom-columns=IP:.spec.clusterIP --no-headers
oc describe svc/frontend
oc describe deployment/frontend | grep Labels -A1 # Selector uServicio

____ 5.- Recursos asociados Deployments


oc get route, pods, endpoints
oc get pod --loglevel 10
oc get pod <nombre_pod> -o yaml | oc adm policy scc-subject-review -f –
oc get pv,pvc,configmap
oc get secret -n openshift-config
oc get is -n openshift
oc get nodes -L env

____ 6.- Eventos


oc get events --field-selector type=Warning
oc logs <opt> <pod,bc,build,deploy>/<nombre recurso>
oc logs -f build/myapp-1
oc logs --tail 3 -n openshift-image-registry
oc logs --tail 3 -n openshift-image-registry -c cluster-image-registry-operator
cluster-image-registry-operator-564bd5dd8f-s46bz
oc logs --tail 1 -n openshift-image-registry image-registry-794dfc7978-w7w69
oc adm node-logs <node> -u <process> <opt>
oc adm node-logs --tail 1 -u kubelet master01
oc describe <resource> <name>
oc describe is -n openshift jboss-eap70-openshift
oc describe projects tiempoatm
oc describe oauth/cluster -n openshift-authentication
oc explain <resource> <name>
oc explain resourcequotas
oc explain resourcequotas.spec
oc explain resourcequotas --recursive=true
oc extract <resource>/<parameter> <properties>
oc extract secrets/router-ca --keys tls.crt -n openshift-ingress-operator
oc extract secrets/localuser -n openshift-config –confirm
oc status <opt>
oc status --suggest
oc annotate <resource> <name> <opt>
oc annotate storageclass standard
--overwrite "storageclass.kubernetes.io/is-default-class=true"

C.D.G. - 12
13
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO CONTROL:
RECURSOS – ACCIÓN
oc project <name>
oc new-project <name> --description=<long> --display-name=<short>
oc new-project myproj --description="My Project" --display-name="Project"
oc adm create-bootstrap-project-template <opt>
____ 1.- Exportar Bootstrap de proyecto
oc adm create-bootstrap-project-template -o yaml > project-template.yaml

____ 2.- Crear Bootstrap de proyecto + Agregalo


oc create -f project-template.yaml -n openshift-config
oc edit projects.config.openshift.io/cluster
...output omitted...
spec:
projectRequestTemplate:
name: project-template

____ 3.- Verificar que aplica cambios


watch oc get pods -n openshift-apiserver
oc create <resource> <name> <opt>
oc apply <resource> <name> <opt>
oc replace <resource> <name> <opt>
oc delete <resource> <name> <opt>
____ 1.- Crear recursos a partir de ficheros definición de recursos
oc create -f ./mysql_template.yaml
oc delete -f ./mysql_template.yaml

____ 2.- Crear identidades


oc create sa <nombre_sa>
oc delete networkpolicy <nombre policy>
oc edit <resource> <name> <opt>
oc edit deployment/wordpress
oc set <parameter> <resource> <properties>
____ 1.- Agregar volúmenes a PODs (véase procedimientos Deploy)
oc set volume dc/<nombre-dc> --add --type={secret,cm,pvc}
--mount-path=/usr/local/etc/ssl/certs

____ 2.- Agregar variables de entorno a PODs


oc set env deployment/myapp --prefix MYSQL_ --from secret/myapp_secret

____ 3.- Agregar datos a secrets/configmaps (veáse procedimiento Config)


oc set data {secret/configmap} myapp_secret --from-literal user=petclinic

____ 4.- Asignar Service Account despliegue/pod (véase procedimientos Deploy)


oc set serviceaccount deployment <nombre_deployment> <nombre_sa>
oc set serviceaccount pod <nombre_pod> <nombre_sa>

____ 5.- Gestión Triggers


oc set triggers deployment/hello --from-image versioned-hello:latest -c hello
oc rsh -n <namespace> <pod name> <cmd>
____ 1.- Poblar base de datos
oc rsh mysql-94dc6645b-hjjqb bash
bash-4.2$ mysql -u root items < /tmp/db-data.sql
bash-4.2$ mysql -u root items -e "show tables;"
bash-4.2$ exit
oc {rsync/cp} -n <namespace> <fichero origen> <pod>:<ruta>
oc cp db-data.sql mysql-94dc6645b-hjjqb:/tmp/
oc port-forward <my-pod-name> <local-port>:<remote-port>

oc label <resource> <resource_name> <label>


____ 1.- Agregar etiquetas
oc label node master01 env=dev

____ 2.- Quitar etiquetas


oc label node -l env env-
C.D.G. - 13
14
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO CONTROL:
RECURSOS - PLANTILLAS
oc process <opt> <template> -n <namespace>
____ 1.- Parametros Plantilla
oc process --parameters mongodb-persistent -n openshift
.....
MEMORY_LIMIT
NAMESPACE
DATABASE_SERVICE_NAME=mongodb
MONGODB_USER=frutero
MONGODB_PASSWORD=vitaminas
MONGODB_DATABASE=fruits
MONGODB_ADMIN_PASSWORD
VOLUME_CAPACITY
MONGODB_VERSION

____ 2.- Procesar Plantilla


OPCIONES='-p DATABASE_SERVICE_NAME=mongodb -p MONGODB_USER=frutero -p
MONGODB_PASSWORD=vitaminas -p MONGODB_DATABASE=fruits'
oc new-app --template mongodb-persistent $OPCIONES -n openshift -o yaml >
mimongo_template.yaml

____ 3.- Desplegar uServicio


oc create -f mimongo_template.yaml
oc delete -f mimongo_template.yaml

oc {create/set} secret {generic/tls} <name>


--from-file <file>
--from-literal <key>=<value>
--type <kubernetes resource type>
____ 1.- uSevicio: Configuracion Lanzamiento
oc create secret generic mysql
--from-literal user=myuser
--from-literal password=redhat123
--from-literal database=test_secrets
--from-literal hostname=mysql
oc set data secret myapp_secret
--from-literal user=petclinic --from-literal password=petclinic
--from-literal database=petclinic --from-literal root_password=petclinic

____ 2.- Registry: Credenciales para repositorios privados


oc create secret generic quayio
--from-file .dockerconfigjson=${XDG_RUNTIME_DIR}/containers/auth.json
--type kubernetes.io/dockerconfigjson
oc set data secret/localusers -n openshift-config

____ 3.- Rutas: certificados HTTPS


oc create secret tls hello-tls --cert=time.crt --key=name.key
oc {create/set} configmap <name>
--from-file <file>
--from-literal <key>=<value>
--type <kubernetes resource type>
____ 1.- uSevicio: Configuracion Lanzamiento

____ 2.- uSevicio: Ficheros Configuración

C.D.G. - 14
15
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.1.3.- RBAC: AUTENTICACIÓN Y AUTORIZACIÓN.

PLANO CONTROL:
RBAC
oc create sa <nombre_sa>
oc adm groups new <grupo>
oc adm groups {add/remove}-users <grupo> <user>
oc create identity <id_provider>:<user>
oc label user/<name> <label>
WORKDIR=/home/user/work
WORKFILE=${WORKDIR}/tmp_users

____ 1.- Crear Service Accounts


oc create sa <nombre_sa>

____ 2.- Agregar/Editar Usuarios a proveedor identidad HTPasswd ya instalado


oc get oauth cluster -o yaml > ${WORKDIR}/oauth_usuarios_bk.yaml
vim ${WORKDIR}/oauth_usuarios_bk.yaml # Localizar Secret que usa
oc extract secret/users -n openshift-config --to ${WORKDIR} --confirm
htpasswd -B -b ${WORKDIR}/htpasswd user2 pass2
oc set data secret/users -n openshift-config –-from-file=${WORKDIR}/htpasswd
oc login -u user2 -p pass2 # ¡¡¡ IMPORTANTE !!! Crear la Identidad

____ 3.- Crear Grupos


oc adm groups new grupo1

____ 4.- Asignar usuarios a grupos


oc adm groups add-users grupo1 user1

____ 5.- Etiquetar usuarios


oc label user/theuser level=gold
HTPasswd => Agregar Proveedor de identidad
____ 1.- Crear Fichero HTPasswd
htpasswd -c -B -b $WORKFILE user1 pass1
htpasswd -B -b $WORKFILE user2 pass2

____ 2.- Crear Secret


oc create secret generic users
--from-file htpasswd=${WORKFILE} -n openshift-config
oc get secret -n openshift-config | grep users
oc describe secret users -n openshift-config
oc get oauth cluster -o yaml > ${WORKDIR}/oauth_usuarios_bk.yaml

____ 3.- Crear Custom Resource OAUTH (ver documentación)


vim ${WORKDIR}/oauth_new_users.yaml

____ 4.- Aplicar


oc apply -f ${WORKDIR}/oauth_new_users.yaml
oc get users

____ 5.- Verificaciones


oc get pods -n openshift-authentication
oc login -u user1 -p pass1 # Crear la Identidad, siempre hacerlo

____ 6.- Marcha atras


oc replace -f ${WORKDIR}/oauth_usuarios_bk.yaml
oc edit oauth cluster

C.D.G. - 15
16
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO CONTROL:
RBAC
oc delete sa <nombre_sa>
oc delete sa <nombre_sa>
oc delete <virtual user>
______ 1.- Backup del fichero kubeconfig
(poder gestionar si no hay usuarios cluster-admin, ni kubeadmin)
cp ${HOME}/auth/kubeconfig ${HOME}/kubeconfig.BACKUP

______ 2.- Localizar existen usuarios con permisos “cluster-admin”


oc describe clusterrole.rbac cluster-admin –-all-namespaces
oc describe rolebinding.rbac cluster-admin –-all-namespaces

______ 3.- Asignar rol “cluster-admin” a un usuario (si no lo hubiese)


oc adm policy add-cluster-role-to-user cluster-admin user
oc adm policy remove-cluster-role-from-group self-provisioner
system:authenticated:oauth
______ 4.- Eliminar usuario virtual kubeadmin
oc delete secret kubeadmin -n kube-system
oc delete <user identity provider>
______ 1.- Eliminar entrada proveedor de identidad
oc extract secret/users -n openshift-config --to ${WORKDIR} --confirm
htpasswd -D ${WORKDIR}/htpasswd user1
oc set data secret/users -n openshift-config –-from-file=${WORKDIR}/htpasswd

______ 2.- Eliminar recurso user del etcd (los permisos)


oc get users
oc delete user/demo

______ 3.- Eliminar recurso identity del etcd (asocia user:identidad)


oc delete identity htpasswd_auth:demo
oc delete <identity provider>
______ 1.- Eliminar proveedor de identidad del OAUth
oc edit oauth

______ 2.- Eliminar usuarios


oc delete secret users -n openshift-config
oc delete user --all
oc delete identity --all
oc adm groups prune groups/<name1> groups/<name2>
–-whitelist=<.txt> --blacklist=<.txt>
--sync-config=<.yaml> --confirm
oc adm groups prune –-sync-config=${HOME}/lista.txt –confirm
##### ¿Borrado de grupo? ####
oc get {user/sa/identity/scc}
oc describe scc <nombre scc> # SCCs
oc describe clusterrole.rbac <rol> <opt> # Roles
oc describe rolebinding.rbac <rol> # Usuarios/Rol
______ 1.- Listado de usuarios
oc get role, scc
oc get rolebindings -o wide
oc get oauth cluster -o yaml > ${WORKDIR}/oauth_usuarios.yaml
oc get clusterrolebinding -o wide | grep -E 'NAME|self-provisioner'

______ 2.- Descripción de roles


oc describe clusterrolebindings self-provisioners
oc describe rolebindig.rbac -n <nombre_proyecto> # Administrador proyecto
oc describe clusterrole.rbac cluster-admin –-all-namespaces # Cluster Admins
oc describe role.rbac admin –-all-namespaces # Admins
oc describe scc restricted

______ 3.- Listado de usuarios que tiene un rol


oc describe rolebinding.rbac cluster-admin –-all-namespaces # Usuarios/Rol

C.D.G. - 16
17
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO CONTROL:
RBAC
oc create role <nombre_rol>
--verb={get,list,watch} -–resource={pod,dc…}
oc {delete/edit} role <nombre_rol> <opt>
______ 1.- Crear Rol
oc create role foo –-verb=get,list,watch –-resource=rs.extensions -o yaml
oc create role pod-reader –-verb=get –-resource=pods,pods/status -o yaml

______ 2.- Borrar/Edit Rol


oc delete role foo
oc edit role foo
oc create -f scc.yaml
oc {edit/delete} scc <scc_name>
kind: SecurityContextConstraints supplementalGroups:
apiVersion: v1 type: RunAsAny
metadata: users:
name: scc-admin - my-admin-user
allowPrivilegedContainer: true groups:
runAsUser: - my-admin-group
type: RunAsAny # OPCIONAL
seLinuxContext: requiredDropCapabilities:
type: RunAsAny - KILL
fsGroup: - MKNOD
type: RunAsAny - SYS_CHROOT
oc adm policy {add/remove}-role-to-user <role> <user>
oc adm policy {add/remove}-cluster-role-to-user
–-rolebinding-name <binding> <user> <role>
oc adm policy {add/remove}-scc-to-user <scc> -z <sa>
____ 1.- Asignar rol (edit/view/admin) a usuario
oc policy add-role-to-user edit qa-engineer
oc policy add-role-to-user view qa-engineer
oc policy add-role-to-user admin qa-engineer

____ 2.- Asignar SCC (anyuid)para despliegue microservicio


oc create serviceaccount wordpress-sa
oc adm policy add-scc-to-user anyuid -z wordpress-sa
oc set serviceaccount deployment/wordpress wordpress-sa

____ 3.- Asignar cluster role (selfprovisioner) a usuario


oc adm policy add-cluster-role-to-group --rolebinding-name self-provisioners
qa-engineer system:authenticated:oauth
oc adm policy add-role-to-group <role> <group>
oc adm policy add-cluster-role-to-group
–-rolebinding-name <binding> <group> <role>
oc adm policy add-scc-to-group
____ 1.- Asignar rol (edit/view/admin) a grupo
oc policy add-role-to-user edit qa-group
oc policy add-role-to-user view qa-group
oc policy add-role-to-user admin qa-group

#### ¿Grupos en Service Accounts?


____ 2.- Asignar cluster role (self-provisioner) a grupo (self-provisioners)
oc adm policy remove-cluster-role-from-group self-provisioners
system:authenticated:oauth
oc adm policy add-cluster-role-to-group --rolebinding-name self-provisioners
self-provisioner system:authenticated:oauth
oc create clusterrolebinding <nombre_rolebinding>
--clusterrole=sudoer --user=<user>

C.D.G. - 17
18
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.1.4.- SCHEDULING: GESTIÓN DESPLIEGUES.


PLANO CONTROL:
SCHEDULING
oc scale {deployment,dc}/<name> –-replicas <num>
oc scale deployment/httpd --replicas 0
oc scale deployment/httpd --replicas 3
oc autoscale {deployment,dc}/<name> --min 1 --max 5 <opt>
oc autoscale deployment/hello-secure --min 1 --max 5 --cpu-percent 80
Node Selector, a nivel POD
____ 1.- Deployment/DeploymentConfig… editar Node Selector
oc edit deployment/hello
____ Ubicación: deployment.spec.template.spec.nodeSelector
...output omitted...
spec:
-------> ADD THIS BLOCK
nodeSelector:
env: dev
-------> ADD THIS BLOCK
...output omitted...

____ 2.- Comprobar el despliegue


oc get pods -o wide

____ 3.- Si está pending… no existen nodos con ese NodeSelector, buscar etiquetas
oc login -u admin -p redhat
oc describe node | more
oc describe node | sed -n -e '/Label/,/: */p' -e '/Name:/,/: */p'
oc login -u developer -p developer
Quotas/Límites, en Deployment/DeploymentConfig
oc edit deployment/hello-limit
_____ Quotas: deployment.spec.template.spec.containers.resources.requests
____ Límites: deployment.spec.template.spec.resources.limits
deployment.spec.template.spec.containers.resources.limits
...output omitted...
spec:
containers:
- image: quay.io/redhattraining/hello-world-nginx:v1.0
name: hello-world-nginx
-------> ADD THIS BLOCK
resources:
requests:
cpu: "3"
memory: 20M
limits:
cpu: "100m"
memory: 100Mi
-------> ADD THIS BLOCK
...output omitted...
oc {create/delete} quota project-quota <opt>
oc create quota project-quota -n schedule-limit
--hard cpu="3",memory="1G",configmaps="3"
oc adm create-bootstrap-project-template -o yaml > project-template.yaml
- apiVersion: v1 - apiVersion: v1
kind: ResourceQuota kind: LimitRange
metadata: metadata:
name: ${PROJECT_NAME}-quota name: ${PROJECT_NAME}-limits
spec: spec:
hard: limits:
cpu: 3 - type: {Pod/Container}
memory: 10G {max/min/MaxLimitRequestRatio
default/defaultRequest}:
cpu: 30m
memory: 30M

C.D.G. - 18
19
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO CONTROL:
SCHEDULING
oc adm taint nodes <nodo> <key>=<value>:<effect>
oc adm taint nodes <nodo> <key>-

3.1.5.- REGISTRY: IMÁGENES DE CONTENEDOR.


PLANO CONTROL:
REGISTRY
Instalación

Credenciales Registry Externo

Exposición Ruta

____ 1.- Login as Cluster Admin

____ 2.- Exponer la ruta del Registry Interno


oc patch configs.imageregistry.operator.openshift.io/cluster
--type merge -p '{"spec":{"defaultRoute":true}}'
oc edit config cluster -n openshift-image-registry
Credenciales Registry Externo

Create Image Stream

Push/Pull Image Stream

3.1.6.- MONITORIZACIÓN: CONSOLA WEB, MÉTRICAS, LOGS.

PLANO CONTROL:
MONITORIZACIÓN

C.D.G. - 19
20
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.2.- PLANO OPERACIÓN: DESPLIEGUE APLICACIONES


3.2.1.- LÓGICA: BUILD.

PLANO OPERACIÓN:
LÓGICA - BUILD
Assemble

S2I

Triggers

Hooks Web

C.D.G. - 20
21
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.2.2.- LÓGICA: DEPLOY.


PLANO OPERACIÓN:
LÓGICA - DEPLOY

oc create deployment mysql


--image registry.access.redhat.com/rhscl/mysql-57-rhel7:5.7
--dry-run=client -o yaml > deploy_mysql.yaml
oc new-app --name=mysql registry.access.redhat.com/rhscl/mysql-57-rhel7:5.7
-e MSQL_ROOT_PASSWORD=changeMe -o yaml > deploy_sql.yaml
oc create -f ~/DO280/labs/review-troubleshoot/deploy_sql.yaml
Plantilla

oc get is -n openshift | grep mysql


oc set env {deployment,dc}/<nombre> <opt>

oc create secret generic mysql --from-literal password=r3dh4t123


oc set env deployment/mysql --prefix MYSQL_ROOT_ --from secret/mysql

oc set env deployment myapp


MONGO_URL="mongodb://admin:secret@$(oc get svc mongodb -o custom-
columns=IP:.spec.clusterIP --no-headers):27017/mongo_db"

oc set volumes {deployment,dc}/<nombre> --add


--type {pvc,cm,secret,emptyDir,hostPath,projected}
-m --mountpath <path on container filesystem>
-c –-container {*/<name}
--sub-path <subpath/filename> # Overwrite configmap/secret key
--secret-name <secret_name>
--claim-name <pvc_name>
--claim-class <storageclass name>
--claim-mode {rwo/rox/rwx} --claim-size <NumUnits>
-o -–output {json, yaml}
--overwrite –-read-only={true/false}
____ 1.- Almacenamiento Persistente: PVC
oc set volumes deployment/mysql --add --name mysql-storage
--type pvc
--mount-path /var/lib/mysql/data
--claim-name mysql-storage
--claim-mode rwo --claim-size 2Gi

____ 2.- Certificados HTTPS: Secret


oc set volumes deployment/hello-secure --add --name hello-tls
--type secret
--mount-path /run/secrets/nginx
--secret-name hello-tls

____ 3.- Fichero Configuracion: ConfigMap


oc set volumes dc/hello --add --name index-vol
--type configmap
--mount-path=/usr/share/nginx/html/index.html
--sub-path=index.html
--configmap-name index
--overwrite

C.D.G. - 21
22
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO OPERACIÓN:
LÓGICA - DEPLOY
Rollback (retroceder versión) Rollout (elegir versión)

Service Discovery
1.- Variables entorno… DNS interno OpenShift

2.- Variables entorno… IP + Puerto


Probes

Triggers

C.D.G. - 22
23
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.2.3.- LÓGICA: INGRESS.


PLANO OPERACIÓN:
LÓGICA - RUTAS
oc expose svc <service name> --hostname <URL> --port <num>
oc expose pod <pod name>
oc expose service mysvc --hostname mysvc.app.example.com --port 80

oc create route <type> <name> --service <svc> --hosname <URL>


--key <name.key> --ca-cert <time.crt>
--insecure-policy=Redirect
____ 1.- Ruta segura Edge (con redireccion HTTP -> HTTS)
oc create route edge todo-https --service todo-http
--hostname todo-https.apps.ocp4.example.com
--insecure-policy=Redirect

____ 2.- Ruta segura Passthrough


# Montar certificados en End Points del uServicio
oc create secret hello-tls --cert=time.crt --key=name.key
oc set volumes deployment/hello-secure --add
--type secret --secret-name hello-tls
--mount-path /run/secrets/nginx

# Verificar el hostname que tiene el certificado para usarlo en la ruta


openssl x509 -in hello-secure-combined.pem -noout -ext 'subjectAltName'
oc create route passthrough
--service hello-secure --hostname hello-secure.apps.ocp4.example.com

____ 3.- Probar ruta desde fuera del cluster


oc extract secrets/router-ca --keys tls.crt -n openshift-ingress-operator
curl -I -v --cacert tls.crt https://todo-https.apps.ocp4.example.com
INSTRUCCIONES: /usr/share/doc/openssl/Makefile.certificate, man {x509, openssl-req}
openssl x509 -req -in <fichero.csr>
-passin file:passphrase.txt
-CA <fichero.pem> -CAkey <fichero.key>
-CAcreateserial
-out <fichero.crt> -days 1825 -sha256
-extfile <fichero.ext>
____ 1.- Clave privada (.key)
openssl genrsa -out tiempo.key 2048

____ 2.- Clave Pública (.csr, solicitud de certificado)


openssl req -new
-subj "/C=US/ST=North Carolina/L=Raleigh/O=Red Hat/CN=eltiempo-
seguro.${RHT_OCP4_WILDCARD_DOMAIN}"
-key tiempo.key
-out tiempo.csr

____ 3.- Verificar Clave Pública (formato de la solicitud de certificado)


openssl req -text -noout -verify -in tiempo.csr > test.txt
vim test.txt

____ 4.- Firma Clave Pública (.crt)


# Autofirmada
openssl x509 -req -in tiempo.csr -signkey tiempo.key
-out tiempo.crt -days 1825 -sha256
# Firmada por CA
openssl x509 -req -in training.csr -passin file:passphrase.txt
-CA training-CA.pem -CAkey training-CA.key -CAcreateserial
-out training.crt -days 1825 -sha256 -extfile training.ext

C.D.G. - 23
24
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

3.2.4.- LÓGICA: SDN.


PLANO OPERACIÓN:
LÓGICA - SDN
Ejemplo de una políticas de Red
____ 1.- Planteamiento políticas de red

____ 2.- Activar políticas sobre el tráfico externo


oc login -u admin -p redhat
oc label namespace default network.openshift.io/policy-group=ingress

Fichero Definición de Recursos


kind: NetworkPolicy ###############
apiVersion: networking.k8s.io/v1 # REGLAS NETWORK POLICY
################
############### ingress:
# SCOPE NETWORK POLICY - from:
################ - namespaceSelector:
metadata: matchLabels:
name: allow-specific name: network-test
namespace: network-policy podSelector:
matchLabels:
spec: deployment: sample-app
podSelector: ports:
matchLabels: - port: 8080
deployment: hello protocol: TCP
Políticas Típicas
kind: NetworkPolicy apiVersion: networking.k8s.io/v1
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy
metadata: metadata:
name: deny-by-default name: allow-from-openshift-ingress
spec: spec:
podSelector: ingress:
ingress: [] - from:
- namespaceSelector:
matchLabels:
network.openshift.io/policy-group:
ingress
podSelector: {}
policyTypes:
- Ingress
Verificar Network Policy… sondas “curl”
____ 1.- Namespace: scope al que aplica la política
____ 2.- Recursos: excepciones al bloqueo tráfico entrante
____ 3.- Canales: condiciones que permite tráfico entrante

C.D.G. - 24
25
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO OPERACIÓN:
LÓGICA - SDN
Activar Multitenant en Bootstrap

Visibilidad PODs entre proyectos

3.2.5.- LÓGICA: SERVICE.


PLANO OPERACIÓN:
LÓGICA - SERVICE
Troubleshoot Servicio: Planteamiento

Paso 1: Troubleshoot POD – uServicios levantados en puertos esperados


#............. SÍNTOMAS ...........
A) Firefox => Application not available
B) Servicio expuesto correctamente (oc get route)

#........... DIAGNÓSTICO ...........


# 1.- Procesos activos
oc get endpoints
oc get pods # Si hay PODs, pero no hay End Points… saltar al paso 2
oc logs -f pods/frontend-5598cfc446-lkhsj

# 2.- Puertos responden


IP_INTERNA_FE=$( oc get pods -o wide -l name=frontend )
oc debug -t deployment/mysql --image registry.access.redhat.com/ubi8/ubi:8.0
sh-4.2$ curl -v http://<IP_INTERNA_FE>:8080/todo/
sh-4.2$ exit

IP_INTERNA_BE=$( oc get pods -o wide -l name=mysql )


oc debug -t deployment/frontend
sh-4.2$ curl -v telnet://<IP_INTERNA_BE>:3306
sh-4.2$ exit

#............ RESOLUCION ...........


# 1.- Redesplegar aplicación, en cualquiera de los dos casos

C.D.G. - 25
26
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO OPERACIÓN:
LÓGICA - SERVICIO
Paso 2: Troubleshoot EndPoint – SVC Selector, Puerto
##################
## CASO 1: SVC SELECTOR
##################

#............. SÍNTOMAS ...........


C) Firefox => Application not available
D) Servicio expuesto correctamente (oc get route)

#........... DIAGNÓSTICO ...........


# 1.- SVC: Up & Running => End points, PODS
oc get endpoints, pods

# 2.- SVC: Node Selector OK => End Point = PODs


oc get svc
oc describe svc/frontend
...output omitted...
Selector: name=api
...output omitted...

oc describe pods/frontend-5598cfc446-lkhsj
...output omitted...
Labels: app=todonodejs
name=frontend
pod-template-hash=5598cfc446
...output omitted...

#............ RESOLUCION ...........


# 1.- Modificar Selector de Servicio
oc edit svc/frontend
...output omitted...
selector:
name: frontend
...output omitted...

# 2.- Comprobaciones
oc get endpoints, pods

##################
## CASO 2: PUERTOS CONTENEDOR
##################

#............. SÍNTOMAS ...........


A) Firefox => Resource not found
B) End Point aparece en SVC (oc get endpoint)

#........... DIAGNÓSTICO ...........

# 1.- SVC: Puertos de redireccion


oc get svc
NAME ENDPOINTS AGE
frontend 10.10.0.49:8080 9h
mysql 10.8.0.6:3306 9h

# 2.- PODs: Puertos que exponen


oc describe pods/frontend-5598cfc446-lkhsj
...output omitted...
Port: 8080/TCP
...output omitted...

# 3.- Contenedor: Puerto donde levanta el proceso principal


oc logs -f pods/frontend-5598cfc446-lkhsj
oc rsh pods/frontend-5598cfc446-lkhsj env

#............ RESOLUCION ...........


# Tres puertos coinciden: SVC, EndPoint, Proceso Principal Contenedor
C.D.G. - 26
27
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

PLANO OPERACIÓN:
LÓGICA - SERVICIO
Paso 3: Troubleshoot uServicio – Service Discovery, visibilidad uServicios
#............. SÍNTOMAS ...........
A) Firefox => Aplicación Ok
B) Error base datos, o no hay persistencia

#........... DIAGNÓSTICO ...........


# 1.- End Points se ven entre sí
# 2.- Service Discovery: uServicios no se hablan entre sí

1.- End Points se ven entre sí, desde dentro del cluster
--------
oc get endpoints # End Point Properties

____ 1.1.- Visibilidad FE -> BE


IP_BDD=$( oc get service/mysql -o jsonpath="{.spec.clusterIP}{'\n'}" )
oc debug -t deployment/frontend
sh-4.2$ curl -v telnet://<IP_BDD>:3306

____ 1.2.- Visibilidad BE -> FE


IP_FE=$(oc get service/frontend -o jsonpath="{.spec.clusterIP}{'\n'}" )
oc debug -t deployment/mysql --image registry.access.redhat.com/ubi8/ubi:8.0
sh-4.4$ curl -m 10 -v http://<IP_FE>:8080
sh-4.4$ exit

2.- Service Discovery: uServicios no se hablan entre sí


--------

#............ RESOLUCION ...........

3.2.6.- DATOS: PERSISTENCIA.


PLANO OPERACIÓN:
DATOS

C.D.G. - 27
28
PROCEDIMIENTOS DE USO DE UN CLUSTER OPENSHIFT

4.- BIBLIOGRAFÍA

4.1.- OPENSHIFT VERSIÓN 4.

C.D.G. - 28

También podría gustarte