HTTP 代理配置 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

HTTP 代理配置

您可以将 Amazon ECS 容器实例配置为对 Amazon ECS 容器代理和 Docker 守护程序使用 HTTP 代理。如果您的容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络,则这非常有用。用于 Linux 和 Windows 实例的过程有所不同,因此请务必阅读下面适用于您的应用程序的部分。

Amazon Linux 容器实例配置

要将 Amazon ECS Linux 容器实例配置为使用 HTTP 代理,请在启动时在相关文件中设置以下变量(利用 Amazon EC2 用户数据)。您也可以手动编辑配置文件并重新启动代理。

/etc/ecs/ecs.config(Amazon Linux 2 和 Amazon Linux AMI)
HTTP_PROXY=10.0.0.131:3128

将此值设置为某个 HTTP 代理的主机名(或 IP 地址)和端口号,供 Amazon ECS 代理用来连接到互联网。例如,在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。

NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

将此值设置为 169.254.169.254,169.254.170.2,/var/run/docker.sock 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 守护程序流量。

/etc/systemd/system/ecs.service.d/http-proxy.conf(仅 Amazon Linux 2)
Environment="HTTP_PROXY=10.0.0.131:3128/"

将此值设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 ecs-init 代理用来连接到互联网。例如,在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。

Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock"

将此值设置为 169.254.169.254,169.254.170.2,/var/run/docker.sock 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 守护程序流量。

/etc/init/ecs.override (仅限 Amazon Linux AMI)
env HTTP_PROXY=10.0.0.131:3128

将此值设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 ecs-init 代理用来连接到互联网。例如,在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。

env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

将此值设置为 169.254.169.254,169.254.170.2,/var/run/docker.sock 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 守护程序流量。

/etc/systemd/system/docker.service.d/http-proxy.conf(仅 Amazon Linux 2)
Environment="HTTP_PROXY=http://10.0.0.131:3128"

将此值设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 Docker 守护程序用来连接到互联网。例如,在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。

Environment="NO_PROXY=169.254.169.254"

将此值设置为 169.254.169.254 可筛选来自代理的 EC2 实例元数据。

/etc/sysconfig/docker(仅限 Amazon Linux AMI 和 Amazon Linux 2)
export HTTP_PROXY=http://10.0.0.131:3128

将此值设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 Docker 守护程序用来连接到互联网。例如,在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。

export NO_PROXY=169.254.169.254,169.254.170.2

将此值设置为 169.254.169.254 可筛选来自代理的 EC2 实例元数据。

在以上文件中设置这些环境变量仅影响 Amazon ECS 容器代理、ecs-init 和 Docker 守护程序。它们不配置任何其他服务(如 yum)使用代理。

例 Amazon LinuxHTTP 代理用户数据脚本

下面的示例用户数据 cloud-boothook 脚本将 Amazon ECS 容器代理、ecs-init、Docker 守护程序和 yum为使用您指定的 HTTP 代理。您还可以指定容器实例在其中自行进行注册的集群。

要在启动容器实例时使用此脚本,请执行启动 Amazon ECS Linux 容器实例步骤 7中的步骤。然后,将下面的 cloud-boothook 脚本复制并粘贴到 User data 字段中 (请务必将红色示例值替换为您自己的代理和集群信息)。

注意

以下用户数据脚本仅支持经 Amazon ECS 优化的 AMI 的 Amazon Linux 2 和 Amazon Linux AMI 变体。

