介紹如何透過 GCP 的 Kubernetes 與 Cloud SQL 服務建立連線,本篇以 MySQL 為例。
新增 Cloud SQL 服務實例
在 GCP 新增 Cloud SQL 實體步驟如下:
基本上建立 Cloud SQL 服務就是按下一步而已。
區域建議選擇跟 Kubernetes 群集相同,流量計費會比較便宜。
預設的機器類型為「db-n1-standard-1」,如果要更高階或低階的版本,可在選擇區域的下方,點選
顯示設定選項
變更配置。
建立完成後,點選建立完成的執行個體,查看執行個體連線名稱,如下圖:
之後步驟會用到執行個體連線名稱,可以先記下來。
透過 Cloud SDK 登入
請先安裝 Cloud SDK,且進行授權驗證後,便可透過 Cloud SDK 登入 Cloud SQL。
授權驗證可參考GCP 教學 - Kubernetes 佈署 Docker Image的前置準備。
登入 Cloud SQL 指令:
1 | gcloud sql connect cloudsql-mysql --user=root |
沒裝 mysql client 會出錯以下錯誤:
1 | Whitelisting your IP for incoming connection for 5 minutes...done. |
登入成功後,就可以使用 MySQL Client CLI,可以執行 MySQL 指令。
試著輸入 status
,會顯示 MySQL 的資訊如下:
要修改密碼或允許 root 連入來源,可透過 Cloud SDK 執行以下指令:
1 | gcloud sql users set-password root --host=% --instance cloudsql-mysql --password=<密碼> |
啟用 API
必須要啟用 Cloud SQL Admin API,步驟如下:
建立連線密鑰
到 GCP 建立連線密鑰,並下載到本機再匯入至 Kubernetes,讓 Kubernetes 可以透過密鑰連入 Cloud SQL,密鑰建立步驟如下:
把下載的金鑰檔案匯入至 Kubernetes:
1 | # kubectl create secret generic cloudsql-instance-credentials --from-file=credentials.json="<金鑰 *.json 檔案路徑>" |
Create proxy service
建立 Cloud SQL 的佈署檔,內容如下:
1 | # C:\k8s_sql_sample\mysql_deployment.yml |
透過 cloudsql-proxy 建立一個空殼容器轉發至實際的 Cloud SQL。
建立 Cloud SQL 的服務設定檔,內容如下:
1 | # C:\k8s_sql_sample\mysql_service.yml |
套用上述設定:
1 | kubectl apply -f C:\k8s_sql_sample\ |
完成套用後,就可以在 Kubernetes 的群集內,透過 URL cloudsql-proxy-service
連到 Cloud SQL 的服務。
如果有自己的 toolbox 也可以試著用 MySQL CLI 連看看,如下圖:
1 | mysql -u root -p[PASSWORD] -h cloudsql-proxy-service |
自製 toolbox 可參考GCP 教學 - Kubernetes 佈署 Docker Image。