Nota:
- Este tutorial está disponible en un entorno de laboratorio gratuito proporcionado por Oracle.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
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:
-
7 sistemas Oracle Linux que se utilizarán como:
- Nodo de operador (ocne-operator)
- 3 nodos de plano de control de Kubernetes (ocne-control01, ocne-control02, ocne-control03)
- 3 nodos de trabajador de Kubernetes (ocne-worker01, ocne-worker02, ocne-worker03)
-
Dirección IP virtual para el nodo de plano de control principal. Esta dirección IP no debe estar en uso en ningún nodo y se asigna dinámicamente al nodo de plano de control asignado como controlador principal por el equilibrador de carga.
Exención de responsabilidad de Oracle Support: si está realizando un despliegue en Oracle Cloud Infrastructure, su arrendamiento requiere activar una nueva función introducida en OCI: redes de capa 2 para VLAN dentro de sus redes virtuales en la nube (VCN). La función de redes de capa 2 de OCI no suele estar disponible, aunque el arrendamiento para el entorno de prácticas gratuitas tiene esta función activada.
Si tiene un caso de uso, póngase en contacto con su equipo técnico para que su arrendamiento aparezca para utilizar esta función. -
Cada sistema debe tener instalado como mínimo lo siguiente:
- Oracle Linux 8 más reciente (x86_64) instalado y en ejecución de Unbreakable Enterprise Kernel versión 6 (UEK R6)
-
La configuración preconfigurada en estos sistemas es:
- Una cuenta de usuario
oracle
con privilegiossudo
- SSH sin contraseña entre cada nodo
- Oracle Cloud Native Environment instalado y configurado
- Una cuenta de usuario
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:
- ocne-control01 (Fin de creación)
- ocne-control02 (Fin de creación)
- ocne-control03 (Fin de creación)
- operador de ocné
- ocne-worker01 (Fin de creación)
- ocne-worker02 (Fin de creación)
- ocne-worker03 (Fin de creación)
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.
-
Abra un terminal y conéctese mediante ssh a cada nodo.
ssh oracle@<ip_address_of_ol_node>
Validación del entorno de Kubernetes
-
(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:
-
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
-
Visualice el contenido del archivo de configuración.
cat ~/myenvironment.yaml
-
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
-
Confirme que los módulos Helm y MetalLB se hayan agregado al archivo myenviroment.yaml.
cat ~/myenvironment.yaml
-
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 ~]$
-
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 ~]$
-
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 ~]$
-
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:
-
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
-
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 ~]$
-
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~]$
-
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
paraecho-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.
-
(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)
-
Capture el número de puerto asignado.
LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
-
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 ~]$
-
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
-
(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
- Documentación de Oracle Cloud Native Environment
- Formación de Oracle Cloud Native Environment
- Suscripción de aprendizaje de Oracle Linux
- Plan de estudios de Oracle Linux
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.
Use MetalLB with Oracle Cloud Native Environment
F61364-03
September 2022
Copyright © 2022, Oracle and/or its affiliates.