当用作辅助工具时,SQL Cloud Proxy会不断重新启动连接 我的部署我的部署YAML文件我在寻找什么?

问题描述

当我将sql Proxy用作Kubernetes集群上的部署的辅助工具时,我遇到了一个奇怪的问题。总之,它会继续为客户端关闭连接,然后立即打开一个新连接,而不会导致任何致命异常!

我的部署

我有一个具有2个映像的部署对象,(1) Spring Boot App 和(2) sql Cloud Proxy 。我使用sql代理从其他GCP项目访问数据库我有理由)。此部署对公开的服务的所有请求都可以正常工作,但是我在日志中不断收到错误消息,指出正在从sql Proxy关闭连接并重新建立连接!

enter image description here

我的部署YAML文件

apiVersion: apps/v1
kind: Deployment
Metadata:
  name: my-app
  namespace: my-namespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    Metadata:
      labels:
        app: my-app
        log_forwarding: "true"
    spec:
      imagePullSecrets:
        - name: artifactory-secret
      nodeselector:
        apps: run
      containers:
      - name: db-proxy
        image: my-artifactory/cloudsql-docker/gce-proxy:1.17
        command:
          - "/cloud_sql_proxy"
          - "-instances=project:europe-north1:slm-preview=tcp:5432"
          - "-credential_file=/secrets/service_account.json"
        securityContext:
          runAsNonRoot: true
        volumeMounts:
          - name: sql-proxy-sa-secret
            mountPath: /secrets/
            readOnly: true
        
      - image: my-artifactory/my-app/app:dev-c3235e9bf3473e61cb3c496e4fb2a69f4f54b07f
        imagePullPolicy: Always
        name: my-app
        securityContext:
          runAsNonRoot: true
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: gcp_dev
        - name: SPRING_CONfig_LOCATION
          value: file:/config-repo/application.yml,file:/config-repo/core-service.yml
        envFrom:
        - secretRef:
            name: db-sercret
        ports:
          - containerPort: 8001
            protocol: TCP
        resources:
          limits:
            ephemeral-storage: "1Gi"
            memory: 1Gi
          requests:
            ephemeral-storage: "1Gi"
            memory: 1Gi
        livenessProbe:
          failureThreshold: 20
          httpGet:
            path: /actuator/info
            port: 8001
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 60
          successthreshold: 1
          timeoutSeconds: 2
        
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /actuator/health
            port: 8001
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 60
          successthreshold: 1
          timeoutSeconds: 30
        # terminationMessagePath: /dev/termination-log
        # terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /config-repo
          name: config-repo-volume

      volumes:
      - name: sql-proxy-sa-secret
        secret:
          secretName: sa-sql-user
      - configMap:
          defaultMode: 420
          name: my-app-config
        name: config-repo-volume

我在寻找什么?

我正在尝试找到一种方法解决每天重新连接数千次的问题!我是否可以强制代理不重置连接并使它保持活动状态进行了一些研究,但是我什么也没发现!

感谢您的帮助!

解决方法

这些日志表明您的应用程序正在关闭/重新打开连接。代理似乎工作正常,因为它注意到旧的连接正在关闭(并打印有关它的日志),并注意到了新的连接(并显示有关它的日志)。

如果要避免这种情况发生,则必须在应用程序中或应用程序与代理之间使用连接池(例如,使用pgbouncer之类的连接池)。

看到类似的问题:https://github.com/GoogleCloudPlatform/cloudsql-proxy/issues/539

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...