Wie kann ich Instance-Metadatenprobleme auf meiner EC2-Linux-Instance beheben?
Ich kann keine Instance-Metadaten von meiner Amazon Elastic Compute Cloud (Amazon EC2) Linux-Instance abrufen.
Kurzbeschreibung
Instance-Metadaten sind Informationen über die EC2-Instance, wie Instance-ID, öffentliche und private IP-Adressen, Sicherheitsgruppen, AWS Identity and Access Management (IAM)-Rollen usw. Die Instance-Metadaten werden der Instance über HTTP-Anfragen an 169.254.169.254 zur Verfügung gestellt.
Beim Abrufen von Instance-Metadaten aus dem Instance Metadata Service (IMDS) können die folgenden Probleme auftreten:
- HTTP-Anforderungsfehler
- Proxy-Konfiguration
- Lokale Firewallregeln
- Drosselung anfordern
Behebung
HTTP-Anforderungsfehler
Wenn Sie eine HTTP-Anfrage zum Abrufen von Instance-Metadaten stellen, werden möglicherweise die folgenden HTTP-Fehlercodes zurückgegeben:
HTTP 404 - Not Found
Der HTTP 404-Fehler bezieht sich auf IMDS v1. Dieser Fehler tritt auf, wenn die angeforderte Ressource nicht verfügbar ist. Vergewissern Sie sich, dass Sie die richtige URL verwenden.
400 - Bad Request
Der 400 - Bad Request-Fehler bezieht sich auf IMDS v2. Dieser Fehler tritt auf, wenn die PUT-Anfrage nicht gültig ist.
401 - Unauthorized
Der 401 - Unauthorized-Fehler tritt auf, wenn die GET-Anfrage ein ungültiges Token verwendet. Wenn dies der Fall ist, generieren Sie ein neues Token.
403 - Forbidden
Der 403 - Forbidden-Fehler tritt auf, wenn die Anfrage nicht zulässig ist oder IMDS ausgeschaltet ist. Führen Sie den folgenden Befehl aus, um den IMDS-Status zu überprüfen. Ersetzen Sie im folgenden Beispielbefehl your_instance_ID durch den richtigen Wert für Ihren Anwendungsfall.
$ aws ec2 describe-instances -instance-ids -query 'Reservations[].Instances[].MetadataOptions'
Im Folgenden finden Sie eine Beispielausgabe des vorherigen Befehls:
[ { "State": "applied", "HttpTokens": "optional", "HttpPutResponseHopLimit": 1, "HttpEndpoint": "disabled", "HttpProtocolIpv6": "disabled", "InstanceMetadataTags": "disabled" } ]
Wenn die Befehlsoption anzeigt, dass der HttpEndpoint ausgeschaltet ist, führen Sie den folgenden Befehl aus:
aws ec2 modify-instance-metadata-options \ --instance-id \ --http-endpoint enabled
Proxy-Konfiguration
Wenn Sie einen Proxy verwenden, um auf das Internet zuzugreifen, müssen Sie die IMDS-IP-Adresse (169.254.169.254) ausschließen. Wenn die IMDS-IP-Adresse nicht ausgeschlossen ist, können Sie möglicherweise keine Instance-Metadaten abrufen.
Um die IMDS-IP-Adresse von der Proxy-Verwendung auszuschließen, legen Sie eine NO_PROXY-Umgebungsvariable mit der folgenden Adresse fest:
export NO_PROXY=169.254.169.254
Lokale Firewallregeln
Firewalls in der Instance können verhindern, dass einige oder alle Prozesse auf das IMDS zugreifen.
Stellen Sie sicher, dass Firewalls im Betriebssystem der Instance den ausgehenden Datenverkehr zur IP-Adresse der Instance-Metadaten nicht blockieren. Zu den Firewalls gehören iptables, UFW (uncomplicated firewall) und so weiter.
Verwenden Sie den folgenden Befehl, um die Firewallregeln für iptables zu überprüfen
sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination REJECT tcp -- anywhere 169.254.169.254 owner UID match 1000-10000 reject-with icmp-port-unreachable
Wenn das Ergebnis der iptables-Liste eine Ablehnung des Abrufs von Metadaten anzeigt, erhalten Sie möglicherweise die folgende Fehlermeldung:
$ curl http://169.254.169.254/latest/meta-data/ curl: (7) Failed to connect to 169.254.169.254 port 80 after 0 ms: Connection refused
Um diesen Fehler zu beheben, führen Sie den folgenden Befehl aus, um die Regel zu löschen:
$ sudo iptables -D OUTPUT -proto tcp -destination 169.254.169.254 -match owner -uid-owner 1000-10000 -jump REJECT
Drosselung anfordern
Der Datenverkehr zum IMDS wird basierend auf der Anzahl der Pakete pro Sekunde gedrosselt. Und es gibt ein Limit von 1024 PPS für jedes Elastic Network Interface, das an die Instance angeschlossen ist. Wenn Ihre PPS-Rate für den IMDS-Dienst 1024 PPS übersteigt, wird die Anfrage gedrosselt.
Wenn eine Drosselung auftritt, wiederholen Sie Ihre Anfrage mit einer exponentiellen Backoff-Strategie.
Um zu sehen, wie oft EC2-Instances die Drosselungsgrenzen erreichen, überprüfen Sie die Metrik linklocal_allowance_exceeded im Elastic Network Interface-Treiber. Diese Metrik gibt an, dass die Anzahl der Pakete, die aufgrund des Datenverkehrs zu lokalen Proxydiensten geformt wurden, das Maximum für die Netzwerkschnittstelle überschreitet.
Führen Sie den folgenden Befehl aus, um die Metrik linklocal_allowance_exceeded anzuzeigen:
$ ethtool -S <Network-Interface> eg: $ ethtool -S eth0
Verwandte Informationen
Verwendung eines Proxys auf Amazon EC2-Instances
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr