GKE의 Go 앱에서 Cloud Sql Proxy를 통해 CloudSQL 2세대에 연결
개요
GKE Docker의 Go 앱에서 Cloud Sql Proxy를 통해 CloudSQL 2 세대에 연결해 보았으므로 비망록으로 남겨 둡니다.
 절차
 DB 생성
google cloud console에서 cloudSQL db 만들기
 
第2世代 선택하기
DB명은 db-dev 로 한다
フェールオーバレプリカの作成 에 체크하고 작성하기
 
인스턴스가 생성되었는지 확인
 
사용자의 비밀번호 설정
 
 GKE에서 DB 연결 확인 및 사용자 권한 생성
연결 확인, 사용자 권한 생성을 위한 인스턴스 생성
gcloud compute instances create sql-client --scopes=sql-admin --machine-type=f1-micro \
--network=lovelytokyo --subnet=lovelytokyo \
--zone=asia-northeast1-b  
연결하다
gcloud compute ssh debian@sql-client
cloud_sql_proxy 설치
curl https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -o cloud_sql_proxy
chmod +x cloud_sql_proxy
sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
mysql client 설치
sudo apt-get install mysql-client
cloud_sql_proxy 시작
sudo ./cloud_sql_proxy -dir=/cloudsql -instances='lovelytokyo:asia-northeast1:db-dev=tcp:3306'
연결하다
mysql --user root --host localhost --protocol TCP --password
db 만들기
CREATE DATABASE hawai DEFAULT CHARACTER SET utf8;
DB hawai에 사용자 cloudmaster가 프록시를 통해 액세스 할 때 권한 설정
GRANT SELECT,INSERT,UPDATE,DELETE ON hawai.* TO 'cloudmaster'@'cloudsqlproxy~%';
FLUSH PRIVILEGES;
 GKE Docker의 GO 앱에서 연결
 1. 서비스 계정 키 만들기
google cloud console에서 서비스 계정 키 만들기
 
 
 
만든 Cloud SQL Service account json 파일을 다운로드하여 저장
/path/to/secrets/cloudsql/lovelytokyo-xxxx-xxx.json
 2. 인스턴스에서 CloudSQL에 액세스하기 위한 보안 생성
이때 json 파일의 경로는 1.로 저장한 경로로 한다.
kubectl create secret generic cloudsql-oauth-credentials --from-file=credentials.json=/path/to/secrets/cloudsql/lovelytokyo-xxxx-xxx.json
 3. 데이터베이스에 액세스 할 때 사용하는 사용자 및 암호 작성
go 앱에서 사용
kubectl create secret generic cloudsql-master-user --from-literal=username=cloudmaster
kubectl create secret generic cloudsql-master-password --from-literal=password=masterpasswd
 GO 앱의 deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name:app-sample
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        application: app-sample
        tier: app
    spec:
      imagePullSecrets:
      - name : gcp-registry-key
      containers:
      - image: gcr.io/lovelytokyo/app-sample
        name: app-sample
        ports:
        - containerPort: 8080
          protocol: TCP
        imagePullPolicy: Always
        env:
          - name: MASTER_USER
            valueFrom:
              secretKeyRef:
                name: cloudsql-master-user (3.で作成したものを参照する)
                key: username
          - name: MASTER_PASSWORD
            valueFrom:
              secretKeyRef:
                name: cloudsql-master-password  (3.で作成したものを参照する)
                key: password
      - image: b.gcr.io/cloudsql-docker/gce-proxy:1.05
        name: cloudsql-proxy
        command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                  "-instances=lovelytokyo:asia-northeast1:db-dev=tcp:3306",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-oauth-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
          - name: ssl-certs
            mountPath: /etc/ssl/certs
          - name: cloudsql
            mountPath: /cloudsql
      volumes:
        - name: cloudsql-oauth-credentials
          secret:
            secretName: cloudsql-oauth-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir:
 앱의 연결 샘플
