Untuk menghubungkan aplikasi berbasis kontainer ke instance ApsaraDB RDS, Anda harus menambahkan titik akhir aplikasi tersebut ke daftar putih instance ApsaraDB RDS dan menentukan informasi koneksi database saat membuat pod berbasis Elastic Container Instance. Topik ini menjelaskan cara menghubungkan pod ke instance ApsaraDB RDS for MySQL dalam Cluster ACK Serverless dari Container Service for Kubernetes (ACK).
Informasi latar belakang
ApsaraDB RDS adalah layanan database online yang stabil, andal, dan skalabel. Layanan ini menggunakan Sistem File Terdistribusi Apsara dan SSD berperforma tinggi dari Alibaba Cloud untuk mendukung mesin database seperti MySQL, SQL Server, dan PostgreSQL. Dalam topik ini, digunakan instance ApsaraDB RDS for MySQL sebagai contoh untuk menjelaskan cara menghubungkan instance kontainer elastis ke instance ApsaraDB RDS. Anda dapat memilih mesin database sesuai dengan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat bagian "Mesin database" dari topik Memulai.
Prasyarat
Instance ApsaraDB RDS for MySQL telah dibuat, dan akun pengguna telah dikonfigurasi untuk instance tersebut. Untuk informasi lebih lanjut, lihat Buat instance ApsaraDB RDS for MySQL dan Buat database dan akun untuk instance ApsaraDB RDS for MySQL.
Sebuah Cluster ACK Serverless telah dibuat. Untuk informasi lebih lanjut, lihat Buat Cluster ACK Serverless.
CatatanDalam contoh ini, digunakan Cluster ACK Serverless. Jika Anda menggunakan kluster Kubernetes tipe lain, pastikan bahwa node virtual diterapkan dalam kluster untuk terhubung ke Elastic Container Instance.
Pastikan bahwa instance ApsaraDB RDS dan kluster Kubernetes dapat saling berkomunikasi.
Kami merekomendasikan agar Anda menerapkan instance ApsaraDB RDS dan kluster Kubernetes di VPC yang sama. Dengan cara ini, instance ApsaraDB RDS dan aplikasi dalam kluster akan saling terhubung melalui VPC. Jika Anda menerapkan instance dan kluster di VPC yang berbeda, Anda harus mengaktifkan konektivitas Internet antara instance dan aplikasi dalam kluster.
Konfigurasikan daftar putih untuk instance ApsaraDB RDS dan peroleh titik akhir database.
Akses instance ApsaraDB RDS melalui VPC
Jika instance ApsaraDB RDS dan kluster Kubernetes diterapkan di VPC yang sama, aplikasi dalam kluster dapat mengakses instance melalui VPC. Anda harus mengonfigurasi daftar putih untuk instance ApsaraDB RDS dan memperoleh titik akhir internal database.
Konfigurasikan daftar putih untuk instance ApsaraDB RDS.
Saat aplikasi dalam kluster Kubernetes mengakses instance ApsaraDB RDS melalui jaringan internal, Anda dapat menambahkan alamat IP atau grup keamanan ke daftar putih:
Alamat IP
Tambahkan blok CIDR dari VPC atau vSwitch ke daftar putih. Instance kontainer elastis yang termasuk dalam blok CIDR tersebut dapat mengakses instance ApsaraDB RDS. Untuk informasi lebih lanjut, lihat Konfigurasikan daftar putih alamat IP untuk instance ApsaraDB RDS for MySQL.
Grup keamanan
Setelah Anda menambahkan grup keamanan ke daftar putih instance ApsaraDB RDS, semua instance kontainer elastis yang termasuk dalam grup keamanan tersebut dapat mengakses instance ApsaraDB RDS. Untuk informasi lebih lanjut, lihat Konfigurasikan grup keamanan untuk instance ApsaraDB RDS for MySQL.
Peroleh titik akhir internal database dari halaman Database Connection instance ApsaraDB RDS.
Akses instance ApsaraDB RDS melalui Internet
Jika instance ApsaraDB RDS dan cluster ACK Serverless diterapkan di VPC yang berbeda, aplikasi dalam kluster harus menggunakan Internet untuk mengakses instance. Anda harus mengonfigurasi daftar putih untuk instance ApsaraDB RDS dan memperoleh titik akhir publik database. Prosedur:
Jika Anda menggunakan titik akhir publik untuk mengakses instance ApsaraDB RDS, keamanan instance tersebut terganggu. Lanjutkan dengan hati-hati.
Untuk mempercepat dan mengamankan transmisi data, kami merekomendasikan agar Anda memigrasikan aplikasi Anda dari cluster ACK Serverless ke instance kontainer elastis yang diterapkan di wilayah yang sama dan memiliki jenis jaringan yang sama dengan instance ApsaraDB RDS. Dengan cara ini, aplikasi dapat mengakses instance ApsaraDB RDS melalui titik akhir internal.
Konfigurasikan daftar putih untuk instance ApsaraDB RDS.
Jika aplikasi mengakses instance melalui Internet, Anda harus mengonfigurasi daftar putih alamat IP untuk instance tersebut. Untuk informasi lebih lanjut, lihat Konfigurasikan daftar putih alamat IP untuk instance ApsaraDB RDS for MySQL.
Jika instance kontainer elastis menggunakan gateway NAT untuk mengakses Internet, Anda harus menambahkan alamat EIP yang terkait dengan gateway NAT ke daftar putih alamat IP.
Jika instance kontainer elastis menggunakan EIP untuk mengakses Internet, Anda harus menambahkan alamat EIP yang terkait dengan instance kontainer elastis ke daftar putih alamat IP.
Ajukan permohonan dan catat titik akhir publik database. Untuk informasi lebih lanjut, lihat Ajukan permohonan atau lepaskan titik akhir publik untuk instance ApsaraDB RDS for MySQL.
Konfigurasikan aplikasi untuk menghubungkan ke instance ApsaraDB RDS
Dalam topik ini, VPC digunakan untuk menghubungkan aplikasi dalam Cluster ACK Serverless ke instance ApsaraDB RDS. Prosedur:
Masuk ke Konsol ACK.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik nama kluster. Halaman manajemen kluster akan muncul.
Buat ConfigMap untuk mengonfigurasi koneksi ke instance ApsaraDB RDS.
CatatanConfigMap dapat memisahkan konfigurasi lingkungan dari gambar kontainer. Ini memudahkan modifikasi konfigurasi aplikasi.
Di panel navigasi di sebelah kiri, pilih Configurations > ConfigMaps.
Klik Create di pojok kanan atas halaman.
Konfigurasikan ConfigMap dan klik OK.
Di panel yang muncul, tentukan nama untuk ConfigMap. Contoh: rds-config. Kemudian, konfigurasikan parameter yang dijelaskan dalam tabel berikut.
Parameter
Contoh
Deskripsi
host
rm-2zem97a62s9******.mysql.rds.aliyuncs.com
Titik akhir database. Anda dapat memperoleh titik akhir di halaman Database Connection instance ApsaraDB RDS.
port
3306
Nomor port database. Anda dapat memperoleh nomor port di halaman Database Connection instance ApsaraDB RDS.
database
test-db
Nama database. Anda dapat memperoleh nama database di halaman Databases instance ApsaraDB RDS.
Buat secret untuk menambahkan nama pengguna dan kata sandi database.
CatatanSecret memastikan bahwa informasi rahasia seperti nama pengguna dan kata sandi database dapat secara aman diteruskan ke aplikasi.
Di panel navigasi di sebelah kiri, pilih Configurations > Secrets.
Klik Create.
Konfigurasikan secret dan klik OK.
Di panel yang muncul, tentukan nama untuk secret. Contoh: rds-secret. Kemudian, konfigurasikan parameter yang dijelaskan dalam tabel berikut.
Parameter
Contoh
Deskripsi
username
test
Nama pengguna yang digunakan untuk mengakses database. Anda dapat memperoleh nama pengguna di halaman Accounts instance ApsaraDB RDS.
password
pwd******
Kata sandi yang digunakan untuk mengakses database. Jika Anda lupa kata sandi Anda, Anda dapat menyetel ulang kata sandi di halaman Accounts.
Buat pod berbasis Elastic Container Instance dan uji apakah pod dapat terhubung ke instance ApsaraDB RDS.
Di panel navigasi di sebelah kiri, pilih Workloads > Pods.
Klik Create from YAML.
Masukkan isi file YAML dan klik Create.
ApsaraDB RDS for MySQL sepenuhnya kompatibel dengan MySQL open source. Anda dapat menghubungkan ke instance ApsaraDB RDS dari klien database dengan cara yang sama seperti Anda menghubungkan ke database MySQL open source. Kode berikut memberikan contoh konfigurasi.
CatatanJika Anda menggunakan konfigurasi sampel yang disediakan dalam topik ini untuk menguji koneksi database, buat tabel bernama username di instance ApsaraDB RDS dan tambahkan kolom bernama user ke tabel tersebut.
Kode YAML berikut menggunakan variabel lingkungan untuk memasukkan informasi koneksi database, termasuk titik akhir, nomor port, nama, nama pengguna, dan kata sandi database. Gambar tersebut berisi skrip Python yang dapat digunakan untuk menghubungkan database ke kluster dan menyisipkan data.
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 # Gambar yang berisi pekerjaan Python yang digunakan untuk menghubungkan instance ApsaraDB RDS ke kluster. imagePullPolicy: IfNotPresent command: ["/bin/bash","-c","python3 /testapp/mysqlclient.py"] env: - name: MYSQL_HOST valueFrom: configMapKeyRef: name: rds-config # Nama ConfigMap. key: host # Kunci dalam ConfigMap. - name: MYSQL_PORT valueFrom: configMapKeyRef: name: rds-config # Nama ConfigMap. key: port # Kunci dalam ConfigMap. - name: MYSQL_DB valueFrom: configMapKeyRef: name: rds-config # Nama ConfigMap. key: database # Kunci dalam ConfigMap. - name: MYSQL_USERNAME valueFrom: secretKeyRef: name: rds-secret # Nama secret. key: username # Kunci dalam secret. - name: MYSQL_PWD valueFrom: secretKeyRef: name: rds-secret # Nama secret. key: password # Kunci dalam secret. restartPolicy: NeverGambar sebelumnya berisi skrip Python (mysqlclient.py) yang dapat digunakan untuk menyisipkan data ke kolom user tabel username. Isi skrip:
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("menghubungkan 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()
Masuk ke database ApsaraDB RDS dan lihat hasil koneksi.
Masuk ke Konsol ApsaraDB RDS.
Di panel navigasi di sebelah kiri, klik Instances. Di bilah navigasi atas, pilih wilayah tempat instance ApsaraDB RDS diterapkan. Kemudian, temukan instance dan klik ID instance.
Di panel navigasi di sebelah kiri, klik Databases.
Temukan database ApsaraDB RDS yang ingin Anda lihat. Klik SQL Query.
Di kotak dialog yang muncul, masukkan nama pengguna dan kata sandi database ApsaraDB RDS dan klik Log In.
Masukkan perintah SQL untuk menanyakan hasil.
Jalankan perintah
SELECT * FROM 'username'. Anda dapat melihat bahwa entri data ditambahkan ke kolom user tabel username.
FAQ
Bagian berikut menjelaskan alasan umum mengapa database ApsaraDB RDS Anda gagal terhubung ke Elastic Container Instance:
Jenis jaringan berbeda
VPC berbeda
Kegagalan atau kesalahan resolusi nama domain
Wilayah berbeda
Pengaturan daftar putih alamat IP tidak benar
Tidak ada daftar putih alamat IP yang dikonfigurasi untuk instance baca-saja
Titik akhir internal atau publik tidak valid
Kuota koneksi habis
Nama pengguna atau kata sandi tidak valid
Alamat host tidak valid
Pilih solusi berdasarkan jenis jaringan yang Anda gunakan untuk menghubungkan ke instance ApsaraDB RDS. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika saya gagal menghubungkan instance ApsaraDB for RDS?