如何在GKE上创建CloudSQL代理凭据作为机密



我已经按照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=k8ssecretsmy-credentials.json

但在那之后,我不知道该怎么办。这个秘密是如何变成路径/secrets/cloudsql/credentials.json的?

您必须在规范下添加一个卷条目,如下所示:

volumes:
- name: cloudsql-instance-credentials
secret:
defaultMode: 420
secretName: cloudsql-instance-credentials

注意:这属于部署规范,而不是容器规范。

编辑:更多信息可在此处找到:https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/#create-a-pod-has-access-to-thesecret-data-through a volume感谢shalvah指出这一点。

实际上,我们可以将configmap或secret作为文件安装在pod的容器运行时中。然后在运行时,我们可以在任何需要的情况下使用它们。但要做到这一点,我们需要适当地设置它们。

  • 创建机密/configmap
  • 在pod的.spec.volumes中为secret添加一个卷(如果使用deployment部署pod,则在.spec.template.spec.volumes中添加卷(
  • .spec.container[].volumemount中装载创建的卷

参考:官方kubernetes doc

您的用例有一个示例:

- 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

目前的答案很好,但我想提供一个更完整的例子。这是从两年前的一些旧谷歌文档中逐字逐句而来的(这些文档已不复存在(。用您自己的值替换@@PROECT@@和@@DBINST@@。

volumes加载一个秘密,然后volumeMounts使其在/secrets/cloudsql上对postgres-proxy容器可见

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

相关内容

  • 没有找到相关文章

最新更新