Nota:

Utilizar el tipo de servicio LoadBalancer en Oracle Cloud Native Environment

Introducción

El servicio LoadBalancer de Kubernetes expone el despliegue externamente mediante el equilibrador de carga de un proveedor en la nube. Los servicios NodePort y ClusterIP dependientes a los que se enruta el equilibrador de carga externo se crean automáticamente.

En este tutorial se muestra cómo desplegar el módulo Oracle Cloud Infrastructure Cloud Controller Manager (módulo oci-ccm) en Oracle Cloud Native Environment para manejar solicitudes de un tipo de servicio LoadBalancer. El módulo Gestor de controladores de Oracle Cloud Infrastructure utiliza el proyecto de código abierto oci-cloud-controller-manager, que es una implementación del Gestor de controladores en la nube de Kubernetes (o proveedor en la nube fuera de árbol) para Oracle Cloud Infrastructure (OCI).

Objetivos

Requisitos

Un sistema Oracle Linux 8 o posterior con la siguiente configuración:

Configuración del entorno de prácticas

Nota: Al utilizar el entorno de prácticas gratuitas, consulte Aspectos básicos de las prácticas de Oracle Linux para obtener información sobre la conexión y otras instrucciones de uso.

Información: el entorno de laboratorio gratuito despliega Oracle Cloud Native Environment en el nodo proporcionado, listo para crear entornos. Este despliegue tarda aproximadamente entre 8 y 10 minutos en completarse después del inicio. Por lo tanto, es posible que desee alejarse mientras se ejecuta y, a continuación, volver a completar el laboratorio.

  1. Si aún no está conectado, abra un terminal y conéctese mediante ssh al sistema ocne-node01.

    ssh oracle@<ip_address_of_ol_node>
    
  2. Confirme que el entorno está listo.

    kubectl get pods -A
    

    Resultado de ejemplo:

    [oracle@ocne-node01 ~]$ kubectl get pods -A
    NAMESPACE                      NAME                                             READY   STATUS    RESTARTS   AGE
    externalip-validation-system   externalip-validation-webhook-7988bff847-8ws2v   1/1     Running   0          3m18s
    kube-system                    coredns-7cbc77dbc7-qxqth                         1/1     Running   0          3m18s
    kube-system                    coredns-7cbc77dbc7-r9bgj                         1/1     Running   0          3m18s
    kube-system                    etcd-ocne-node01                                 1/1     Running   0          3m37s
    kube-system                    kube-apiserver-ocne-node01                       1/1     Running   0          3m37s
    kube-system                    kube-controller-manager-ocne-node01              1/1     Running   0          3m37s
    kube-system                    kube-flannel-ds-vcwzn                            1/1     Running   0          3m18s
    kube-system                    kube-proxy-7lx59                                 1/1     Running   0          3m18s
    kube-system                    kube-scheduler-ocne-node01                       1/1     Running   0          3m37s
    kubernetes-dashboard           kubernetes-dashboard-5d5d4947b5-7pffh            1/1     Running   0          3m18s
    

