Pour connecter votre application conteneurisée à une base de données, telle qu'une instance ApsaraDB RDS for MySQL, configurez la liste d'autorisation de l'instance ApsaraDB RDS et fournissez les informations de connexion lors de la création d'un pod ECI. Cette rubrique explique comment se connecter à ApsaraDB RDS lors de la création d'un pod ECI dans un cluster ACK Serverless.
Contexte
ApsaraDB RDS est un service de base de données en ligne stable, fiable et évolutif proposé par Alibaba Cloud. S'appuyant sur le système de fichiers distribué d'Alibaba Cloud et des disques SSD haute performance, ApsaraDB RDS prend en charge plusieurs moteurs de base de données, tels que MySQL, SQL Server et PostgreSQL. Cette rubrique utilise une instance ApsaraDB RDS for MySQL à titre d'exemple. Sélectionnez un moteur de base de données en fonction de vos besoins métier. Pour plus d'informations, consultez la section Moteurs de base de données.
Prérequis
Une instance ApsaraDB RDS for MySQL est créée et un compte de base de données est configuré pour cette instance. Pour plus d'informations, consultez les sections Créer une instance ApsaraDB RDS for MySQL et Créer une base de données et un compte.
-
Un cluster ACK Serverless est créé. Pour plus d'informations, consultez la section Créer un cluster ACK Serverless.
RemarqueCette rubrique utilise un cluster ACK Serverless à titre d'exemple. Si vous utilisez un autre type de cluster Kubernetes, assurez-vous qu'un nœud virtuel est déployé dans le cluster pour se connecter à ECI.
-
L'instance ApsaraDB RDS et le cluster Kubernetes peuvent communiquer entre eux.
Pour des performances et une sécurité optimales, déployez l'instance ApsaraDB RDS et le cluster Kubernetes dans le même Virtual Private Cloud (VPC). Cela permet une communication via le réseau interne. S'ils se trouvent dans des VPC différents, configurez l'accès via le réseau public.
Configurer la liste d'autorisation RDS et obtenir l'endpoint
Accéder à RDS via le réseau interne
Si votre cluster Kubernetes et votre instance ApsaraDB RDS se trouvent dans le même VPC, votre application peut accéder à l'instance via le réseau interne. Configurez la liste d'autorisation ApsaraDB RDS et obtenez l'endpoint interne.
-
Configurez la liste d'autorisation ApsaraDB RDS.
Lors d'une connexion via le réseau interne, ajoutez une adresse IP ou un groupe de sécurité à la liste d'autorisation :
-
Adresse IP
Ajoutez le bloc CIDR du VPC ou du vSwitch à la liste d'autorisation ApsaraDB RDS. Cela permet à toutes les instances ECI situées dans le bloc CIDR d'accéder à l'instance ApsaraDB RDS. Pour plus d'informations, consultez la section Configurer une liste d'autorisation d'adresses IP.
-
Groupe de sécurité
Ajoutez le groupe de sécurité de vos instances ECI à la liste d'autorisation ApsaraDB RDS. Cela permet à toutes les instances ECI appartenant au groupe de sécurité d'accéder à l'instance ApsaraDB RDS. Pour plus d'informations, consultez la section Configurer un groupe de sécurité.
-
Sur la page Database Connection de l'instance ApsaraDB RDS, recherchez et notez l'endpoint interne.
Accéder à RDS via le réseau public
Si votre cluster Kubernetes et votre instance ApsaraDB RDS se trouvent dans des VPC différents, votre application doit se connecter via le réseau public. Configurez la liste d'autorisation ApsaraDB RDS et demandez un endpoint public.
L'utilisation d'un endpoint public peut exposer votre instance à des risques de sécurité. Utilisez cette option avec prudence.
Pour un transfert de données plus rapide et une sécurité accrue, nous vous recommandons de migrer votre application vers une instance ECI située dans la même région et le même réseau que votre instance ApsaraDB RDS, puis d'utiliser l'endpoint interne.
-
Configurez la liste d'autorisation ApsaraDB RDS.
Lors d'une connexion via le réseau public, configurez une liste d'autorisation d'adresses IP. Pour plus d'informations, consultez la section Configurer une liste d'autorisation d'adresses IP.
Si votre instance ECI utilise une passerelle NAT pour accéder au réseau public, ajoutez l'adresse IP élastique (EIP) de la passerelle NAT à la liste d'autorisation d'adresses IP.
Si votre instance ECI utilise une EIP pour accéder au réseau public, ajoutez l'EIP de l'instance ECI à la liste d'autorisation d'adresses IP.
Demandez et notez l'endpoint public de la base de données. Pour plus d'informations, consultez la section Demander ou libérer un endpoint public.
Configurer une application pour se connecter à RDS
Cette procédure montre comment connecter un cluster ACK Serverless à une instance ApsaraDB RDS via un réseau interne.
Connectez-vous à la console ACK.
Sur la page Cluster, recherchez votre cluster cible et cliquez sur son nom pour ouvrir la page des détails du cluster.
-
Créez un ConfigMap pour stocker les informations de connexion ApsaraDB RDS.
RemarqueUn ConfigMap découple la configuration de l'environnement de l'image du conteneur. Cela simplifie les mises à jour de la configuration de l'application.
Dans le volet de navigation de gauche, choisissez Configuration > ConfigMaps.
Cliquez sur Create.
-
Saisissez les détails du ConfigMap et cliquez sur OK.
Définissez le nom sur
rds-configet ajoutez les paires clé-valeur suivantes :Paramètre
Exemple
Description
host
rm-2zem97a62s9.mysql.rds.aliyuncs.com
L'endpoint de la base de données. Disponible sur la page Database Connection de votre instance ApsaraDB RDS.
port
3306
Le port de la base de données. Disponible sur la page Database Connection de votre instance ApsaraDB RDS.
database
test-db
Le nom de la base de données. Disponible sur la page Databases de votre instance ApsaraDB RDS.
-
Créez un Secret pour stocker le nom d'utilisateur et le mot de passe de la base de données.
RemarqueL'utilisation d'un Secret constitue une bonne pratique pour gérer en toute sécurité les informations sensibles, telles que les identifiants de base de données, pour votre application.
Dans le volet de navigation de gauche, choisissez Configuration > Secrets.
Cliquez sur Create.
-
Saisissez les détails du Secret et cliquez sur OK.
Définissez le nom sur
rds-secretet ajoutez les paires clé-valeur suivantes :Paramètre
Exemple
Description
username
test
Le nom d'utilisateur de la base de données. Disponible sur la page Accounts de votre instance ApsaraDB RDS.
password
pwd
Le mot de passe de la base de données. Si vous avez oublié le mot de passe, réinitialisez-le sur la page Accounts de votre instance ApsaraDB RDS.
-
Créez un pod ECI pour tester la connexion.
Dans le volet de navigation de gauche, choisissez Workloads > Pods.
Cliquez sur Create from YAML.
-
Saisissez la configuration YAML et cliquez sur Create.
ApsaraDB RDS est entièrement compatible avec les services de base de données natifs. Vous pouvez utiliser n'importe quel client de base de données standard pour vous connecter à votre instance ApsaraDB RDS. Le fichier YAML suivant sert d'exemple :
RemarquePour utiliser cet exemple, vous devez d'abord créer une table nommée
usernameavec une colonne nomméeuserdans votre instance ApsaraDB RDS.La configuration YAML suivante utilise des variables d'environnement pour fournir les détails de connexion à la base de données : endpoint, port, nom, nom d'utilisateur et mot de passe. L'image du conteneur inclut un script Python qui se connecte à la base de données et insère des données.
apiVersion: v1 kind: Pod metadata: labels: name: rds-test name: rds-test spec: containers: - name: test-rds image: registry.cn-hangzhou.aliyuncs.com/eci_open/sqlclient:1.0.1 # A container image that contains a Python script to connect to the database. imagePullPolicy: IfNotPresent command: ["/bin/bash","-c","python3 /testapp/mysqlclient.py"] env: - name: MYSQL_HOST valueFrom: configMapKeyRef: name: rds-config # The name of the ConfigMap. key: host # The key in the ConfigMap. - name: MYSQL_PORT valueFrom: configMapKeyRef: name: rds-config # The name of the ConfigMap. key: port # The key in the ConfigMap. - name: MYSQL_DB valueFrom: configMapKeyRef: name: rds-config # The name of the ConfigMap. key: database # The key in the ConfigMap. - name: MYSQL_USERNAME valueFrom: secretKeyRef: name: rds-secret # The name of the Secret. key: username # The key in the Secret. - name: MYSQL_PWD valueFrom: secretKeyRef: name: rds-secret # The name of the Secret. key: password # The key in the Secret. restartPolicy: NeverL'image de l'exemple précédent contient un script Python (
mysqlclient.py) qui insère une ligne dans la colonneuserde la tableusername. Le script est le suivant :import pymysql import os import time config = { 'host': str(os.getenv('MYSQL_HOST')), 'port': int(os.getenv('MYSQL_PORT')), 'user': str(os.getenv('MYSQL_USERNAME')), 'password': str(os.getenv('MYSQL_PWD')), 'database': str(os.getenv('MYSQL_DB')), } def mysqlClient(): print("Connecting to the database...") db = pymysql.connect(**config) try: cursor = db.cursor() cursor.execute("INSERT INTO username(user) VALUES('Mrs')") cursor.close() db.commit() cursor = db.cursor() cursor.execute("SELECT user FROM username") result = cursor.fetchall() cursor.close() if result != None: print(result) time.sleep(99999) except Exception as e: print('System Error: ', e) finally: db.close() if __name__ == '__main__': mysqlClient()
-
Connectez-vous à la base de données et vérifiez le résultat.
Connectez-vous à la console ApsaraDB RDS.
Dans le volet de navigation de gauche, cliquez sur Instances. Dans la barre de navigation supérieure, sélectionnez la région où se trouve votre instance, puis cliquez sur l'ID de l'instance.
Dans le volet de navigation de gauche, cliquez sur Databases.
Recherchez la base de données cible et cliquez sur SQL Query dans la colonne Actions.
Dans la boîte de dialogue qui s'affiche, saisissez le nom d'utilisateur et le mot de passe de la base de données, puis cliquez sur Log In.
-
Exécutez une commande SQL pour vérifier le résultat.
Exécutez la commande
SELECT * FROM. La sortie affiche une nouvelle ligne dans la colonne user de la table username.
FAQ
Les raisons courantes d'échec de connexion à la base de données incluent :
Types de réseau différents
VPC différents
Échec ou erreur de résolution de nom de domaine
Régions différentes
Configuration incorrecte de la liste d'autorisation d'adresses IP
Liste d'autorisation non configurée pour une instance en lecture seule
Utilisation incorrecte des endpoints internes ou publics
Limite de connexions atteinte
Nom d'utilisateur ou mot de passe incorrect
Impossible de résoudre l'endpoint
Résolvez le problème en fonction de votre environnement réseau (réseau interne ou réseau public). Pour plus d'informations, consultez la section Résoudre les échecs de connexion ApsaraDB RDS.