【问题标题】:Kubernetes about secrets and how to consume them in podsKubernetes 关于秘密以及如何在 pod 中使用它们
【发布时间】:2016-11-21 04:22:49
【问题描述】:

我在我的项目中使用 GCP Container Engine,现在我遇到了一些我不知道是否可以通过秘密解决的问题。

我的一个部署是 node-js 应用服务器,我使用一些需要我的 GCP 服务帐户密钥(.json 文件)作为输入的 npm 模块。 输入是这个 json 文件所在的路径。目前,我设法通过将此文件作为我的 docker 映像的一部分提供它来使其工作,然后在代码中我放置了该文件的路径,它按预期工作。问题是我认为这不是一个好的解决方案,因为我想将我的 nodejs 映像与服务帐户密钥分离,因为服务帐户密钥可能会更改(例如 dev、test、prod)并且我将无法重用我现有的图像(除非我将构建并将其推送到不同的注册表) 所以我想知道是否可以将此服务帐户 json 文件作为机密上传,然后在我的 pod 中使用它。我看到可以从文件中创建秘密,但我不知道是否可以指定存储此 json 文件的位置的路径。如果无法使用机密(因为机密可能未保存在文件中......)那么如何(以及是否)可以做到?

提前致谢!

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubectl


    【解决方案1】:

    您可以将您的 json 文件设为机密并在您的 pod 中使用。请参阅以下链接了解秘密 (http://kubernetes.io/docs/user-guide/secrets/),但接下来我会总结一下:

    首先从您的 json 文件中创建一个秘密:

    kubectl create secret generic nodejs-key --from-file=./key.json 
    

    现在您已经创建了密钥,您可以在您的 pod 中使用(在本示例中作为卷):

    {
     "apiVersion": "v1",
     "kind": "Pod",
      "metadata": {
        "name": "nodejs"
      },
      "spec": {
        "containers": [{
          "name": "nodejs",
          "image": "node",
          "volumeMounts": [{
            "name": "foo",
            "mountPath": "/etc/foo",
            "readOnly": true
          }]
        }],
        "volumes": [{
          "name": "foo",
          "secret": {
            "secretName": "nodejs-key"
          }
        }]
      }
    }
    

    因此,当您的 pod 启动时,文件将被放入 /etc/foo/key.json 中的“文件系统”中

    【讨论】:

      【解决方案2】:

      我认为您在 GKE/GCE 上部署,您不需要密钥,它会正常工作。

      我只使用 Google Cloud Logging 进行了测试,但其他服务可能也一样。

      例如:在 gke/gce 上部署应用程序时,我只需要以下内容

      var loggingClient = logging({
          projectId: 'grape-spaceship-123'
      });
      

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 1970-01-01
        • 2019-12-26
        • 1970-01-01
        • 2018-08-13
        • 1970-01-01
        • 2020-01-02
        • 2019-05-10
        • 1970-01-01
        相关资源
        最近更新 更多