日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

配置ECI連接RDS

如果您的容器應用需要連接數據庫(以RDS MySQL實例為例),您需要設置RDS白名單,并在創建ECI Pod時傳入數據庫連接信息。本文介紹在ACK Serverless集群中創建ECI Pod時,如何連接RDS。

背景信息

阿里云關系型數據庫RDS(Relational Database Service)是一種穩定可靠、可彈性伸縮的在線數據庫服務。基于阿里云分布式文件系統和SSD盤高性能存儲,RDS支持MySQL、SQL Server、PostgreSQL等多種數據庫引擎,本文使用RDS MySQL實例為例。您可以根據業務需求來選擇。更多信息,請參見數據庫引擎介紹

前提條件

  • 已創建RDS MySQL實例,并且在實例上配置數據庫用戶賬號。具體操作,請參見創建RDS MySQL實例創建數據庫和賬號

  • 已創建ACK Serverless集群。具體操作,請參見創建集群

    說明

    本文以ACK Serverless集群為例,如果您使用其他類型的Kubernetes集群,請確保集群中已部署虛擬節點來對接ECI。

  • 確保DS實例與Kubernetes集群的網絡互通。

    建議RDS實例與Kubernetes集群屬于同一VPC網絡下,可以直接使用內網進行通信;如果跨VPC創建RDS實例和Kubernetes集群,則需要配置公網。

設置RDS白名單并獲取數據庫訪問地址

通過內網訪問RDS

如果您的Kubernetes集群和RDS實例在同一VPC下,則集群中的應用可以通過內網訪問RDS,您需要設置RDS白名單并獲取數據庫內網訪問地址。

  1. 設置RDS白名單。

    內網訪問時,白名單可以設置IP地址或安全組:

    • IP地址

      在RDS白名單中添加IP地址網段(VPC或交換機網段),屬于該網段的ECI實例均可訪問該RDS實例。具體操作,請參見設置IP白名單

    • 安全組

      在RDS白名單中添加安全組后,該安全組中的ECI實例均可以訪問該RDS實例。具體操作,請參見設置安全組

  2. 在RDS實例的數據庫連接頁面,記錄數據庫內網訪問地址。

通過公網訪問RDS

如果您的Kubernetes集群和RDS實例在不同的VPC下,則集群中的應用需要通過公網訪問RDS。您需要設置RDS白名單并申請數據庫外網訪問地址。

重要
  • 外網地址會降低實例的安全性,請謹慎使用。

  • 為了獲得更快的傳輸速率和更高的安全性,建議您將應用遷移到與您的RDS實例在同一地域且網絡類型相同的ECI實例,然后使用內網地址。

  1. 設置RDS白名單。

    公網訪問時,需要設置IP白名單,具體操作,請參見設置IP白名單

    • 如果ECI實例使用NAT網關訪問公網,則IP白名單中需添加NAT網關綁定的EIP地址。

    • 如果ECI實例使用EIP訪問公網,則IP白名單中需添加該ECI實例綁定的EIP地址。

  2. 申請并記錄數據庫外網訪問地址。具體操作,請參見申請或釋放外網地址

配置應用連接RDS實例

