Kubernetes关于秘密以及如何在豆荚中消费它们

时间:2016-11-21 04:22:50

标签: kubernetes google-kubernetes-engine kubectl

我在我的项目中使用GCP容器引擎,现在我面临一些问题,我不知道它是否可以通过秘密来解决。

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

先谢谢!

2 个答案:

答案 0 :(得分: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中的“文件系统”中

答案 1 :(得分:0)

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

我仅使用Google Cloud Logging测试过,但其他服务也可能相同。

例如:在gke / gce上部署app时我只需要以下内容

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