HTTP-Proxykonfiguration - Amazon Elastic Container Service

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.

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).

Anmerkung

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 auf 169.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).

Anmerkung

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 -Cluster MyCluster -EnableTaskIAMRole </powershell>