Remarque :
- Ce tutoriel est disponible dans un environnement d'atelier gratuit fourni par Oracle.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
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 :
-
7 systèmes Oracle Linux à utiliser en tant que :
- Noeud d'opérateur (ocne-operator)
- 3 noeuds de plan de contrôle Kubernetes (ocne-control01, ocne-control02, ocne-control03)
- 3 noeuds de processus actif Kubernetes (ocne-worker01, ocne-worker02, ocne-worker03)
-
Adresse IP virtuelle du noeud principal du plan de contrôle. Cette adresse IP ne doit être utilisée sur aucun noeud et est affectée dynamiquement au noeud de plan de contrôle affecté en tant que contrôleur principal par l'équilibreur de charge.
Avis de non-responsabilité du support technique Oracle : si vous effectuez un déploiement vers Oracle Cloud Infrastructure, votre location doit activer une nouvelle fonctionnalité introduite dans OCI : mise en réseau de couche 2 pour les VLAN au sein des réseaux cloud virtuels. La fonctionnalité de mise en réseau de couche 2 OCI n'est généralement pas disponible, bien que cette fonctionnalité soit activée pour la location de l'environnement d'atelier gratuit.
Si vous avez un cas d'emploi, contactez votre équipe technique pour obtenir la liste de votre location afin d'utiliser cette fonctionnalité. -
Un minimum des éléments suivants doit être installé sur chaque système :
- La dernière version d'Oracle Linux 8 (x86_64) installée et exécutant Unbreakable Enterprise Kernel Release 6 (UEK R6)
-
La configuration préconfigurée sur ces systèmes est la suivante :
- Un compte utilisateur
oracle
disposant de privilègessudo
- SSH sans mot de passe entre chaque noeud
- Oracle Cloud Native Environment installé et configuré
- Un compte utilisateur
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 :
- ocne-control01
- ocne-control02
- ocne-control03
- opérateur ocne
- ocne-worker01
- ocne-worker02
- ocne-worker03
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.
-
Ouvrez un terminal et connectez-vous via SSH à chaque noeud.
ssh oracle@<ip_address_of_ol_node>
Valider l'environnement Kubernetes
-
(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 :
-
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
-
Affichez le contenu du fichier de configuration.
cat ~/myenvironment.yaml
-
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
-
Vérifiez que les modules Helm et MetalLB ont été ajoutés au fichier myenviroment.yaml.
cat ~/myenvironment.yaml
-
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 ~]$
-
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 ~]$
-
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 ~]$
-
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 :
-
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
-
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 ~]$
-
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~]$
-
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
deecho-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.
-
(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)
-
Capturez le numéro de port assigné.
LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
-
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 ~]$
-
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
-
(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
- Documentation relative à Oracle Cloud Native Environment
- Cours sur Oracle Cloud Native Environment
- Abonnement de formation Oracle Linux
- Cursus Oracle Linux
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.
Use MetalLB with Oracle Cloud Native Environment
F61364-03
September 2022
Copyright © 2022, Oracle and/or its affiliates.