ACK Serverless集群使用內網連接RDS實例為例,操作如下:

  1. 登錄容器服務管理控制臺

  2. 集群頁面,找到目標集群,單擊集群名稱,進入集群管理頁面。

  3. 創建ConfigMap,配置RDS連接信息。

    說明

    ConfigMap可以將您的環境配置信息和容器鏡像解耦,便于應用配置的修改。

    1. 在左側導航欄,選擇配置管理>配置項

    2. 單擊創建

    3. 填寫ConfigMap配置,然后單擊確定

      名稱為rds-config,要添加的配置如下:

      名稱

      示例值

      說明

      host

      rm-2zem97a62s9******.mysql.rds.aliyuncs.com

      數據庫連接地址,在RDS實例的數據庫連接頁面可以獲取。

      port

      3306

      數據庫連接端口,在RDS實例的數據庫連接頁面可以獲取。

      database

      test-db

      數據庫名稱,在RDS實例的數據庫管理頁面可以獲取。

  4. 創建Secret,添加數據庫用戶名和密碼。

    說明

    使用Secret可以將數據庫用戶名和密碼等機密信息安全地傳遞給應用。

    1. 在左側導航欄,選擇配置管理>保密字典

    2. 單擊創建

    3. 填寫Secret配置,然后單擊確定

      名稱為rds-secret,要添加的配置如下:

      名稱

      示例值

      說明

      username

      test

      數據庫用戶名稱。在RDS實例的賬號管理頁面可以獲取。

      password

      pwd******

      數據庫密碼。如果您忘記了密碼,在RDS實例的賬號管理頁面可以進行重置。

  5. 創建ECI Pod,測試能否連接RDS。

    1. 在左側導航欄,選擇工作負載>容器組

    2. 單擊使用YAML創建資源

    3. 填寫YAML,單擊創建

      由于RDS與原生的數據庫服務完全兼容,因此您可以使用任何通用的數據庫客戶端連接到RDS實例,且連接方法類似。配置示例如下:

      說明

      如果采用配置示例進行測試,請先在RDS實例中創建username表,表中增加一個user列。

      如下YAML示例通過環境變量傳入數據庫連接信息(包括數據庫連接地址、端口、名稱,以及用戶名和密碼),使用的鏡像包含了一個Python腳本,可以連接數據庫并插入數據。

      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  #一個Python Job用來連接云數據庫的鏡像
          imagePullPolicy: IfNotPresent
          command: ["/bin/bash","-c","python3 /testapp/mysqlclient.py"]
          env:
          - name: MYSQL_HOST 
            valueFrom:
              configMapKeyRef:
                name: rds-config  #ConfigMap的名稱
                key: host  #ConfigMap中的Key
          - name: MYSQL_PORT
            valueFrom:
              configMapKeyRef:
                name: rds-config #ConfigMap的名稱
                key: port #ConfigMap中的Key
          - name: MYSQL_DB
            valueFrom:
              configMapKeyRef:
                name: rds-config  #ConfigMap的名稱
                key: database #ConfigMap中的Key
          - name: MYSQL_USERNAME
            valueFrom:
              secretKeyRef:
                name: rds-secret #Secret的名稱
                key: username  #Secret中的Key
          - name: MYSQL_PWD
            valueFrom:
              secretKeyRef:
                name: rds-secret #Secret的名稱
                key: password #Secret中的Key
        restartPolicy: Never

      上述示例的鏡像包含的Python腳本(mysqlclient.py)可以在username表的user列中插入一條數據。腳本內容如下:

      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 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()
  6. 登錄數據庫,查看結果。

    1. 登錄云數據庫RDS控制臺

    2. 在左側導航欄選擇實例列表,在上方選擇地域,然后單擊目標實例ID。

    3. 在左側導航欄單擊數據庫管理

    4. 找到目標數據庫。單擊對應的SQL查詢

    5. 在彈出的對話框中,輸入數據庫用戶名和密碼,單擊登錄

    6. 輸入SQL命令查詢結果。

      執行SELECT * FROM `username` 命令,可以看到username表的user列已新增一條數據。

      對接RDS

常見問題

數據庫無法連接的常見場景包括:

  • 網絡類型不同

  • 專有網絡不同

  • 域名解析失敗或錯誤

  • 地域不同

  • IP白名單設置有誤

  • 只讀實例未設置白名單

  • 內外網地址使用錯誤

  • 連接數已滿

  • 用戶名或密碼錯誤

  • 無法解析地址

請根據當前環境的實際情況(內網或外網),選擇對應的排查方法。更多信息,請參見解決無法連接RDS實例問題