0

我正在使用 jHipster 开发基于微服务的应用程序(但问题一般是针对 Spring Cloud 配置),出于开发目的,我使用的是 docker-compose,现在我正在 Amazon Elastic Container Service 上创建舞台环境。

我在将注册表连接到 bitbucket 以下载 Spring Cloud 配置文件时遇到问题。使用 docker-compose 我正在安装一个包含 ssh 密钥的卷,这是访问 BitBucket 所必需的:

services:
jhipster-registry:
    image: jhipster/jhipster-registry:v3.2.3
    volumes:
         - /home/ubuntu/bb-key:/root/.ssh

我不知道如何将此密钥传递给在 ECS 中运行的容器?

我不能将它直接放在 EC2 上 - 我不知道集群注册表中的哪个实例将启动。也许我必须把它放在 s3 上并更改注册表图像以从 s3 下载它?但这听起来有点不对劲。

4

1 回答 1

1

我知道这有点晚了,但是您可以添加用户环境变量。https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

就像 Linux 中的导出命令一样,您可以使用 ECS 将这些变量传递给 docker 实例,就像使用 -e switch 命令一样。这允许您传递秘密。可能有更好的方法,但由于您可以限制对这些变量的访问,这可能是一个不错的解决方法。您只需要使用 docker 映像中的任何脚本来使用这些环境变量,因为这些变量可能会随着时间而改变,但我通常让我的脚本接受/查找环境变量并记录它们的映像不会改变。

在您的情况下,您可以编写一个脚本来导出在 rsa 密钥文件中找到的 SSH 密钥,并导出字符串,因为它都是一行,并有一个脚本将该导出输出到 .ssh 目录中的文件中。

echo $SSH_KEY > ~/.ssh/some_key只需将这行代码放在 entry.sh 脚本或类似的东西中,就可以了。因此,当容器启动时,它会将密钥输出到 .ssh 文件中。

另一种方法,如您所描述的,使用 S3 存储桶并将键值对保留在其中,或者在本例中为 ssh 键,ECS 可以通过任务脚本或通过 docker 容器中的 AWS cli 命令加载它们。但是,最后一部分意味着您需要将 AWS CLI 添加到您的映像中,这可能不是一个选项,具体取决于您需要映像的用途,并且需要一个小脚本在启动时运行 IE 一个入口脚本。

如果这不能解决您的问题,请告诉我,我将修改此答案以更好地适应您遇到的问题。但从我读到的内容来看,这应该能让你了解你所需要的。

另一种方法是创建一个 API 密钥,允许您访问 bitbucket 存储库或其他存储库,具体取决于不断变化的需求,并以与您考虑使用 SSH 密钥相同的方式提供该密钥,并仅使用变量git 命令拉取图像并使用 http(s)(如果这是您的设置选项)。

于 2018-08-10T19:35:39.387 回答