我可以在Kubernetes中将cloudql-proxy作为守护进程运行吗?

时间:2017-04-11 07:59:54

标签: google-cloud-sql google-kubernetes-engine

我有一个类似于github issue的问题。

但是,我可以使用守护进程而不是服务来代替使用服务吗?我们的想法是与同一节点上的所有pod共享同一个套接字。它是否会遇到与同一问题的答案中提到的相同的安全问题。我问,因为边车容器的方法阻止我产生更多的豆荚。实际上,我有不同类型的服务在Cloud SQL上使用相同的数据库。每个pod都必须为代理保留一些CPU和内存,这对我来说听起来是多余的。

3 个答案:

答案 0 :(得分:3)

是的,你可以这样做。但是,守护进程的pod将不再侦听localhost。因此,您必须配置cloud_sql_proxy和数据库连接以使用Node的hostIP。

您必须将cloud_sql_proxy设置为侦听0.0.0.0

  - command:
    - /cloud_sql_proxy
    - -instances=project:region:db=tcp:0.0.0.0:5432
    - -credential_file=/secrets/cloudsql/credentials.json

您还必须更改数据库连接以使用hostIP

    env:
    - name: DB_HOST
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: status.hostIP

答案 1 :(得分:0)

我在same repo中问了同样的问题。团队的答案是积极的。您可以使用守护程序集方法。但是,我没有关于守护进程集方法的任何实践经验。所以要谨慎使用它。

答案 2 :(得分:0)

使用@Doug的答案,我成功地从作为边车运行cloud sql代理过渡到了守护程序集。我的守护程序定义如下。我为在其上具有某些Pod的节点添加了相似性,因为我只需要可用于核心应用程序的代理,而不需要可用于redis之类的外围系统的代理。

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: cloudsql-proxy
  labels:
    app: cloudsql-proxy
spec:
  template:
    metadata:
      labels:
        app: cloudsql-proxy
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - sentry-web-internal
                - sentry-web-external
                - sentry-worker
                - sentry-base
                - sentry-cron
                - data-scrubber
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: cloudsql-proxy
        image: 'gcr.io/cloudsql-docker/gce-proxy:1.13'
        command:
        - /cloud_sql_proxy
        args:
        - --dir=/cloudsql
        - -instances=project:region:db=tcp:0.0.0.0:5432
        - -credential_file=/secrets/cloudsql/credentials.json
        ports:
        - name: cloudsql-port
          containerPort: 5432
          hostPort: 5432
        livenessProbe:
          tcpSocket:
            port: cloudsql-port
          initialDelaySeconds: 30
          timeoutSeconds: 5
        readinessProbe:
          tcpSocket:
            port: cloudsql-port
          initialDelaySeconds: 5
          timeoutSeconds: 1
        resources:
          limits:
            cpu: 150m
            memory: 150Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - name: cloudsql-instance-credentials
          mountPath: /secrets/cloudsql
          readOnly: true
      volumes:
      - name: cloudsql-instance-credentials
        secret:
          secretName: cloudsql-instance-credentials