Rob*_*rcd 12 networking amazon-ec2 amazon-web-services amazon-ecs docker
我想在 EC2 实例上运行的容器内使用 IMDSv2。
我想使用令牌,因为我的元数据选项需要它们:
metadata_options {
http_tokens = "required"
http_endpoint = "enabled"
}
Run Code Online (Sandbox Code Playgroud)
从 EC2 实例调用 API 按预期返回我的令牌。
curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
但是,如果我尝试从 docker 容器调用它:
docker run -it curlimages/curl sh
/ $ curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
curl: (56) Recv failure: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)
我只是有一个超时时间。
根据这个答案,它应该可以开箱即用,但事实并非如此。如果我添加一个--network=host标志,它会起作用,但这对我来说不是解决方案。
谢谢
jor*_*anm 30
我为了从 Docker 容器访问 IMDSv2 元数据,您必须在实例元数据配置中增加 IMDSv2 的跃点限制。来自AWS文档:
在容器环境中,如果跃点限制为 1,则 IMDSv2 响应不会返回,因为前往容器被视为额外的网络跃点。为了避免回退到 IMDSv1 的过程以及由此产生的延迟,在容器环境中,我们建议您将跃点限制设置为 2
要更改跃点限制,您可以modify-instance-metadata-options在 awscli 中使用:
aws ec2 modify-instance-metadata-options \
--instance-id <instance_id> \
--http-put-response-hop-limit 2 \
--http-endpoint enabled
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7109 次 |
| 最近记录: |