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

4

3 回答 3

4

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

  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-that-has-access-to-the-通过卷的秘密数据感谢 shalvah 指出这一点。

于 2018-11-23T14:30:37.937 回答
3

实际上,我们可以将 configmaps 或 secrets 作为文件挂载到 pod 的容器运行时中。然后在运行时,我们可以在需要的任何情况下使用它们。但要做到这一点,我们需要正确设置它们。

  • 创建秘密/configmap
  • 在 pod中为 secret 添加一个卷.spec.volumes(如果您使用部署部署 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
于 2018-11-23T15:30:00.850 回答
2

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

volumes加载一个秘密,然后使其volumeMountspostgres-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
于 2019-05-14T05:30:57.110 回答