Despliegue del módulo del gestor de controladores de Oracle Cloud Infrastructure Cloud

  1. Agregue los módulos helm y oci-ccm al archivo de configuración existente.

    tee -a ~/myenvironment.yaml > /dev/null << 'EOF'
          - module: helm
            name: myhelm
            args:
              helm-kubernetes-module: mycluster
          - module: oci-ccm
            name: myoci
            oci-ccm-helm-module: myhelm
            oci-use-instance-principals: true
            oci-compartment:
            oci-vcn:
            oci-lb-subnet1:
    EOF
    

    El entorno de prácticas gratuitas utiliza políticas para permitir el uso de principales de instancias, que permiten que las instancias sean actores (o principales) autorizados para realizar acciones en recursos de servicio.

    El módulo Oracle Cloud Infrastructure Cloud Controller Manager utiliza la opción oci-use-instance-principals: false para la autenticación como configuración por defecto.

    Para obtener más información, consulte la documentación sobre uso del equilibrador de carga de Oracle Cloud Infrastructure sobre cómo transferir información de credenciales relacionada con su arrendamiento de Oracle Cloud Infrastructure en lugar de utilizar principales de instancia.

  2. Agregue los OCID necesarios dentro del archivo de configuración.

    1. Cambie de Terminal a Free Lab Desktop.

    2. Abra la página de detalles del Luna Lab mediante el icono Luna Lab del escritorio de laboratorio gratuito.

    3. Haga clic en el separador Oracle Cloud.

      oracle_cloud

    4. Desplácese hacia abajo y busque el OCID de compartimento y cópielo.

      comp_ocid_copy

    5. Cambie al terminal abierto anterior.

    6. Abra el archivo de configuración con el editor de texto que desee. Aquí utilizaremos vi.

      vi ~/myenvironment.yaml
      
    7. Introduzca el modo de inserción vi escribiendo i.

    8. Agregue el OCID de compartimento al final de la línea oci-compartment:.

      Nota: Dado que es YAML, recuerde agregar un espacio antes de pegar el valor.

      Ejemplo:

      - module: oci-ccm
        name: myoci
        oci-ccm-helm-module: myhelm
        oci-use-instance-principals: true
        oci-compartment: ocid1.compartment.oc1..aaaaaaaamqicnhi7e6dj7fwtbiibfxxlzjpd3uf33f7a33gftzgpchrnuzna
        oci-vcn:
        oci-lb-subnet1:
      
    9. Cambie a la página de detalles del Luna Lab y haga clic en el separador Recursos.

      recursos

    10. Busque vcn_ocid y cópielo.

      vcn_copy

    11. Vuelva al terminal.

    12. Agregue vcn_ocid al final de la línea oci-vcn:.

      Nota: Dado que es YAML, recuerde agregar un espacio antes de pegar el valor.

      Ejemplo:

      - module: oci-ccm
        name: myoci
        oci-ccm-helm-module: myhelm
        oci-use-instance-principals: true
        oci-compartment: ocid1.compartment.oc1..aaaaaaaamqicnhi7e6dj7fwtbiibfxxlzjpd3uf33f7a33gftzgpchrnuzna
        oci-vcn: ocid1.vcn.oc1.eu-frankfurt-1.amaaaaaar5cqh7qam56nztotyx4xzhovuo7stl5dddlmdmubdcdam64sadka
        oci-lb-subnet1:
      
    13. Vuelva a la página de detalles del Luna Lab.

    14. Busque vcn_subnet_ocid y cópielo.

      vcn_sub_copy

    15. Vuelva al terminal.

    16. Agregue vcn_subnet_ocid al final de la línea oci-lb-subnet1:.

      Nota: Dado que es YAML, recuerde agregar un espacio antes de pegar el valor.

      Ejemplo:

      - module: oci-ccm
        name: myoci
        oci-ccm-helm-module: myhelm
        oci-use-instance-principals: true
        oci-compartment: ocid1.compartment.oc1..aaaaaaaamqicnhi7e6dj7fwtbiibfxxlzjpd3uf33f7a33gftzgpchrnuzna
        oci-vcn: ocid1.vcn.oc1.eu-frankfurt-1.amaaaaaar5cqh7qam56nztotyx4xzhovuo7stl5dddlmdmubdcdam64sadka
        oci-lb-subnet1: ocid1.subnet.oc1.eu-frankfurt-1.aaaaaaaazq3yaeofyv3azmnzm2cxrilnfhpmvhark7xw5u6eo3574mtbzswa
      
    17. Guarde y cierre el archivo. Si utiliza vi, puede hacerlo escribiendo ESC, :wq! y ENTER.

    IMPORTANTE: asegúrese de que los OCID son correctos para su entorno. Si los valores son incorrectos, los módulos oci-ccm se instalan, pero no podrán crear LoadBalancer cuando lo solicite el servicio.

  3. Crear e instalar módulos.

    olcnectl module create --config-file myenvironment.yaml
    olcnectl module validate --config-file myenvironment.yaml
    olcnectl module install --config-file myenvironment.yaml
    

