2016-12-15 73 views
4

我想將我的Kubernetes羣集連接到Google Cloud SQL。通過代理連接到Google Cloud SQL的多個K8S容器

我有至少10個不同的部署莢,目前使用JDBC url +用戶名/密碼連接到MySQL [部署到k8s的docker映像]。

它可以使用Google Cloud SQL Proxy的單個實例並通過此代理將所有Pod連接到Cloud SQL數據庫?理想情況下,我想用代理替換容器中運行的mysql。

我寧願不必在每個部署中運行代理。我發現的唯一示例似乎表明代理需要在每個部署中聲明。

回答

9

我找到了解決方案。

使用下面的yml部署代理,並將部署作爲服務公開。最重要的是,使代理監聽0.0.0.0,而不是默認的127.0.0.1。所有的祕密,按照谷歌的Cloud SQL的文檔

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: mysql 
spec: 
    replicas: 1 
    template: 
    metadata: 
     name: mysql 
     labels: 
     name: mysql 
    spec: 
     containers: 
     - image: b.gcr.io/cloudsql-docker/gce-proxy:1.05 
      name: cloudsql-proxy 
      command: ["/cloud_sql_proxy", "--dir=/cloudsql", 
        "-instances=MYSQL:ZONE:DATABASE_INSTANCE=tcp:0.0.0.0:3306", 
        "-credential_file=/secrets/cloudsql/credentials.json"] 
      volumeMounts: 
      - name: cloudsql-oauth-credentials 
       mountPath: /secrets/cloudsql 
       readOnly: true 
      - name: ssl-certs 
       mountPath: /etc/ssl/certs 
      ports: 
      - containerPort: 3306 
       name: mysql 
     volumes: 
     - name: cloudsql-oauth-credentials 
      secret: 
      secretName: cloudsql-oauth-credentials 
     - name: ssl-certs 
      hostPath: 
      path: /etc/ssl/certs 

的解決方案比具有相同部署客戶端軟件的代理稍貴,因爲有一個額外的TCP連接。

但是有很多好處:

  • 更簡單,不需要修改現有的K8S部署文件
  • 允許切換執行到MySQL泊塢容器或使用谷歌雲SQL代理無需做任何修改到客戶端配置。
+0

我很好奇@Hylton Peimer - 我面臨同樣的問題:我需要將SQL代理託管在一個單獨的窗格中,但是如何讓您的兩個窗格彼此進行通信?我要麼拒絕連接,要麼找不到主機名 –

+0

公開部署的Kubernetes服務。然後使用服務的名稱。例如上面的「kubectl公開部署mysql」,然後讓客戶端使用「mysql」,就像您使用主機名一樣。 –

+0

雖然我與您分享同樣的問題,但在同一個窗格中將代理作爲邊櫃運行有一些很好的理由: - 通過將代理公開給集羣,您將失去對哪些服務有權訪問的控制權,除非您以其他方式保護它 - 不使用標籤和選擇器,您不能確定每個節點上運行的代理程序包都需要它,這可能會影響性能,具體取決於客戶端需要與服務器交談以及如果該客戶端恰好與代理位於同一節點上。 – Khash

相關問題