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