Nota:

Utilice MetalLB con Oracle Cloud Native Environment

Introducción

Los equilibradores de carga de red proporcionan un método para exponer externamente las aplicaciones de Kubernetes. Se utiliza un servicio LoadBalancer de Kubernetes para crear un equilibrador de carga de red que proporciona y expone una dirección IP externa que se puede utilizar para conectarse a una aplicación desde fuera del cluster.

MetalLB es un equilibrador de carga de red para aplicaciones de Kubernetes desplegadas en Oracle Cloud Native Environment que se ejecutan en hosts con hardware dedicado. MetalLB permite utilizar los servicios LoadBalancer de Kubernetes, que tradicionalmente utilizan un equilibrador de carga de red de proveedor en la nube, en un entorno con hardware dedicado.

Objetivos

En este documento se describe cómo configurar y utilizar el módulo MetalLB para aplicaciones de Kubernetes mediante MetalLB con Oracle Cloud Native Environment.

Requisitos

En esta sección, se muestran los sistemas host para realizar los pasos de este tutorial. Para que se realice correctamente, es necesario:

Configurar entorno de prácticas

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

Este laboratorio implica varios sistemas, cada uno de los cuales requiere que se realicen diferentes pasos. Se recomienda comenzar abriendo siete ventanas o separadores de terminal y conectándose a cada nodo. Esto evita tener que iniciar y cerrar sesión repetidamente. Los nodos son:

Importante: El entorno de prácticas gratuitas despliega una instancia de Oracle Cloud Native Environment totalmente instalada en los nodos proporcionados. Este despliegue tarda entre 25 y 30 minutos aproximadamente en terminar tras el lanzamiento. Por lo tanto, puede que desee salir mientras se ejecuta y, a continuación, volver para completar la práctica.

  1. Abra un terminal y conéctese mediante ssh a cada nodo.

    ssh oracle@<ip_address_of_ol_node>
    

Validación del entorno de Kubernetes

  1. (En el nodo de plano de control any) Verifique que kubectl funcione.

    kubectl get nodes
    

    Resultado de ejemplo:

    [oracle@ocne-control01 ~]$ kubectl get nodes
    NAME             STATUS   ROLES                  AGE   VERSION
    ocne-control01   Ready    control-plane,master   22m   v1.23.7+1.el8
    ocne-control02   Ready    control-plane,master   21m   v1.23.7+1.el8
    ocne-control03   Ready    control-plane,master   20m   v1.23.7+1.el8
    ocne-worker01    Ready    <none>                 20m   v1.23.7+1.el8
    ocne-worker02    Ready    <none>                 19m   v1.23.7+1.el8
    ocne-worker03    Ready    <none>                 19m   v1.23.7+1.el8
    [oracle@ocne-control01 ~]$
    

Configuración de los nodos de trabajador

(En todos los nodos de plano de control y de trabajador) Configure los puertos de red.

sudo firewall-cmd --zone=public --add-port=7946/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7946/udp --permanent
sudo firewall-cmd --reload

Instalación del módulo MetalLB

A continuación, instale y valide el módulo MetalLB.