Crear Despliegue y Servicio

  1. Genere el archivo de configuración para el despliegue y el servicio.

    tee echo-oci-lb.yml > /dev/null << 'EOF'
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: echo-deployment
      labels:
        app: echo1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: echo1
      template:
        metadata:
          labels:
            app: echo1
        spec:
          containers:
          - name: echoserver
            image: k8s.gcr.io/echoserver:1.4
            ports:
            - containerPort: 80
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: echo-lb-service
      annotations:
        service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
        service.beta.kubernetes.io/oci-load-balancer-internal: "true"
        service.beta.kubernetes.io/oci-load-balancer-shape: "10Mbps"
    spec:
      selector:
        app: echo1
      type: LoadBalancer
      ports:
      - name: http
        port: 80
        targetPort: 8080
    EOF
    
  2. Crear despliegue y servicio.

    kubectl create -f echo-oci-lb.yml
    

Verificación de la creación del despliegue y el servicio

  1. Obtener despliegue

    kubectl get deployment
    

    Resultado de ejemplo:

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    echo-deployment   2/2     2            2           15s
    
  2. Obtener servicio

    kubectl get service
    

    Resultado de ejemplo:

    NAME              TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    echo-lb-service   LoadBalancer   10.108.35.18   <pending>     80:32162/TCP   23s
    kubernetes        ClusterIP      10.96.0.1      <none>        443/TCP        13m
    

    El elemento 'pending' en EXTERNAL-IP para echo-lb-service existe hasta que el módulo Oracle Cloud Infrastructure Cloud Controller Manager crea e inicia OCI LoadBalancer.

    Repita la ejecución del comando kubectl get service hasta que la salida muestre la dirección EXTERNAL-IP. Debe aparecer dentro de 1-2 minutos, máximo.

    Los PORTS indican el puerto de recepción LoadBalancer de OCI (80) y el puerto de servicio secundario NodePort de Kubernetes generado automáticamente.

  3. Obtener puntos finales

    kubectl get endpoints
    

    Resultado de ejemplo:

    NAME              ENDPOINTS                         AGE
    echo-lb-service   10.244.0.7:8080,10.244.0.8:8080   5m37s
    kubernetes        10.0.0.140:6443                   18m
    

    Un punto final es un recurso al que hace referencia un servicio de Kubernetes. El recurso realiza un seguimiento de las direcciones IP y los puertos de uno o más pods asignados dinámicamente durante la creación del servicio.

Verificar aplicación

Con un tipo de servicio LoadBalancer, la dirección IP y el puerto que se van a probar son la dirección IP EXTERNAL y el puerto del servicio, que es el listener LoadBalancer de OCI. La solicitud se envía al backend LoadBalancer de OCI. El backend LoadBalancer de OCI enruta el tráfico al servicio NodePort secundario que se ejecuta en el nodo específico y, a continuación, al Pod.

  1. Utilice JSONPath para asignar al listener LoadBalancer una variable

    LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service)
    
  2. Utilice JSONPath para asignar una variable al puerto LoadBalancer

    LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
    
  3. Pruebe la aplicación.

    curl -i -w "\n" $LB:$LBPORT
    

    Resultado de ejemplo:

    [oracle@ocne-node01 ~]$ curl -i -w "\n" $LB:$LBPORT
    HTTP/1.1 200 OK
    Server: nginx/1.10.0
    Date: Wed, 06 Jul 2022 16:41:23 GMT
    Content-Type: text/plain
    Transfer-Encoding: chunked
    Connection: keep-alive
    
    CLIENT VALUES:
    client_address=10.244.0.1
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://10.0.0.138:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=10.0.0.138
    user-agent=curl/7.61.1
    BODY:
    -no body in request-
    

    client_address que se muestra en la salida es la dirección IP de la puerta de enlace asociada con la interfaz cni0. La interfaz cni0 gestiona la red de cluster de Kubernetes como se trata en la documentación ascendente de Plugins de red.

Resumen

Ahora entendemos cómo crear un servicio LoadBalancer en Kubernetes. Desproteja y explique automáticamente funciones adicionales de Oracle Cloud Native Environment mediante el módulo Oracle Cloud Infrastructure Cloud Controller Manager y las anotaciones de equilibrador de carga disponibles.

Para obtener más información

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 y conviértase en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.