환경 변수로 설정한 사용자 이름과 암호를 사용하여 연결
user := os.Getenv("MASTER_USER")
  passwd := os.Getenv("MASTER_PASSWORD")
  db := "hawai"
  connStr := fmt.Sprintf("%s:%s@tcp(localhost:3306)/%s%s", user, passwd, db, option)
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(GKE의 Go 앱에서 Cloud Sql Proxy를 통해 CloudSQL 2세대에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/kkam0907/items/bd1071352057e2166543
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
DB 생성
google cloud console에서 cloudSQL db 만들기

第2世代 선택하기DB명은
db-dev 로 한다フェールオーバレプリカの作成 에 체크하고 작성하기
인스턴스가 생성되었는지 확인

사용자의 비밀번호 설정

GKE에서 DB 연결 확인 및 사용자 권한 생성
연결 확인, 사용자 권한 생성을 위한 인스턴스 생성
gcloud compute instances create sql-client --scopes=sql-admin --machine-type=f1-micro \
--network=lovelytokyo --subnet=lovelytokyo \
--zone=asia-northeast1-b  
연결하다
gcloud compute ssh debian@sql-client
cloud_sql_proxy 설치
curl https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -o cloud_sql_proxy
chmod +x cloud_sql_proxy
sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
mysql client 설치
sudo apt-get install mysql-client
cloud_sql_proxy 시작
sudo ./cloud_sql_proxy -dir=/cloudsql -instances='lovelytokyo:asia-northeast1:db-dev=tcp:3306'
연결하다
mysql --user root --host localhost --protocol TCP --password
db 만들기
CREATE DATABASE hawai DEFAULT CHARACTER SET utf8;
DB
hawai에 사용자 cloudmaster가 프록시를 통해 액세스 할 때 권한 설정GRANT SELECT,INSERT,UPDATE,DELETE ON hawai.* TO 'cloudmaster'@'cloudsqlproxy~%';
FLUSH PRIVILEGES;
GKE Docker의 GO 앱에서 연결
1. 서비스 계정 키 만들기
google cloud console에서 서비스 계정 키 만들기



만든
Cloud SQL Service account json 파일을 다운로드하여 저장/path/to/secrets/cloudsql/lovelytokyo-xxxx-xxx.json
2. 인스턴스에서 CloudSQL에 액세스하기 위한 보안 생성
이때 json 파일의 경로는 1.로 저장한 경로로 한다.
kubectl create secret generic cloudsql-oauth-credentials --from-file=credentials.json=/path/to/secrets/cloudsql/lovelytokyo-xxxx-xxx.json
3. 데이터베이스에 액세스 할 때 사용하는 사용자 및 암호 작성
go 앱에서 사용
kubectl create secret generic cloudsql-master-user --from-literal=username=cloudmaster
kubectl create secret generic cloudsql-master-password --from-literal=password=masterpasswd
GO 앱의 deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name:app-sample
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        application: app-sample
        tier: app
    spec:
      imagePullSecrets:
      - name : gcp-registry-key
      containers:
      - image: gcr.io/lovelytokyo/app-sample
        name: app-sample
        ports:
        - containerPort: 8080
          protocol: TCP
        imagePullPolicy: Always
        env:
          - name: MASTER_USER
            valueFrom:
              secretKeyRef:
                name: cloudsql-master-user (3.で作成したものを参照する)
                key: username
          - name: MASTER_PASSWORD
            valueFrom:
              secretKeyRef:
                name: cloudsql-master-password  (3.で作成したものを参照する)
                key: password
      - image: b.gcr.io/cloudsql-docker/gce-proxy:1.05
        name: cloudsql-proxy
        command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                  "-instances=lovelytokyo:asia-northeast1:db-dev=tcp:3306",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-oauth-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
          - name: ssl-certs
            mountPath: /etc/ssl/certs
          - name: cloudsql
            mountPath: /cloudsql
      volumes:
        - name: cloudsql-oauth-credentials
          secret:
            secretName: cloudsql-oauth-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir:
앱의 연결 샘플
환경 변수로 설정한 사용자 이름과 암호를 사용하여 연결
user := os.Getenv("MASTER_USER")
  passwd := os.Getenv("MASTER_PASSWORD")
  db := "hawai"
  connStr := fmt.Sprintf("%s:%s@tcp(localhost:3306)/%s%s", user, passwd, db, option)
                Reference
이 문제에 관하여(GKE의 Go 앱에서 Cloud Sql Proxy를 통해 CloudSQL 2세대에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kkam0907/items/bd1071352057e2166543텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)