Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al completar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Configuración de Oracle Cloud Infrastructure Container Engine for Kubernetes con tres nodos de trabajador
Introducción
En este tutorial, explicaremos cómo configurar un cluster de Kubernetes formado por el plano de control de Kubernetes y el plano de datos (pool de nodos) mediante Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE). También desplegaremos y suprimiremos dos aplicaciones de ejemplo en la plataforma de Kubernetes para demostrar que funciona. Este tutorial preparará el escenario para futuros tutoriales que se sumergirán en los servicios de red ofrecidos dentro de Kubernetes para aplicaciones alojadas en contenedores.
Los modelos de despliegue de OKE de ejemplo son:
-
Ejemplo 1: Cluster con plugin CNI de franela, punto final de API de Kubernetes público, nodos de trabajador privados y equilibradores de carga públicos.
-
Ejemplo 2: Cluster con plugin CNI de franela, punto final de API de Kubernetes privado, nodos de trabajador privados y equilibradores de carga públicos.
-
Ejemplo 3: Cluster con plugin OCI CNI, punto final de API de Kubernetes público, nodos de trabajador privados y equilibradores de carga públicos.
-
Ejemplo 4: Cluster con plugin OCI CNI, punto final de API de Kubernetes privado, nodos de trabajador privados y equilibradores de carga públicos.
Para obtener más información sobre los diferentes modelos de despliegue de OKE que podemos elegir, consulte Configuraciones de recursos de red de ejemplo.
En este tutorial, vamos a implantar el modelo de despliegue del Ejemplo 3.
Objetivos
- Desplegaremos un cluster de control de Kubernetes y nodos de trabajador totalmente desplegados y configurados dentro de Oracle Cloud Infrastructure (OCI). Esto es lo que llamamos Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE). Desplegaremos dos aplicaciones de ejemplo en dos espacios de nombres diferentes en los que una aplicación se desplegará mediante un gráfico de Helm en un nuevo espacio de nombres. Al final, limpiaremos las aplicaciones o pods. No desplegaremos ningún servicio de red para aplicaciones o pods operados por Kubernetes.
Tarea 1: Creación de un nuevo cluster de Kubernetes y verificación de los componentes
-
Haga clic en el menú de hamburguesa.
- Haga clic en Servicios para desarrolladores.
- Haga clic en Clusters de Kubernetes (OKE).
-
Haga clic en Crear cluster.
- Seleccione Creación rápida.
- Haga clic en Ejecutar.
-
En la página Crear cluster (rápido), introduzca la siguiente información.
- Introduzca un nombre del cluster.
- Seleccione un compartimento.
- Seleccione la versión de Kubernetes.
- Seleccione el punto final de API de Kubernetes para que sea un punto final público.
- Seleccione el tipo de nodo que se va a gestionar.
- Desplazar hacia abajo.
- Seleccione los nodos de trabajo de Kubernetes que desea que sean Trabajadores privados.
- Desplazar hacia abajo.
- Mantenga el valor predeterminado de Recuento de nodos (nodos de trabajador) 3.
- Haga clic en Siguiente.
- Revise los parámetros del cluster.
- Desplazar hacia abajo.
- Revise los parámetros de los pools de nodos.
- Desplazar hacia abajo.
- No seleccione la casilla de control Crear un cluster básico.
- Haga clic en Crear cluster.
-
Revise el estado de los diferentes componentes que se crean.
- Asegúrese de que todo tiene un cheque verde.
- Haga clic en Cerrar.
- Revise que el estado sea CREATING (Creando).
- Desplazar hacia abajo.
-
Revise el estado de creación del cluster y el pool de nodos. El cluster de control de Kubernetes se está creando y el pool de nodos de trabajador se creará más adelante.
-
Después de unos minutos, el cluster de control de Kubernetes se crea correctamente.
-
Ahora se creará el pool de nodos de trabajador.
-
Después de unos minutos, el pool de nodos de trabajador se crea correctamente.
- Haga clic en Pools de nodos.
- Observe que los nodos de trabajador del pool aún se están creando.
- Haga clic en 3 de los nodos de trabajador.
-
Observe que todos los nodos tienen el estado Not ready (No preparado).
-
Después de unos minutos, estarán preparados.
El cluster de control de Kubernetes y los nodos de trabajador se despliegan y configuran por completo dentro de Oracle Cloud Infrastructure (OCI). Esto es lo que llamamos Oracle Cloud Infrastructure Container Engine for Kubernetes.
Tarea 2: Verificación de los componentes del cluster de Kubernetes desplegados en la consola de OCI
Cuando utilizamos OKE para crear un cluster de Kubernetes, se crearán algunos recursos dentro de OCI para soportar este despliegue.
El primer y más importante recurso es la red virtual en la nube (VCN). Puesto que hemos seleccionado la opción Creación rápida, se ha creado una nueva VCN dedicada a OKE.
-
Conéctese a la consola de OCI y vaya a Networking, Virtual Cloud Networks (VCN), verá la nueva VCN que se ha creado. Haga clic en la VCN.
Dentro de la VCN, verá tres subredes, una privada y dos públicas para soportar el despliegue de OKE.
-
Verifique los recursos.
- Haga clic en Precios/bloques de CIDR para revisar el CIDR de la VCN.
- Observe que OCI asignó
10.0.0.0/16
.
- Haga clic en Tablas de rutas para revisar las tablas de enrutamiento.
- Observe que se han creado dos tablas de enrutamiento: direccionar a subredes privadas y direccionar a subredes públicas.
- Haga clic en Gateways de Internet para revisar el gateway de Internet que proporcionará conectividad a Internet mediante las subredes públicas hacia y desde Internet.
- Tenga en cuenta que solo hay un gateway de Internet.
- Haga clic en Listas de seguridad para revisar las listas de seguridad que pueden ser reglas de entrada o salida para proteger la conectividad entre las subredes.
- Tenga en cuenta que hay tres listas de seguridad, una utilizada para la protección de conectividad de nodos de trabajador de Kubernetes, la segunda utilizada para la protección de puntos finales de API de Kubernetes y la tercera para la protección de servicios de Kubernetes.
- Haga clic en Gateways de NAT para revisar el gateway de NAT que proporcionará conectividad a Internet mediante las subredes privadas a Internet.
- Observe que solo hay un gateway de NAT.
- Haga clic en Gateways de servicio para revisar el gateway de servicio que proporcionará acceso privado a servicios de Oracle específicos, sin exponer los datos a un gateway de Internet o de NAT.
- Tenga en cuenta que solo hay un gateway de servicio.
- Abra la consola de OCI, haga clic en el menú de hamburguesa y vaya a Recursos informáticos, Instancias.
- Observe que se crean tres instancias que se utilizarán como los tres nodos de trabajador de Kubernetes que especificamos durante el despliegue.
- Abra la consola de OCI, haga clic en el menú de hamburguesa y vaya a Gestión de IP, IP públicas reservadas.
- Tenga en cuenta que hay una dirección IP pública que termina en
.166
, reservada para el punto final de API pública de Kubernetes.
Si colocamos cada dato que acabamos de recopilar y lo colocamos en un diagrama, entonces el diagrama se verá como se muestra en la siguiente imagen.
-
Tablas con detalles de configuración para desplegar OKE
-
VCN:
Recurso Nombre VCN • Nombre: oke-vcn-quick-IH-OKE-CLUSTER-af593850a
• Bloque de CIDR: 10.0.0.0/16
• Resolución de DNS: SeleccionadoGateway de Internet • Nombre: oke-igw-quick-IH-OKE-CLUSTER-af593850a Gateway de NAT • Nombre: oke-ngw-quick-IH-OKE-CLUSTER-af593850a Gateway de servicio • Nombre: oke-sgw-quick-IH-OKE-CLUSTER-af593850a
• Servicios: todos los servicios de la región en Oracle Services NetworkOpciones de DHCP • Tipo de DNS definido en Internet y solucionador de VCN -
Subredes:
Recurso Ejemplo subred pública para punto final de API de Kubernetes Objetivo: Punto final de API de Kubernetes con las siguientes propiedades:
• Tipo: Regional
• Bloque de CIDR: 10.0.0.0/28
• Tabla de rutas: oke-public-routetable-IH-OKE-CLUSTER-af593850a
• Acceso a subred: público
• Resolución de DNS: seleccionado
• Opciones de DHCP: por defecto
• Lista de seguridad: oke-k8sApiEndpoint-quick-IH-OKE-CLUSTER-af593850asubred privada para nodos de trabajo Objetivo: nodos de trabajo con las siguientes propiedades:
• Tipo: Regional
• Bloque de CIDR: 10.0.10.0/24
• Tabla de rutas: N/A
• Acceso a subred: privado
• Resolución de DNS: seleccionado
• Opciones de DHCP: por defecto
• Lista de seguridad: oke-nodeseclist-quick-IH-OKE-CLUSTER-af593850asubred privada para pods Finalidad: pods con las siguientes propiedades:
• Tipo: Regional
• Bloque de CIDR: 10.96.0.0/16
• Tabla de rutas: oke-private-routetable-IH-OKE-CLUSTER-af593850a
• Acceso a subred: Privado
• Resolución de DNS: Seleccionado
• Opciones de DHCP: Por defecto
• Lista de seguridad: N/Asubred pública para equilibradores de carga de servicio Objetivo: equilibradores de carga con las siguientes propiedades:
• Tipo: Regional
• Bloque de CIDR: 10.0.20.0/24
• Tabla de rutas: oke-private-routetable-IH-OKE-CLUSTER-af593850a
• Acceso a subred: público
• Resolución de DNS: seleccionado
• Opciones de DHCP: por defecto
• Lista de seguridad: oke-svclbseclist-quick-IH-OKE-CLUSTER-af593850a -
Tablas de rutas:
Recurso Ejemplo Tabla de rutas para subred de punto final de API de Kubernetes pública Objetivo: punto final de API routetable-Kubernetes, con una regla de ruta definida de la siguiente manera:
• Bloque de CIDR de destino: 0.0.0.0/0
• Tipo de destino: gateway de Internet
• Destino: oke-igw-quick-IH-OKE-CLUSTER-af593850aTabla de rutas para subred de pods privados Finalidad: routetable-pods, con dos reglas de ruta definidas de la siguiente manera:
• Regla para el tráfico a Internet:
◦ Bloque de CIDR de destino: 0.0.0.0/0
◦ Tipo de destino: gateway de NAT
◦ Destino: oke-ngw-quick-IH-OKE-CLUSTER-af593850a
• Regla para el tráfico a servicios de OCI:
◦ Destino: todos los servicios de región de Oracle Services Network
◦ Tipo de destino: gateway de servicio
◦ Destino: oke-sgw-quick-IH-OKE-CLUSTER-af593850aTabla de rutas para subred de equilibradores de carga pública Objetivo: routetable-serviceloadbalancers, con una regla de ruta definida de la siguiente manera:
• Bloque de CIDR de destino: 0.0.0.0/0
• Tipo de destino: gateway de Internet
• Destino: oke-igw-quick-IH-OKE-CLUSTER-af593850a
-
-
Reglas de lista de seguridad para subred de punto final de API de Kubernetes pública
La lista de seguridad
oke-k8sApiEndpoint-quick-IH-OKE-CLUSTER-af593850a
tiene las reglas de entrada y salida como se muestra en las siguientes tablas.-
Reglas de entrada:
Sin Estado Origen Protocolo IP Rango de puertos de origen Rango de puertos de destino Tipo y código Permite Descripción N.º 0.0.0.0/0 TCP Todas 6.443 Tráfico TCP para puertos: 6443 Acceso externo al punto final de API de Kubernetes N.º 10.0.10.0/24 TCP Todas 6.443 Tráfico TCP para puertos: 6443 Comunicación del trabajador de Kubernetes al punto final de API de Kubernetes N.º 10.0.10.0/24 TCP Todas 12.250 Tráfico TCP para puertos: 12250 Comunicación del trabajador de Kubernetes al plano de control N.º 10.0.10.0/24 ICMP 3 4 Tráfico ICMP para: 3, 4 Destino Inaccesible: Se Necesita Fragmentación y Se Necesita No Fragmentar Detección de ruta -
Reglas de salida:
Sin Estado Destino Protocolo IP Rango de puertos de origen Rango de puertos de destino Tipo y código Permite Descripción N.º Todos los servicios de AMS en Oracle Services Network TCP Todas 443 Tráfico TCP para puertos: HTTPS 443 Permitir a Kubernetes Control Plane comunicarse con OKE N.º 10.0.10.0/24 TCP Todas Todas Tráfico TCP para puertos: Todo Todo el tráfico a nodos de trabajador N.º 10.0.10.0/24 ICMP 3 4 Tráfico ICMP para: 3, 4 Destino Inaccesible: Se Necesita Fragmentación y Se Necesita No Fragmentar Detección de ruta
-
-
Reglas de lista de seguridad para subred de nodos de trabajador privada
La lista de seguridad
oke-nodeseclist-quick-IH-OKE-CLUSTER-af593850a
tiene las reglas de entrada y salida como se muestra en las siguientes tablas.Reglas de entrada:
Sin Estado Origen Protocolo IP Rango de puertos de origen Rango de puertos de destino Tipo y código Permite Descripción N.º 10.0.10.0/24 Todos los protocolos Todo el tráfico para todos los puertos Permitir que los pods en un nodo de trabajador se comuniquen con los pods en otros nodos de trabajador N.º 10/28 ICMP 3 4 Tráfico ICMP para: 3, 4 Destino Inaccesible: Se Necesita Fragmentación y Se Necesita No Fragmentar Detección de ruta N.º 10/28 TCP Todas Todas Tráfico TCP para puertos: Todo Acceso TCP desde el plano de control de Kubernetes N.º 0.0.0.0/0 TCP Todas 22 Tráfico TCP para puertos: protocolo de conexión remota SSH 22 Tráfico SSH entrante a nodos de trabajador N.º 10/24 TCP Todas 32.291 Tráfico TCP para puertos: 32291 N.º 10/24 TCP Todas 10.256 Tráfico TCP para puertos: 10256 N.º 10/24 TCP Todas 31.265 Tráfico TCP para puertos: 31265 Reglas de salida:
Sin Estado Destino Protocolo IP Rango de puertos de origen Rango de puertos de destino Tipo y código Permite Descripción N.º 10.0.10.0/24 Todos los protocolos Todo el tráfico para todos los puertos Permitir que los pods en un nodo de trabajador se comuniquen con los pods en otros nodos de trabajador N.º 10/28 TCP Todas 6.443 Tráfico TCP para puertos: 6443 Acceso al punto final de API de Kubernetes N.º 10/28 TCP Todas 12.250 Tráfico TCP para puertos: 12250 Comunicación del trabajador de Kubernetes al plano de control N.º 10/28 ICMP 3 4 Tráfico ICMP para: 3, 4 Destino Inaccesible: Se Necesita Fragmentación y Se Necesita No Fragmentar Detección de ruta N.º Todos los servicios de AMS en Oracle Services Network TCP Todas 443 Tráfico TCP para puertos: HTTPS 443 Permitir que los nodos se comuniquen con OKE para garantizar un inicio correcto y un funcionamiento continuo N.º 0.0.0.0/0 ICMP 3 4 Tráfico ICMP para: 3, 4 Destino Inaccesible: Se Necesita Fragmentación y Se Necesita No Fragmentar Acceso ICMP desde el plano de control de Kubernetes N.º 0.0.0.0/0 Todos los protocolos Todo el tráfico para todos los puertos Acceso a Internet de nodos de trabajador -
Reglas de Lista de Seguridad para Subred de Equilibrador de Carga Pública
La lista de seguridad
oke-svclbseclist-quick-IH-OKE-CLUSTER-af593850a
tiene las reglas de entrada y salida como se muestra en las siguientes tablas.-
Reglas de entrada:
Sin Estado Origen Protocolo IP Rango de puertos de origen Rango de puertos de destino Tipo y código Permite Descripción N.º 0.0.0.0/0 TCP Todas 80 Tráfico TCP para puertos: 80 -
Reglas de salida:
Sin Estado Destino Protocolo IP Rango de puertos de origen Rango de puertos de destino Tipo y código Permite Descripción N.º 10.0.10.0/24 TCP Todas 32.291 Tráfico TCP para puertos: 32291 N.º 10.0.10.0/24 TCP Todas 10.256 Tráfico TCP para puertos: 10256 N.º 10.0.10.0/24 TCP Todas 31.265 Tráfico TCP para puertos: 31265
-
Tarea 3: Verificación de que el cluster de Kubernetes se está ejecutando con la CLI
-
Abra la consola de OCI, haga clic en el menú de hamburguesa y vaya a Servicios para desarrolladores, Clusters de Kubernetes (OKE). Haga clic en el cluster de Kubernetes creado en la tarea 1.
- Desplazar hacia abajo.
- Haga clic en Inicio rápido.
-
Haga clic en Acceder al cluster.
- Seleccione Acceso a Cloud Shell.
- Haga clic en Copiar para copiar el comando y permitir el acceso al cluster de Kubernetes.
- Haga clic en Iniciar Cloud Shell.
En el siguiente diagrama se muestra cómo se realizará la conexión para realizar la gestión en el cluster de OKE mediante OCI Cloud Shell.
-
Se iniciará OCI Cloud Shell.
Se mostrarán algunos mensajes informativos sobre lo que está sucediendo en segundo plano.
En este caso, es posible permitir que OCI Cloud Shell se ejecute en diferentes arquitecturas de CPU.
-
Haga clic en Cerrar para cerrar este mensaje informativo.
-
Estamos listos para utilizar OCI Cloud Shell para acceder al cluster de Kubernetes.
-
Pegue el comando que se copió anteriormente en esta tarea.
-
Ejecute el siguiente comando para obtener información sobre el cluster de Kubernetes.
kubectl cluster-info
-
Ejecute el siguiente comando para obtener información sobre los nodos de trabajador.
kubectl get nodes
-
Ejecute el siguiente comando para obtener más información sobre los nodos de trabajador.
kubectl get nodes -o wide
-
Ejecute el siguiente comando para borrar la pantalla y empezar con una nueva pantalla.
clear
- Observe que la salida anterior se ha borrado, pero sigue siendo accesible cuando se desplaza hacia arriba.
- Haga clic en el icono Minimizar para minimizar la ventana de OCI Cloud Shell.
-
Haga clic en Cerrar para cerrar la ventana Acceder al cluster.
La conexión se realiza para realizar la gestión en el cluster de OKE mediante OCI Cloud Shell.
Tarea 4: Despliegue de una aplicación Nginx de ejemplo con kubectl
-
Ejecute los siguientes comandos.
- Anote el comando para obtener la versión de Kubernetes.
- Anote el comando para desplegar una aplicación de ejemplo.
- Haga clic en Restaurar para restaurar la ventana de OCI Cloud Shell.
-
Ejecute el siguiente comando para obtener la versión de Kubernetes.
kubectl version
-
Ejecute el siguiente comando para verificar los pods o aplicaciones actuales desplegados.
kubectl get pods
Observe que no se han encontrado recursos.
-
Ejecute el siguiente comando para desplegar una nueva aplicación de ejemplo.
kubectl create -f https://k8s.io/examples/application/deployment.yaml
-
Ejecute el siguiente comando para verificar los pods o aplicaciones actuales desplegados.
kubectl get pods
-
Observe que hay pods en el estado RUNNING. Esto significa que la aplicación que acabamos de desplegar se está ejecutando.
-
Ejecute el siguiente comando para obtener las direcciones IP para acceder a la aplicación.
kubectl get deploy,svc
-
Tenga en cuenta que la aplicación recién desplegada no tiene ninguna dirección IP asignada y que solo el cluster de Kubernetes tiene un servicio de IP de cluster asociado con una dirección IP interna.
-
Ejecute el siguiente comando para consultar los servicios (de red) conectados específicamente para la aplicación recién desplegada.
kubectl get svc ngnix
-
Tenga en cuenta que no hay servicios (de red) desplegados ni asociados para la aplicación Nginx desplegada. Por este motivo, no podremos acceder a la aplicación desde otra aplicación ni utilizar el navegador web para acceder a la página web en el servidor web de Nginx. Vamos a discutir esto en otro tutorial.
Tarea 5: Despliegue de una aplicación MySQL de ejemplo mediante un gráfico de Helm
-
Un gráfico de Helm es un paquete que contiene todos los recursos necesarios para desplegar una aplicación en un cluster de Kubernetes. Ejecute los siguientes comandos para:
-
Agregue el repositorio de Bitnami para la base de datos MySQL.
helm repo add bitnami https://charts.bitnami.com/bitnami
-
Despliegue una base de datos MySQL en los nodos de trabajador de Kubernetes y también cree un nuevo mysql de espacio de nombres.
helm install mysql bitnami/mysql -–namespace mysql --create-namespace
-
-
Para obtener las aplicaciones desplegadas, ejecute el siguiente comando. Este comando solo mostrará las aplicaciones desplegadas en el espacio de nombres actual (por defecto).
kubectl get pods
-
Observe que solo la aplicación Nginx aparece en el espacio de nombres actual (por defecto). Este comando mostrará ahora las aplicaciones desplegadas en todo el cluster (todos los espacios de nombres).
kubectl get pods -A -w
- Observe que la aplicación Nginx se está ejecutando en el espacio de nombres por defecto.
- Observe que la aplicación MySQL se está ejecutando en el nuevo espacio de nombres mysql.
Tarea 6: Limpieza de los pods y espacios de nombres
Hemos desplegado una aplicación en el espacio de nombres por defecto (Nginx) y otra aplicación en un nuevo espacio de nombres (MySQL). Usando gráficos de Helm, limpiemos el entorno para que podamos comenzar de nuevo cuando sea necesario.
-
Utilice el siguiente comando para obtener todos los nodos de trabajador (de todo el cluster).
kubectl get nodes -o wide
-
Utilice el siguiente comando para obtener todos los pods en ejecución en el espacio de nombres actual (por defecto).
kubectl get pods -o wide
-
Ejecute el siguiente comando para obtener todos los espacios de nombres.
kubectl get namespaces
-
Ejecute el siguiente comando para obtener específicamente todos los pods en ejecución en el espacio de nombres actual (por defecto).
kubectl get pods --namespace=default
-
Ejecute el siguiente comando para obtener específicamente todos los pods en ejecución en el espacio de nombres MySQL.
kubectl get pods --namespace=mysql
-
Ejecute el siguiente comando para suprimir todos los despliegues o pods del espacio de nombres por defecto.
kubectl delete --all deployments --namespace=default
-
Utilice el siguiente comando para verificar si se suprimen los despliegues o los pods.
kubectl get pods --namespace=default
-
Utilice el siguiente comando para obtener específicamente todos los pods en ejecución en el espacio de nombres MySQL. Solo verifique si esto todavía existe.
kubectl get pods --namespace=mysql
-
Ejecute el siguiente comando para suprimir todos los despliegues o pods y el espacio de nombres MySQL completo.
kubectl delete namespace mysql
-
Utilice este comando para recopilar todos los espacios de nombres y verificar si se suprime el espacio de nombres MySQL.
kubectl get namespaces
Agradecimientos
- Autor: Iwan Hoogendoorn (especialista en redes de OCI)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Set up Oracle Cloud Infrastructure Container Engine for Kubernetes with Three Worker Nodes
F95671-01
March 2024