Remarque :

Utilisez MetalLB avec Oracle Cloud Native Environment

Introduction

Les équilibreurs de charge réseau fournissent une méthode d'exposition externe des applications Kubernetes. Un service Kubernetes LoadBalancer permet de créer un équilibreur de charge réseau qui fournit et expose une adresse IP externe pouvant être utilisée pour se connecter à une application en dehors du cluster.

MetalLB est un équilibreur de charge réseau pour les applications Kubernetes déployées sur Oracle Cloud Native Environment exécuté sur des hôtes Bare Metal. MetalLB vous permet d'utiliser les services Kubernetes LoadBalancer, qui utilisent traditionnellement un équilibreur de charge réseau de fournisseur cloud, dans un environnement Bare Metal.

Objectifs

Ce document explique comment configurer et utiliser le module MetalLB pour les applications Kubernetes à l'aide de MetalLB avec Oracle Cloud Native Environment.

Prérequis

Les systèmes hôtes pour effectuer les étapes de ce tutoriel sont répertoriés dans cette section. Pour réussir, vous devez :

Configurer l'environnement des exercices

Remarque : lorsque vous utilisez l'environnement d'atelier gratuit, reportez-vous à Notions de base des laboratoires Oracle Linux pour obtenir des informations sur la connexion et d'autres instructions d'utilisation.

Cet exercice implique plusieurs systèmes, chacun nécessitant des étapes différentes. Il est recommandé de commencer par ouvrir sept fenêtres ou onglets de terminal et de se connecter à chaque noeud. Cela vous évite d'avoir à vous connecter et à vous déconnecter à plusieurs reprises. Les noeuds sont les suivants :

Important : l'environnement d'atelier gratuit déploie un environnement Oracle Cloud Native Environment entièrement installé sur les noeuds fournis. Ce déploiement prend environ 25 à 30 minutes après son lancement. Par conséquent, il se peut que vous souhaitiez vous retirer pendant l'exécution, puis revenir à la fin de l'exercice.

  1. Ouvrez un terminal et connectez-vous via SSH à chaque noeud.

    ssh oracle@<ip_address_of_ol_node>
    

Valider l'environnement Kubernetes

  1. (Sur n'importe quel noeud de plan de contrôle) Vérifiez que kubectl fonctionne.

    kubectl get nodes
    

    Exemple de sortie :

    [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 ~]$
    

Configuration des noeuds de processus actif

(Sur tous les noeuds de plan de contrôle et de processus actif), configurez les ports réseau.

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

Installer le module MetalLB

Ensuite, installez et validez le module MetalLB.

Sur le noeud ocne-operator :

  1. Créez le fichier de configuration MetalLB.

    cat << 'EOF' | tee metallb-config.yaml
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 10.0.12.240-10.0.12.250
    EOF
    
  2. Affichez le contenu du fichier de configuration.

    cat ~/myenvironment.yaml
    
  3. Ajoutez un module Helm et MetalLB au fichier de configuration 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. Vérifiez que les modules Helm et MetalLB ont été ajoutés au fichier myenviroment.yaml.

    cat ~/myenvironment.yaml
    
  5. Créez les modules.

    olcnectl module create --config-file myenvironment.yaml
    

    Exemple de sortie :

    [oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml
    Modules created successfully.
    Modules created successfully.
    Modules created successfully.
    [oracle@ocne-operator ~]$
    
  6. Validez les modules.

    olcnectl module validate --config-file myenvironment.yaml
    

    Exemple de sortie :

    [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. Installez les modules.

    olcnectl module install --config-file myenvironment.yaml
    

    Remarque : cette opération peut prendre quelques minutes.

    Exemple de sortie :

    [oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml
    Modules installed successfully.
    Modules installed successfully.
    Modules installed successfully.
    [oracle@ocne-operator ~]$
    
  8. Affichez les modules installés.

    olcnectl module instances --config-file myenvironment.yaml
    

    Exemple de sortie :

    [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 ~]$
    

Création d'une application Kubernetes

Dans cette section, vous allez créer une application Kubernetes qui utilise un service LoadBalancer.

Sur n'importe quel noeud de plan de contrôle :

  1. Créez une application 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. Créez le service.

    kubectl create -f echo-oci-lb.yml
    

    Exemple de sortie :

    [oracle@ocne-control01 ~]$ kubectl create -f echo-oci-lb.yml
    deployment.apps/echo-deployment created
    service/echo-lb-service created
    [oracle@ocne-control01 ~]$ 
    
  3. Vérifiez que le déploiement Kubernetes est en cours d'exécution.

    kubectl get deployments
    

    Exemple de sortie :

    [oracle@ocne-control01 ~]$ kubectl get deployment      
    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    echo-deployment   2/2     2            2           3m15s
    [oracle@ocne-control01~]$
    
  4. Affichez le service Kubernetes en cours d'exécution.

    kubectl get svc
    

    Exemple de sortie :

    [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 ~]$
    

    L'adresse EXTERNAL-IP de echo-lb-service LoadBalancer est 10.0.12.240. Cette adresse IP est fournie par MetalLB et correspond à l'adresse IP externe que vous pouvez utiliser pour vous connecter à l'application.

Test du déploiement

L'étape suivante consiste à tester l'application nouvellement déployée. La valeur EXTERNAL-IP étant provisionnée dynamiquement par MetalLB (dans ce scénario entre la plage 10.0.12.240-10.0.12.250), les deux premières étapes stockent cette valeur dynamique en tant que variables de système d'exploitation.

  1. (Sur n'importe quel noeud de plan de contrôle) Capturez l'adresse EXTERNAL-IP affectée.

    LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service)
    
  2. Capturez le numéro de port assigné.

    LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
    
  3. Vérifiez qu'elles sont stockées en tant que variables d'environnement.

    echo $LB
    echo $LBPORT
    

    Exemple de sortie :

    [oracle@ocne-control01 ~]$ echo $LB
    10.0.12.240
    [oracle@ocne-control01 ~]$ echo $LBPORT
    80
    [oracle@ocne-control01 ~]$
    
  4. Utilisez curl pour vous connecter à l'application déployée.

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

    Exemple de sortie :

    [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 ~]$
    

Test à partir d'un hôte non Kubernetes

  1. (Sur ocne-operator) Ce dernier test confirme que MetalLB répond aux demandes externes.

    curl -v http://10.0.12.240:80
    

    Exemple de sortie :

    [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 ~]$
    

Cela confirme que MetalLB a été configuré correctement, qu'une application a été déployée et qu'elle accepte les demandes.

Pour plus d'informations

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuite sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation du produit, visitez le site Oracle Help Center.