Note:

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.

image

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

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:

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.

  1. 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)$ 
    
  2. Observe que el nombre es vcn-native en la salida de la sección pod.

  3. Observe que el nombre es vcn-native en la salida de la sección daemonset.

image

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.

  1. 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
    
  2. 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)$
    
  3. Observe que la aplicación se despliega mediante dos pods.

image

  1. 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)$ 
    
  2. Tenga en cuenta que hay dos instancias, pods o réplicas de la aplicación Nginx y el estado se define en RUNNING.

image

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.

image

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.

En el siguiente diagrama se puede encontrar una representación visual del despliegue del equilibrador de carga. Céntrese en el equilibrador de carga.

image

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.

Observe que ya no hay ningún equilibrador de carga desplegado.

image

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.

image

Agradecimientos

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.