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

7
我已经按照 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


1
如果您发布完整的deployment.yml文件,我可以为您提供完整的解决方案。 - gries
3个回答

4

1
谢谢,那个有效。更多阅读:https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/#create-a-pod-that-has-access-to-the-secret-data-through-a-volume - shalvah

4
实际上,我们可以将configmaps或secrets挂载为pod容器运行时的文件。然后在运行时,我们可以根据需要使用它们。但是要做到这一点,我们需要正确地设置它们。
- 创建secret/configmap - 在pod中的.spec.volumes中添加一个用于secret的卷(如果您使用deployment部署pod,则在.spec.template.spec.volumes中添加卷) - 在.spec.container[].volumemount中挂载创建的卷
参考:Kubernetes官方文档 以下是适用于您情况的示例:
  - 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

3
目前的答案不错,但我想提供一个更完整的例子。这是两年前一些旧的谷歌文档中原封不动地呈现出来的(现在已经不存在了)。请将@@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接