我已经按照https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine上的步骤设置了MySQL用户帐户和服务帐户。我已经下载了包含我的凭据的JSON文件。
我的问题是在从网站复制的代码中:
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: ["/cloud_sql_proxy",
"-instances=<INSTANCE_CONNECTION_NAME>=tcp:3306",
"-credential_file=/secrets/cloudsql/credentials.json"]
securityContext:
runAsUser: 2 # non-root user
allowPrivilegeEscalation: false
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
指定了/secrets/cloudsql/credentials.json路径,我不知道它来自哪里。
我认为我应该通过
将凭据创建为秘密。 kubectl create secret generic cloudsql-instance-credentials --from-file=k8s\secrets\my-credentials.json
但是在那之后我不知道该怎么办。这个秘密如何变成路径/secrets/cloudsql/credentials.json
?
答案 0 :(得分:2)
实际上,我们可以将configmap或密钥作为文件挂载到pod的容器运行时中。然后在运行时,我们可以在任何需要的情况下使用它们。但是要做到这一点,我们需要正确设置它们。
.spec.volumes
中为秘密添加卷(如果您使用Deployment部署Pod,则在.spec.template.spec.volumes
中添加卷).spec.container[].volumemount
有一个供您使用的示例:
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: ["/cloud_sql_proxy",
"-instances=<INSTANCE_CONNECTION_NAME>=tcp:3306",
"-credential_file=/secrets/cloudsql/credentials.json"]
securityContext:
runAsUser: 2 # non-root user
allowPrivilegeEscalation: false
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
volumes:
- name: cloudsql-instance-credentials
secret:
defaultMode: 511
secretName: cloudsql-instance-credentials
答案 1 :(得分:1)
您必须在规范下添加一个卷条目,如下所示:
volumes:
- name: cloudsql-instance-credentials
secret:
defaultMode: 420
secretName: cloudsql-instance-credentials
注意:这属于部署规范,而不是容器规范。
答案 2 :(得分:0)
当前的答案很好,但是我想提供一个更完整的示例。这是两年前一些旧的google文档逐字记录的(不再存在)。用您自己的值替换@@ PROECT @@和@@ DBINST @@。
volumes
加载一个机密,然后volumeMounts
使它对postgres-proxy
处的/secrets/cloudsql
容器可见
spec:
volumes:
- name: cloudsql-oauth-credentials
secret:
secretName: cloudsql-oauth-credentials
- name: cloudsql
emptyDir:
containers:
- name: postgres-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.09
imagePullPolicy: Always
command: ["/cloud_sql_proxy",
"--dir=/cloudsql",
"-instances=@@PROJECT@@:us-central1:@@DBINST@@=tcp:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
volumeMounts:
- name: cloudsql-oauth-credentials
mountPath: /secrets/cloudsql
readOnly: true
- name: cloudsql
mountPath: /cloudsql