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.
Uso del plugin CNI de red de pods nativos de VCN de OCI para proporcionar servicios de red a Oracle Cloud Infrastructure Container Engine for Kubernetes
Introducción
Por defecto, Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) utiliza el plugin de la interfaz de red de contenedor (CNI) nativa de VCN de Oracle Cloud Infrastructure (OCI) para proporcionar funciones de red o seguridad a aplicaciones en contenedores. En este tutorial, le mostraremos cómo puede verificar qué plugin de CNI se utiliza y cómo podemos utilizar este plugin de CNI por defecto (plugin de CNI nativo de VCN de OCI) para configurar un servicio OCI Load Balancer y asociarlo a una aplicación que se ejecute dentro de un contenedor.
La ventaja de utilizar el plugin CNI de red de pods nativos de VCN de OCI es que los pods o contenedores obtendrán una dirección IP de la subred privada en la VCN. Esto significa que los pods de Kubernetes están en la misma red que las máquinas virtuales (instancias) o los nodos de barra u otras cargas de trabajo.
Objetivos
- Veremos cómo podemos verificar el plugin CNI predeterminado que usa OKE. Desplegaremos una nueva aplicación Nginx en contenedores para probar algunas funciones de red básicas del plugin CNI nativo de VCN de OCI por defecto y aprovechar el plugin CNI de red de pods nativos de VCN de OCI para crear un nuevo servicio de red de tipo equilibrador de carga y exponer ese servicio a nuestra aplicación Nginx desplegada. Al final, borraremos la aplicación y el servicio de equilibrador de carga.
Tarea 1: Despliegue de un cluster de Kubernetes con OKE
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.
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.
Seleccionaremos el modelo de despliegue del ejemplo 3. Para obtener más información, consulte Configuración de Oracle Cloud Infrastructure Container Engine for Kubernetes con tres nodos de trabajador.
Tarea 2: Verificación del plugin CNI instalado
Cuando el cluster de Kubernetes que utiliza OKE esté completamente desplegado y tenga acceso a este, puede ejecutar el siguiente comando.
-
Ejecute el siguiente comando.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ **kubectl get all -n kube-system** NAME READY STATUS RESTARTS AGE pod/coredns-64ffdf5cf7-lvrhq 1/1 Running 0 2d pod/coredns-64ffdf5cf7-rmxt8 1/1 Running 0 2d pod/coredns-64ffdf5cf7-vq76p 1/1 Running 0 2d pod/csi-oci-node-ghff6 1/1 Running 0 2d pod/csi-oci-node-jrjpr 1/1 Running 0 2d pod/csi-oci-node-r68qz 1/1 Running 1 (2d ago) 2d pod/kube-dns-autoscaler-5bb955d5c-r2j2q 1/1 Running 0 2d pod/kube-proxy-5cznp 1/1 Running 0 2d pod/kube-proxy-fddrd 1/1 Running 0 2d pod/kube-proxy-sb769 1/1 Running 0 2d pod/proxymux-client-7s7f9 1/1 Running 0 2d pod/proxymux-client-lngrm 1/1 Running 0 2d pod/proxymux-client-qxlf2 1/1 Running 0 2d **pod/vcn-native-ip-cni-hkfjz 1/1 Running 0 2d pod/vcn-native-ip-cni-pdv4c 1/1 Running 0 2d pod/vcn-native-ip-cni-qfvk8 1/1 Running 0 2d** NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 2d NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 2d daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 2d daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 2d daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 2d daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 2d **daemonset.apps/vcn-native-ip-cni 3 3 3 3 3 <none> 2d** NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/coredns 3/3 3 3 2d deployment.apps/kube-dns-autoscaler 1/1 1 1 2d NAME DESIRED CURRENT READY AGE replicaset.apps/coredns-64ffdf5cf7 3 3 3 2d replicaset.apps/kube-dns-autoscaler-5bb955d5c 1 1 1 2d iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Observe que el nombre es
vcn-native
en la salida de la sección pod. -
Observe que el nombre es
vcn-native
en la salida de la sección daemonset.
Esto le mostrará que el plugin CNI de red de pods nativos de VCN de OCI se utiliza actualmente para este despliegue de OKE desplegado.
Tarea 3: Despliegue de una Aplicación de Ejemplo
Utilizaremos esta aplicación de ejemplo junto con el plugin CNI de red de pods nativos de VCN de OCI y activaremos el tipo de servicio OCI Load Balancer en la siguiente tarea.
-
Ejecute el siguiente comando para desplegar una aplicación Nginx de ejemplo en OKE.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml deployment.apps/nginx-deployment created
-
Ejecute el siguiente comando para verificar los detalles de la aplicación Nginx de ejemplo desplegada.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl describe deployment nginx-deployment Name: nginx-deployment Namespace: default CreationTimestamp: Fri, 08 Mar 2024 07:57:02 +0000 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.14.2 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-86dcfdf4c6 (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 14s deployment-controller Scaled up replica set nginx-deployment-86dcfdf4c6 to 2 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Observe que la aplicación se despliega mediante dos pods.
-
Ejecute el siguiente comando para echar un vistazo más de cerca a los pods desplegados.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 3m46s nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 3m46s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Tenga en cuenta que hay dos instancias, pods o réplicas de la aplicación Nginx y el estado se define en RUNNING.
En el siguiente diagrama se puede encontrar una representación visual del despliegue. Céntrese en los dos pods desplegados dentro de los nodos de trabajador.
La ventaja de utilizar el plugin CNI de red de pods nativos de VCN de OCI es que los pods o contenedores obtendrán una dirección IP de la subred privada en la VCN. Esto significa que los pods de Kubernetes están en la misma red que las máquinas virtuales (instancias) o los nodos de barra u otras cargas de trabajo.
Tarea 4: Configuración de servicios de Kubernetes del tipo de equilibrador de carga
Tenemos nuestra aplicación de ejemplo ejecutándose dentro de OKE, es hora de exponer la aplicación a la red o a Internet asociando un servicio de red de tipo equilibrador de carga a la aplicación.
-
Compruebe los servicios en ejecución existentes en el cluster de Kubernetes.
-
Ejecute el siguiente comando para revisar los servicios en ejecución existentes en el cluster de Kubernetes.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Observe que el único servicio que se está ejecutando pertenece al plano de control de Kubernetes.
-
-
Agregue el servicio de red a la aplicación.
-
Ejecute el siguiente comando para desplegar un nuevo servicio de red de plugin CNI de red de pods nativos de VCN de OCI del tipo de equilibrador de carga y exponer este nuevo servicio a la aplicación.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service service/my-service exposed iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Observe que el servicio se expone correctamente.
-
-
Compruebe los servicios en ejecución existentes en el cluster de Kubernetes.
-
Ejecute el siguiente comando para revisar los servicios en ejecución existentes en el cluster de Kubernetes.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h my-service LoadBalancer 10.96.209.132 xxx.xxx.xxx.167 80:32291/TCP 53s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Observe que el servicio que acabamos de configurar ahora está en la lista.
-
Observe el
EXTERNAL-IP
(dirección IP pública) que se ha asignado al equilibrador de carga que termina en.167
. -
Haga clic en el icono de minimizar para minimizar OCI Cloud Shell.
-
-
Copie la dirección IP pública y péguela en el explorador web. Ahora podemos acceder al servidor web de Nginx desplegado en un contenedor dentro de Oracle Cloud Infrastructure Container Engine for Kubernetes.
-
También podemos echar un vistazo más de cerca a lo que está sucediendo en segundo plano mediante la consola de OCI.
-
Haga clic en Red.
-
Haga clic en Equilibradores de carga.
-
-
Haga clic en Equilibrador de carga.
- Observe que hay un nuevo equilibrador de carga desplegado con la dirección IP pública que termina en
.167
. - Haga clic en el equilibrador de carga.
- Observe que el equilibrador de carga es ACTIVO.
- Desplazar hacia abajo.
- Revise los detalles de configuración del equilibrador de carga desplegado.
- Haga clic en Restaurar para restaurar OCI Cloud Shell.
- Observe que hay un nuevo equilibrador de carga desplegado con la dirección IP pública que termina en
En el siguiente diagrama se puede encontrar una representación visual del despliegue del equilibrador de carga. Céntrese en el equilibrador de carga.
Tarea 5: Eliminación de la aplicación de ejemplo y los servicios de Kubernetes del tipo de equilibrador de carga
Hemos desplegado una aplicación de ejemplo y creado un nuevo servicio de red de Kubernetes de tipo equilibrador de carga. Es hora de limpiar la aplicación y el servicio.
-
Elimine el servicio del equilibrador de carga.
-
Ejecute el siguiente comando para suprimir el servicio de equilibrador de carga.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service my-service -n default service "my-service" deleted
-
Observe que el servicio del equilibrador de carga se ha suprimido correctamente.
-
Ejecute el siguiente comando para verificar que se ha suprimido el servicio de equilibrador de carga.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 2d23h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Observe que se suprime el servicio del equilibrador de carga.
-
-
Elimine la aplicación de ejemplo.
-
Ejecute el siguiente comando para recuperar los pods existentes.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-fdxgz 1/1 Running 0 36m nginx-deployment-86dcfdf4c6-fqrkh 1/1 Running 0 36m
-
Observe que la aplicación Nginx aún se está ejecutando.
-
Ejecute el siguiente comando para suprimir el despliegue de la aplicación Nginx.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete deployment nginx-deployment --namespace default deployment.apps "nginx-deployment" deleted
-
Ejecute el siguiente comando para recuperar los pods existentes de nuevo y verificar que se ha suprimido el despliegue.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods No resources found in default namespace. iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Observe que se suprime la aplicación Nginx.
-
Haga clic en el icono de minimizar para minimizar OCI Cloud Shell.
- Observe que la consola de OCI mostrará un mensaje que indica que el equilibrador de carga se ha suprimido.
- Haga clic en Cerrar.
-
Observe que ya no hay ningún equilibrador de carga desplegado.
En el siguiente diagrama se puede encontrar una representación visual de la supresión del equilibrador de carga. Céntrese en la parte en la que ya no se despliega el equilibrador de carga.
Enlaces relacionados
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.
Use OCI VCN-Native Pods Networking CNI Plugin to Provide Networking Services to Oracle Cloud Infrastructure Container Engine for Kubernetes
F95767-01
March 2024