HTTP-Proxykonfiguration
Sie können Ihre Amazon ECS-Container-Instances für die Verwendung eines HTTP-Proxys sowohl für den Amazon ECS-Container-Agenten als auch für den Docker-Daemon konfigurieren. Das ist praktisch, wenn Ihre Container-Instances keinen externen Netzwerkzugriff über ein Amazon VPC-Internet-Gateway, NAT-Gateway oder eine Instance haben. Der Prozess unterscheidet sich für Linux- und Windows-Instances. Stellen Sie daher sicher, dass Sie nachfolgend den entsprechenden Abschnitt für Ihre Anwendung lesen.
Themen
Konfiguration von Amazon Linux Container-Instances
Um Ihre Amazon ECS-Linux-Container-Instance für die Verwendung eines HTTP-Proxys zu konfigurieren, bestimmen Sie beim Starten die folgenden Variablen in den relevanten Dateien (mit Amazon EC2-Benutzerdaten). Sie können die Konfigurationsdatei auch manuell bearbeiten und die Agenten anschließend neu starten.
/etc/ecs/ecs.config
(Amazon Linux 2 und Amazon Linux AMI)-
HTTP_PROXY=
10.0.0.131
:3128
-
Setzen Sie diesen Wert auf den Hostname (oder die IP-Adresse) und die Portnummer eines HTTP-Proxys, sodass der ECS-Agent damit eine Internetverbindung aufbauen kann. Beispielsweise haben Ihre Container-Instances vielleicht keinen externen Netzwerkzugriff über ein Amazon VPC-Internet-Gateway, NAT-Gateway oder eine Instance.
NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock
-
Setzen Sie diesen Wert auf
169.254.169.254,169.254.170.2,/var/run/docker.sock
, um die Amazon-EC2-Instance-Metadaten, IAM-Rollen für Aufgaben und Docker-Deamon-Datenverkehr aus dem Proxy zu filtern.
/etc/systemd/system/ecs.service.d/http-proxy.conf
(nur Amazon Linux 2)-
Environment="HTTP_PROXY=
10.0.0.131
:3128
/"-
Setzen Sie diesen Wert auf den Hostname (oder die IP-Adresse) und die Portnummer eines HTTP-Proxys, sodass mit
ecs-init
eine Internetverbindung aufgebaut werden kann. Beispielsweise haben Ihre Container-Instances vielleicht keinen externen Netzwerkzugriff über ein Amazon VPC-Internet-Gateway, NAT-Gateway oder eine Instance. Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock"
-
Setzen Sie diesen Wert auf
169.254.169.254,169.254.170.2,/var/run/docker.sock
, um die Amazon-EC2-Instance-Metadaten, IAM-Rollen für Aufgaben und Docker-Deamon-Datenverkehr aus dem Proxy zu filtern.
/etc/init/ecs.override
(nur Amazon-Linux-AMI)-
env HTTP_PROXY=
10.0.0.131
:3128
-
Setzen Sie diesen Wert auf den Hostname (oder die IP-Adresse) und die Portnummer eines HTTP-Proxys, sodass mit
ecs-init
eine Internetverbindung aufgebaut werden kann. Beispielsweise haben Ihre Container-Instances vielleicht keinen externen Netzwerkzugriff über ein Amazon VPC-Internet-Gateway, NAT-Gateway oder eine Instance. env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock
-
Setzen Sie diesen Wert auf
169.254.169.254,169.254.170.2,/var/run/docker.sock
, um die Amazon-EC2-Instance-Metadaten, IAM-Rollen für Aufgaben und Docker-Deamon-Datenverkehr aus dem Proxy zu filtern.
/etc/systemd/system/docker.service.d/http-proxy.conf
(nur Amazon Linux 2)-
Environment="HTTP_PROXY=http://
10.0.0.131
:3128
"-
Setzen Sie diesen Wert auf den Hostname (oder die IP-Adresse) und die Portnummer eines HTTP-Proxys, sodass der Docker-Daemon damit eine Internetverbindung aufbauen kann. Beispielsweise haben Ihre Container-Instances vielleicht keinen externen Netzwerkzugriff über ein Amazon VPC-Internet-Gateway, NAT-Gateway oder eine Instance.
Environment="NO_PROXY=169.254.169.254"
-
Setzen Sie diesen Wert auf
169.254.169.254
, um EC2 Instance-Metadaten aus dem Proxy zu filtern.
/etc/sysconfig/docker
(nur Amazon Linux AMI und Amazon Linux 2)-
export HTTP_PROXY=http://
10.0.0.131
:3128
-
Setzen Sie diesen Wert auf den Hostname (oder die IP-Adresse) und die Portnummer eines HTTP-Proxys, sodass der Docker-Daemon damit eine Internetverbindung aufbauen kann. Beispielsweise haben Ihre Container-Instances vielleicht keinen externen Netzwerkzugriff über ein Amazon VPC-Internet-Gateway, NAT-Gateway oder eine Instance.
export NO_PROXY=169.254.169.254,169.254.170.2
-
Setzen Sie diesen Wert auf
169.254.169.254
, um EC2 Instance-Metadaten aus dem Proxy zu filtern.
Die Festlegung dieser Umgebungsvariablen in den oben genannten Dateien wirkt sich nur auf den Amazon ECS Container-Agenten, ecs-init
und den Docker-Daemon aus. Sie konfigurieren keine anderen Services (z. B. yum) für die Nutzung des Proxy.
Beispiel Amazon Linux HTTP-Proxy-Benutzerdatenskript
Das folgende Beispielbenutzerdaten-cloud-boothook
-Skript konfiguriert den Amazon ECS-Container-Agenten, ecs-init
, den Docker-Daemon und yum zur Verwendung eines von Ihnen spezifizierten HTTP-Proxys. Sie können auch ein Cluster festlegen, in dem sich die Container-Instance selbst registriert.
Für die Verwendung dieses Skripts befolgen Sie beim Starten einer Container-Instance die Schritte in Starten einer Amazon ECS Linux-Container-Instance und in Schritt 7. Anschließend kopieren Sie das folgende cloud-boothook
-Skript in das Feld User data (achten Sie darauf, die roten Beispielwerte durch Ihre eigenen Proxy- und Clusterinformationen zu ersetzen).
Das Benutzerdatenskript unterstützt nur Amazon Linux 2- und Amazon Linux AMI-Varianten des Amazon ECS-optimierten 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
Konfiguration von Windows Container-Instances
Um Ihre Amazon ECS Windows-Container-Instance für die Verwendung eines HTTP-Proxys zu konfigurieren, bestimmen Sie die folgenden Variablen beim Starten (mit Amazon EC2-Benutzerdaten).
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://
proxy.mydomain:port
", "Machine")-
Setzen Sie
HTTP_PROXY
auf den Hostname (oder die IP-Adresse) und die Portnummer eines HTTP-Proxys, sodass der ECS-Agent damit eine Internetverbindung aufbauen kann. Beispielsweise haben Ihre Container-Instances vielleicht keinen externen Netzwerkzugriff über ein Amazon VPC-Internet-Gateway, NAT-Gateway oder eine Instance. [Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")
-
Setzen Sie
NO_PROXY
auf169.254.169.254,169.254.170.2,\\.\pipe\docker_engine
, um die EC2 Instance-Metadaten, IAM-Rollen für Aufgaben und Docker-Daemon-Datenverkehr aus dem Proxy zu filtern.
Beispiel Windows HTTP-Proxy-Benutzerdatenskript
Das folgende Beispielbenutzerdaten-PowerShell-Skript konfiguriert den Amazon ECS-Container-Agenten und den Docker-Daemon für die Verwendung eines von Ihnen spezifizierten HTTP-Proxys. Sie können auch ein Cluster festlegen, in dem sich die Container-Instance selbst registriert.
Für die Verwendung dieses Skripts beim Starten einer Container-Instance befolgen Sie die Schritte in Starten einer Amazon ECS Linux-Container-Instance Kopieren Sie einfach das folgende PowerShell-Skript in das Feld User data (Benutzerdaten) (achten Sie darauf, die roten Beispielwerte durch Ihre eigenen Proxy- und Clusterinformationen zu ersetzen).
Die Option -EnableTaskIAMRole
ist erforderlich, um IAM-Rollen für Aufgaben zu aktivieren. Weitere Informationen finden Sie unter Zusätzliche Konfiguration für Windows-IAM-Rollen für Aufgaben.
<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>