En el nodo ocne-operator:

  1. Cree el archivo de configuración MetalLB.

    cat << 'EOF' | tee metallb-config.yaml
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 10.0.12.240-10.0.12.250
    EOF
    
  2. Visualice el contenido del archivo de configuración.

    cat ~/myenvironment.yaml
    
  3. Agregue un módulo Helm y MetalLB al archivo de configuración de Oracle Cloud Native Environment.

    cat << 'EOF' | tee -a ~/myenvironment.yaml
          - module: helm
            name: myhelm
            args:
              helm-kubernetes-module: mycluster
          - module: metallb
            name: mymetallb
            args: 
              metallb-helm-module: myhelm 
              helm-kubernetes-module: mycluster  
              metallb-config: /home/oracle/metallb-config.yaml             
    EOF
    
  4. Confirme que los módulos Helm y MetalLB se hayan agregado al archivo myenviroment.yaml.

    cat ~/myenvironment.yaml
    
  5. Cree los módulos.

    olcnectl module create --config-file myenvironment.yaml
    

    Resultado de ejemplo:

    [oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml
    Modules created successfully.
    Modules created successfully.
    Modules created successfully.
    [oracle@ocne-operator ~]$
    
  6. Valide los módulos.

    olcnectl module validate --config-file myenvironment.yaml
    

    Resultado de ejemplo:

    [oracle@ocne-operator ~]$ olcnectl module validate --config-file myenvironment.yaml
    Validation of module mycluster succeeded.
    Validation of module myhelm succeeded.
    Validation of module mymetallb succeeded.
    [oracle@ocne-operator ~]$
    
  7. Instale los módulos.

    olcnectl module install --config-file myenvironment.yaml
    

    Nota: Esta operación puede tardar unos minutos en realizarse.

    Resultado de ejemplo:

    [oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml
    Modules installed successfully.
    Modules installed successfully.
    Modules installed successfully.
    [oracle@ocne-operator ~]$
    
  8. Muestre los módulos instalados.

    olcnectl module instances --config-file myenvironment.yaml
    

    Resultado de ejemplo:

    [oracle@ocne-operator ~]$ olcnectl module instances --config-file myenvironment.yaml
    INSTANCE       	MODULE    	STATE    
    10.0.12.11:8090	node      	installed
    10.0.12.12:8090	node      	installed
    10.0.12.13:8090	node      	installed
    10.0.12.21:8090	node      	installed
    10.0.12.22:8090	node      	installed
    10.0.12.23:8090	node      	installed
    mycluster      	kubernetes	installed
    myhelm         	helm      	installed
    mymetallb      	metallb   	installed
    [oracle@ocne-operator ~]$
    

Creación de una aplicación de Kubernetes

En esta sección, creará una aplicación de Kubernetes que utilice un servicio LoadBalancer.

En cualquier nodo de plano de control:

  1. Cree una aplicación de Kubernetes.

    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
    spec:
      selector:
        app: echo1
      type: LoadBalancer
      ports:
      - name: http
        port: 80
        targetPort: 8080
    EOF
    
  2. Cree el servicio.

    kubectl create -f echo-oci-lb.yml
    

    Resultado de ejemplo:

    [oracle@ocne-control01 ~]$ kubectl create -f echo-oci-lb.yml
    deployment.apps/echo-deployment created
    service/echo-lb-service created
    [oracle@ocne-control01 ~]$ 
    
  3. Confirme que el despliegue de Kubernetes se está ejecutando.

    kubectl get deployments
    

    Resultado de ejemplo:

    [oracle@ocne-control01 ~]$ kubectl get deployment      
    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    echo-deployment   2/2     2            2           3m15s
    [oracle@ocne-control01~]$
    
  4. Muestre que el servicio Kubernetes se está ejecutando.

    kubectl get svc
    

    Resultado de ejemplo:

    [oracle@ocne-control01 ~]$ kubectl get svc
    NAME              TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    echo-lb-service   LoadBalancer   10.111.72.49   10.0.12.240   80:31727/TCP   4m47s
    kubernetes        ClusterIP      10.96.0.1      <none>        443/TCP        58m
    [oracle@ocne-control01 ~]$
    

    Observe que EXTERNAL-IP para echo-lb-service LoadBalancer tiene una dirección IP de 10.0.12.240. Esta dirección IP la proporciona MetalLB y es la dirección IP externa que puede utilizar para conectarse a la aplicación.

Prueba del despliegue

El siguiente paso es probar la aplicación recién desplegada. Como el valor EXTERNAL-IP se aprovisiona dinámicamente mediante MetalLB (en este escenario entre el rango 10.0.12.240-10.0.12.250), los dos primeros pasos almacenan este valor dinámico como variables del sistema operativo.

  1. (En cualquier nodo de plano de control) Capture la dirección EXTERNAL-IP asignada.

    LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service)
    
  2. Capture el número de puerto asignado.

    LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
    
  3. Confirme que están almacenadas como variables de entorno.

    echo $LB
    echo $LBPORT
    

    Resultado de ejemplo:

    [oracle@ocne-control01 ~]$ echo $LB
    10.0.12.240
    [oracle@ocne-control01 ~]$ echo $LBPORT
    80
    [oracle@ocne-control01 ~]$
    
  4. Utilice curl para conectarse a la aplicación desplegada.

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

    Resultado de ejemplo:

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

Prueba desde un host que no sea de Kubernetes

  1. (En ocne-operator). Esta última prueba confirma que MetalLB responde a solicitudes externas.

    curl -v http://10.0.12.240:80
    

    Resultado de ejemplo:

    [oracle@ocne-operator ~]$ curl -v http://10.0.12.240:80
    * Rebuilt URL to: http://10.0.12.240:80/
    *   Trying 10.0.12.240...
    * TCP_NODELAY set
    * Connected to 10.0.12.240 (10.0.12.240) port 80 (#0)
    > GET / HTTP/1.1
    > Host: 10.0.12.240
    > User-Agent: curl/7.61.1
    > Accept: */*
    > 
    < HTTP/1.1 200 OK
    < Server: nginx/1.10.0
    < Date: Wed, 10 Aug 2022 11:38:08 GMT
    < Content-Type: text/plain
    < Transfer-Encoding: chunked
    < Connection: keep-alive
    < 
    CLIENT VALUES:
    client_address=10.244.0.0
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://10.0.12.240:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=10.0.12.240
    user-agent=curl/7.61.1
    BODY:
    * Connection #0 to host 10.0.12.240 left intact
    [oracle@ocne-operator ~]$
    

Esto confirma que MetalLB se ha configurado correctamente, que se ha desplegado una aplicación y que acepta solicitudes correctamente.

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 para convertirse en un explorador de Oracle Learning.

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