Instalación y configuración ODM 8.10.3 - AWS EKS
por Diego Alexander Arias, el 28 de diciembre de 2020
Luego conocer cómo realizar la Instalación y configuración ODM Kubernetes AWS, crearemos la base de datos externa a utilizar por ODM, crearemos los certificados de seguridad, realizar la instalación de ODM v. 8.10.3, configuramos el balanceador ALB y procederemos a configurar el servicio de kubernetes ALB Ingress Controller, para lograr consumir los servicios a través del balanceador.
Pasos para la instalación y configuración ODM 8.10.3 - AWS EKS
1. Crear una base de datos RDS
Abra la consola de Amazon RDS, en la esquina superior derecha, elija la región de AWS en la que desea crear la instancia de base de datos y en el panel de navegación, seleccione Bases de datos.
Elija Crear base de datos y escoja un método de creación de base de datos, seleccione Creación estándar, en la Opciones de motor, utilizar tipo de motor PostgreSQL y para la versión elija la última versión del motor.
En Plantillas, elija la plantilla que coincida con su caso de uso.
Opciones de conmutación por error Multi-AZ, almacenamiento IOPS aprovisionadas y habilitar la protección contra la eliminación, es recomendable usar estas características para cualquier entorno de producción.
En la sección Configuración, abra Configuración de credenciales, Desmarque la casilla Generar automáticamente una contraseña, Cambie el valor de Nombre y contraseña (postgres).
Elija Create database (Crear base de datos).
Los detalles de la nueva instancia de base de datos aparecen en la consola de RDS. La instancia de la base de datos tendrá el estado creating hasta que se cree la instancia y esté lista para el uso. Cuando el estado cambie a available, podrá conectarse a la instancia de base de datos.
Crea un secreto de base de datos
Para proteger el acceso a la base de datos, debe crear un secreto que encripte el usuario y la contraseña de la base de datos antes de instalar la versión de Helm.
$ kubectl create secret generic odm-db-secret --from-literal=db-user=postgres --from-literal=db-password=postgres
2. Gestionar certificado digital
Crear Certificado
Utilizar el siguiente comando para la generación de un certificado autofirmado.
$ openssl req -x509 -nodes -days 1000 -newkey rsa:2048 -keyout mycompany.key -out mycompany.crt -subj "/CN=*.mycompany.com/OU=it/O=mycompany/L=Paris/C=FR"
Cargar certificado en clúster AWS EKS
$ aws iam upload-server-certificate --server-certificate-name mycompany --certificate-body file://mycompany.crt --private-key file://mycompany.key
Validar la existencia del certificado y tomar el arn.
$ aws iam get-server-certificate --server-certificate-name mycompany
Nota: conservar arn:aws:iam::<AWS-AccountId>:server-certificate/mycompany
Genere JKS del certificado
Crear almacén de llaves a utilizar en el contenedor ODM
$ openssl pkcs12 -export -passout pass:password -passin pass:password -inkey mycompany.key -in mycompany.crt -name mycompany -out mycompany.p12
Importar certificado al almacén de llaves.
$ keytool -importkeystore -srckeystore mycompany.p12 -srcstoretype PKCS12
-srcstorepass password -destkeystore mycompany.jks -deststoretype JKS -deststorepass password
$ keytool -import -v -trustcacerts -alias mycompany -file mycompany.crt -keystore truststore.jks -storepass password -noprompt
3. Instalar una versión ODM Helm release
Prerrequisitos
Cree secreto Kubernetes
Crear un secreto de Kubernetes a partir del certificado generado en el paso: Genere JKS del certificado
$ kubectl create secret generic mycompany-secret
--from-file=keystore.jks=mycompany.jks
--from-file=truststore.jks=truststore.jks
--from-literal=keystore_password=password
--from-literal=truststore_password=password
Validar que los secrets hayan existan, mediante el comando.
$ kubectl get secrets
Descarga y configuración repositorio chart ODM
Validar que se encuentre el repositorio localmente, normalmente está dentro de los archivo con los binarios, en una subcarpetas con nombre charts.
Asegurar igualmente que se descarga el archivo manifest.yaml, el cual se utiliza como archivo de entrada para el comando de instalación del HELM.
Consideraciones previas a instalar ODM
Antes de lanzar el comando de instalación con HELM asegurar corregir lo siguiente:
- En Helm V3 https://github.com/helm/helm/issues/3810 que genera un error como: Error: INSTALL FAILED: Chart requiere kubernetesVersion:> = XXX que es incompatible con Kubernetes vX.XX-xxxxx
Para solucionar este problema:
Modifique el chart usando: tar xvzf ibm-odm-prod-2.3.0.tgz, edite ibm-odm-prod/Chart.yaml y cambie en la línea: kubeVersion: '> = 1.11.0' por kubeVersion: '> = 1.11.0-0'
- En ODM 8.10.3.0, un error impide la instanciación de la topología.
Para solucionar este problema:
Modifique el chart usando: tar xvzf ibm-odm-prod-2.3.0.tgz, edite ibm-odm-prod/ y edite el archivo values.yaml, posteriormente buscar "dc-jvm-options" y proceder a eliminar o comentar el bloque: recursos:
Instalar Version ODM 8.10.3.0 con Helm
Se requiere helm v3, para ejecutar comando helm install.
$ helm install my-odm-dev-release -f manifest.yaml --set image.arch=amd64 --set
image.repository=<AWS-AccountId>.dkr.ecr.us-east-1.amazonaws.com --set
image.tag=8.10.3.0 --set image.pullSecrets=ecrodm --set
externalDatabase.type=postgres --set
externalDatabase.serverName=postgres.ciuclv206mko.us-east-1.rds.amazonaws.com --set externalDatabase.secretCredentials=odm-db-secret --set
externalDatabase.port=5432 --set customization.securitySecretRef=mycompany-secret
--set externalDatabase.databaseName=postgres ibm-odm-prod-2.3.0.tgz --debug
Validar estado de instalación de versión.
$ kubectl get pods
4. Accede a los servicios ODM
Crear un application load balancer
Seguir las instrucciones para mayor detalle: https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html#w243aac23b7c17c10b3b1
Definir balanceador de carga
Abra la consola de Amazon EC2, en la barra de navegación, elija una región para el balanceador de carga. No olvide seleccionar la misma región que utilizó con las instancias EC2.
En el panel de navegación, elegir balanceador de carga y seleccionar Crear balanceador de carga.
Seleccionar tipo de balanceador de carga de aplicaciones y elegir Crear.
Configurar el balanceador de carga y el agente de escucha
Para configurar el balanceador de carga y el agente de escucha, se requiere:
- Nombre: Introduzca un nombre para el equilibrador de carga (Eks-ALB-POCPopular).
- Esquema y Tipo de dirección IP: Mantenga los valores predeterminados.
- Listeners: Mantenga el valor predeterminado, que es un oyente que acepta tráfico HTTP en el puerto 80.
- Zonas de disponibilidad: seleccione el VPC que utilizó para sus instancias EC2.
Elegir Siguiente: Configurar configuración de seguridad.
Configurar grupo de seguridad balanceador de carga
Permitirá que se comunique con los destinos registrados tanto en el puerto del agente de escucha como en el puerto de comprobación de estado.
Elegir Crear un nuevo grupo de seguridad, escriba el nombre y la descripción del grupo de seguridad o conserve los predeterminados y elija Siguiente: Configuración del enrutamiento.
Configure su grupo objetivo
Cree el grupo de destino que se va a utilizar para el direccionamiento de solicitudes.
- Grupo objetivo: Mantener el valor predeterminado, Nuevo grupo objetivo.
- Nombre: Introduzca un nombre para el nuevo grupo objetivo (TargetGroup-Eks-ODM).
- Tipo de destino predeterminado (Instancia), protocolo (HTTP) y puerto (80).
- Comprobaciones de salud: Mantenga la configuración predeterminada.
Elegir Siguiente: Registrar destinos
Registro de destinos con el grupo de destino
Para Instancias, seleccione una o más instancias, conserve el puerto predeterminado (80) y seleccione Añadir a registrado, cuando haya terminado de seleccionar y adicionar instancias, elija Siguiente: Consulte.
Proceda con la creación y prueba del balanceador de carga.
Crear un ALB Ingress Controller
Para complementar información seguir el siguiente link:
https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html#w243aac23b7c17c10b3b1
Crear proveedor IAM OIDC y asociarlo al cluster
Cree un proveedor IAM OIDC y asóciese con su clúster.
$ eksctl get cluster
$ eksctl utils associate-iam-oidc-provider --region us-east-1 --cluster cluster_EKS_ODM_prueba --approve
Descargue y configure política de IAM en pod ALB Ingress Controller
Esto permite realizar llamadas a las API de AWS en su nombre.
$ curl -o iam-policy.json
Cree una política de IAM llamada ALBIngressControllerIAMPolicy con el archivo descargado.
$ aws iam create-policy --policy-name ALBIngressControllerIAMPolicy --policy-document file://iam-policy.json
Tome nota del ARN que se devuelve(Ej. arn:aws:iam::<AWS-AccountId>:policy/ALBIngressControllerIAMPolicy)
Cree una cuenta de servicio de Kubernetes
Para crear una cuenta de servicio, un rol de clúster y un enlace de rol de clúster para ALB Ingress Controller, ejecute el siguiente comando:
$curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/rbac-role.yaml
Abra el archivo rbac-role.yaml en un editor de texto y luego en la sección ServiceAccount del archivo, reemplace con su ID de cuenta de AWS y el nombre de función con su nombre de función de IAM.
Aplicar la configuración en el servicio kubernete
$ kubectl apply -f rbac-role.yaml
Crear role IAM y asociarla a servicio kubernetes
Cree un rol de IAM para el controlador de ingreso de ALB y adjunte la política a la cuenta de servicio creada en el paso anterior.
$ eksctl create iamserviceaccount --region us-east-1 --name alb-ingress-controller --namespace kube-system --cluster cluster_EKS_ODM_prueba --attach-policy-arn arn:aws:iam::<AWS-AccountId>:policy/ALBIngressControllerIAMPolicy --override-existing-serviceaccounts --approve
Implementar un ALB ingress controller servicio ODM
Para mayor información y detalle ver:
https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html#w243aac23b7c17c10b3b1
$ curl https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/alb-ingress-controller.yaml > alb-ingress-controller.yaml
Editar el archivo alb-ingress-controller.yaml y cambiar los campos:
- --cluster-name=<EKS>
- --ingress-class="alb"
Implementar el controlador de entrada ALB ingress para ODM
$ kubectl apply -f alb-ingress-controller.yaml
Validar que se encuentre el servicio desplegado y en estado running
$ kubectl get pods -n kube-system
Implementar el servicio de ingress para ODM
Escribe el descriptor de ingreso, debe definir una entrada para enrutar su solicitud a los servicios ODM, aquí hay un descriptor de muestra para implementar la entrada “mycompany”
Comando para desplegar el ingress controller
$ kubectl apply -f ingress-mycompany.yaml
Validar estado despliegue a través del comando:
$ kubectl get ingress mycompany -n kube-system
Validar Servicios
Con esta topología de ODM en su lugar, puede acceder a aplicaciones web para crear, implementar y probar sus servicios de decisiones basados en reglas.
Se puede acceder a los servicios desde las siguientes URL:
Componente | URL | Usuario/Contraseña |
Centro de decisiones | https://$ROOTURL/decisioncenter/ | odmAdmin/odmAdmin |
Consola de Decisión Server | https://$ROOTURL/res/ | odmAdmin/odmAdmin |
Tiempo de ejecución de Decisión Server | https://$ROOTURL/DecisionService/ | odmAdmin/odmAdmin |