mysql - 如何使用 Google Container Engine 与 Google Cloud SQL 连接?

标签 mysql node.js kubernetes google-cloud-platform google-kubernetes-engine

我正在使用 Node JS 并使用 Kubernetes 部署它 Google Container Engine 。但我无法连接到 MySQL

这是我的node JS连接

var pool =  mysql.createPool({
 connectionLimit : 100, 
 user : process.env.DB_USER,
 password : process.env.DB_PASSWORD,
 database : process.env.DB_NAME,
 multipleStatements : true, 
 socketPath : '/cloudsql/' + process.env.INSTANCE_CONNECTION_NAME
})

我将其用于我的 Google App Engine 及其工作。现在我需要转移到 GKE,它发送了一条错误,指出 mySQL 未定义

这是我的app-frontend.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 name: app-frontend
labels:
 app: app
spec:
 replicas: 1
 template:
  metadata:
   labels:
    app: app
    tier: frontend
spec:
  containers:
  - name: app
    image: gcr.io/app-12345/app:1.0 
    env :
      - name : DB_HOST
        value : 127.0.0.1:3306
      - name : DB_USER 
        valueFrom:
            secretKeyRef:
              name: cloudsql-db-credentials
              key: username
      - name : DB_PASSWORD
        valueFrom:
            secretKeyRef:
              name: cloudsql-db-credentials
              key: password

    ports:
    - name: http-server
      containerPort: 8080
    imagePullPolicy: Always

  - image: gcr.io/cloudsql-docker/gce-proxy:1.09
    name: cloudsql-proxy
    imagePullPolicy: Always
    command: 
    - /cloud_sql_proxy 
    - --dir=/cloudsql 
    - --instances=mulung=tcp:3306
    - --credential_file=/secrets/cloudsql/credentials.json
    volumeMounts:
    - name: cloudsql-instance-credentials
      mountPath: /secrets/cloudsql
      readOnly: true
    - name: ssl-certs
      mountPath: /etc/ssl/certs
    - name: cloudsql
      mountPath: /cloudsql
      # [END proxy_container]
    ports:
    - name: portdb
      containerPort: 3306

    # [START volumes]
  volumes:
    - name: cloudsql-instance-credentials
      secret:
        secretName: cloudsql-instance-credentials
    - name: ssl-certs
      hostPath:
        path: /etc/ssl/certs
    - name: cloudsql
      emptyDir:

我应该做什么来修复它?谢谢你们。

最佳答案

你能检查一下命令部分吗

    command: ["/cloud_sql_proxy", "--dir=/cloudsql",
        "-instances=CLOUD_SQL_INSTANCE_NAME",
        "-credential_file=/secrets/cloudsql/credentials.json"]

这是我的后端应用程序之一的工作部署.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: <appname>
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: <appname>
    spec:
      containers:
      - image: gcr.io/<some_name>/cloudsql-docker/gce-proxy:1.05
        name: cloudsql-proxy
        command: ["/cloud_sql_proxy", "--dir=/cloudsql",
            "-instances=CLOUD_SQL_INSTANCE_NAME",
            "-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
      - name: <appname>
        image: IMAGE_NAME
        ports:
        - containerPort: 8888
        readinessProbe:
          httpGet:
            path: /<appname>/health
            port: 8888
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 30
          successThreshold: 1
          failureThreshold: 5
        env:
            - name: PROJECT_NAME
              value: <some_name>
            - name: PROJECT_ZONE
              value: <some_name>
            - name: INSTANCE_NAME
              value: <some_name>
            - name: INSTANCE_PORT
              value: <some_name>
            - name: CONTEXT_PATH
              value: <appname>
        volumeMounts:
          - name: application-config
            mountPath: /opt/config-mount
      volumes:
        - name: cloudsql-oauth-credentials
          secret:
            secretName: cloudsql-oauth-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir:
        - name: application-config
          secret:
            secretName: <appname>-ENV_NAME-config

关于mysql - 如何使用 Google Container Engine 与 Google Cloud SQL 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46359986/

相关文章:

Python从MySQL获取查询,去掉字符串格式

node.js - Feathersjs 与 Express JS

javascript - 这个回调函数示例如何工作?

node.js - Node 检测终止

kubernetes - GKE 使用 gcePersistentDisk

kubernetes - Kubernetes节点的时间同步问题

php - 显示嵌套查询的多个结果?

python - 截断不正确的日期值之谜

PHP搜索框问题

azure - Docker 镜像未在 Web 浏览器 Azure Kubernetes 中显示