1

我正在尝试在微服务前面添加 AWS 应用程序负载均衡器(在 VPC 和公共子网内的 EC2 节点上运行)。那些在 docker 容器内运行。我注意到,如果微服务直接在 EC2 实例上运行。它能够与 ALB 通信。在 docker 容器内启动微服务时。它不与 ALB 通信。

我可以用 curl 重现:

1) 直接在 EC2 实例上点击 curl - 工作

  $ curl  http://vpc-elb-url/alive

回复:

 ok

2) 从 docker 容器内点击 curl - 不工作

$ docker run --rm byrnedo/alpine-curl  http://vpc-elb-url/alive

回复:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1120  100  1120    0     0  65882      0 --:--:-- --:--:-- --:--:-- 65882
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Not Found</title>
        <style>
            html, body, pre {
                margin: 0;
                padding: 0;
                font-family: Monaco, 'Lucida Console', monospace;
                background: #ECECEC;
            }
            h1 {
                margin: 0;
                background: #AD632A;
                padding: 20px 45px;
                color: #fff;
                text-shadow: 1px 1px 1px rgba(0,0,0,.3);
                border-bottom: 1px solid #9F5805;
                font-size: 28px;
            }
            p#detail {
                margin: 0;
                padding: 15px 45px;
                background: #F6A960;
                border-top: 4px solid #D29052;
                color: #733512;
                text-shadow: 1px 1px 1px rgba(255,255,255,.3);
                font-size: 14px;
                border-bottom: 1px solid #BA7F5B;
            }
        </style>
    </head>
    <body>
        <h1>Not Found</h1>
        <p id="detail">
            For request 'GET /alive'
        </p>
    </body>
</html>

任何帮助,将不胜感激。谢谢。

4

2 回答 2

1

问题是容器没有与 EC2 实例共享相同的 AIM 角色

有一个名为 IAM-docker 的项目与容器共享主机 IAM 角色(您可以在 repo 中了解它的工作原理)

此外,它允许您管理哪些容器将获得哪些访问权限

https://github.com/swipely/iam-docker

于 2018-08-16T07:53:52.153 回答
0

我不认为这是一个有效的问题。我正在回答这个问题,也许它会帮助其他人。如果有人犯同样的错误:(

我们使用以下命令将所有流量从 80 路由到 9000:

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 9000

因为此 ALB 变得无法访问。我们只是使用以下命令删除了此规则

sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 9000

一切正常!

于 2018-08-17T05:15:51.867 回答