在 Amazon ECS 上部署 jhipster 注册表



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

我在将注册表连接到 bitbucket 以下载 spring 云配置文件时遇到问题。使用 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 下载它?但这听起来有些不对劲。

我知道这有点晚了,但您可以添加用户环境变量。 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)(如果这是您的设置的一个选项)。

最新更新