#cloud-boothook # Configure Yum, the Docker daemon, and the ECS agent to use an HTTP proxy # Specify proxy host, port number, and ECS cluster name to use PROXY_HOST=10.0.0.131 PROXY_PORT=3128 CLUSTER_NAME=proxy-test if grep -q 'Amazon Linux release 2' /etc/system-release ; then OS=AL2 echo "Setting OS to Amazon Linux 2" elif grep -q 'Amazon Linux AMI' /etc/system-release ; then OS=ALAMI echo "Setting OS to Amazon Linux AMI" else echo "This user data script only supports Amazon Linux 2 and Amazon Linux AMI." fi # Set Yum HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_yum_http_proxy ]; then echo "proxy=http://$PROXY_HOST:$PROXY_PORT" >> /etc/yum.conf echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_yum_http_proxy fi # Set Docker HTTP proxy (different methods for Amazon Linux 2 and Amazon Linux AMI) # Amazon Linux 2 if [ $OS == "AL2" ] && [ ! -f /var/lib/cloud/instance/sem/config_docker_http_proxy ]; then mkdir /etc/systemd/system/docker.service.d cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=http://$PROXY_HOST:$PROXY_PORT/" Environment="HTTPS_PROXY=https://$PROXY_HOST:$PROXY_PORT/" Environment="NO_PROXY=169.254.169.254,169.254.170.2" EOF systemctl daemon-reload if [ "$(systemctl is-active docker)" == "active" ] then systemctl restart docker fi echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_docker_http_proxy fi # Amazon Linux AMI if [ $OS == "ALAMI" ] && [ ! -f /var/lib/cloud/instance/sem/config_docker_http_proxy ]; then echo "export HTTP_PROXY=http://$PROXY_HOST:$PROXY_PORT/" >> /etc/sysconfig/docker echo "export HTTPS_PROXY=https://$PROXY_HOST:$PROXY_PORT/" >> /etc/sysconfig/docker echo "export NO_PROXY=169.254.169.254,169.254.170.2" >> /etc/sysconfig/docker echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_docker_http_proxy fi # Set ECS agent HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_ecs-agent_http_proxy ]; then cat <<EOF > /etc/ecs/ecs.config ECS_CLUSTER=$CLUSTER_NAME HTTP_PROXY=$PROXY_HOST:$PROXY_PORT NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock EOF echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-agent_http_proxy fi # Set ecs-init HTTP proxy (different methods for Amazon Linux 2 and Amazon Linux AMI) # Amazon Linux 2 if [ $OS == "AL2" ] && [ ! -f /var/lib/cloud/instance/sem/config_ecs-init_http_proxy ]; then mkdir /etc/systemd/system/ecs.service.d cat <<EOF > /etc/systemd/system/ecs.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=$PROXY_HOST:$PROXY_PORT/" Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock" EOF systemctl daemon-reload if [ "$(systemctl is-active ecs)" == "active" ]; then systemctl restart ecs fi echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-init_http_proxy fi # Amazon Linux AMI if [ $OS == "ALAMI" ] && [ ! -f /var/lib/cloud/instance/sem/config_ecs-init_http_proxy ]; then cat <<EOF > /etc/init/ecs.override env HTTP_PROXY=$PROXY_HOST:$PROXY_PORT env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock EOF echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-init_http_proxy fi

Windows 容器实例配置

要将 Amazon ECS Windows 容器实例配置为使用 HTTP 代理,请在启动时设置以下变量(利用 Amazon EC2 用户数据)来达到此目的。

[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.mydomain:port", "Machine")

HTTP_PROXY 设置为某个 HTTP 代理的主机名(或 IP 地址)和端口号,供 Amazon ECS 代理用来连接到互联网。例如,在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。

[Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")

NO_PROXY 设置为 169.254.169.254,169.254.170.2,\\.\pipe\docker_engine 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 守护程序流量。

例 Windows HTTP 代理用户数据脚本

下面的示例用户数据 PowerShell 脚本会将 Amazon ECS 容器代理和 Docker 守护程序配置为使用您指定的 HTTP 代理。您还可以指定容器实例在其中自行进行注册的集群。

要在启动容器实例时使用此脚本,请执行启动 Amazon ECS Windows 容器实例中的步骤。只需将下面的 PowerShell 脚本复制并粘贴到 User data (用户数据) 字段中(请务必将红色示例值替换为您自己的代理和集群信息)。

注意

启用任务的 IAM 角色需要使用 -EnableTaskIAMRole 选项。有关更多信息,请参阅任务的 Windows IAM 角色的其他配置

<powershell> Import-Module ECSTools $proxy = "http://proxy.mydomain:port" [Environment]::SetEnvironmentVariable("HTTP_PROXY", $proxy, "Machine") [Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine") Restart-Service Docker Initialize-ECSAgent -Cluster MyCluster -EnableTaskIAMRole </powershell>