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 -ClusterMyCluster
-EnableTaskIAMRole </powershell>