Ich habe ein Go-Programm, das aws-sdk-go verwendet, um mit dynamodb zu sprechen. Abhängigkeiten werden verwaltet. Go Version 1.7.1. aws-sdk-go Version 1.6.24. Das Programm arbeitet wie in allen folgenden Umgebungen zu erwarten:Ungültiger Header-Feldwert in Go NUR auf kubernetes/CoreOS
- Dev-Box von Shell (Arch Linux)
- Docker-Container auf meine Dev-Box (Docker 1.13.1)
- EC2-Instanz von Shell läuft (Ubuntu 16,04)
Wenn ich laufen die docker-Container auf Kubernetes (gleiche ich auf meine dev-Box getestet), erhalte ich folgende Fehlermeldung:
2017/03/02 22:30:13 DEBUG ERROR: Request dynamodb/GetItem: ---[ REQUEST DUMP ERROR ]----------------------------- net/http: invalid header field value "AWS4-HMAC-SHA256 Credential=hidden\n/20170302/us-east-1/dynamodb/aws4_request, SignedHeaders=accept-encoding;content-length;content-type;host;x-amz-date;x-amz-target, Signature=483f56dd0b17d8945d3c2f2044b7f97e531190602f132a4d5f828264b3a2cff2" for key Authorization ----------------------------------------------------- 2017/03/02 22:30:13 DEBUG: Response dynamodb/GetItem Details: ---[ RESPONSE ]-------------------------------------- HTTP/0.0 000 status code 0 Content-Length: 0
Basierend auf:
https://golang.org/src/net/http/transport.go
https://godoc.org/golang.org/x/net/lex/httplex#ValidHeaderFieldValue
Es sieht aus wie das Problem mit der Header-Wert Validierung ist, aber ich bin an einem Verlust zu verstehen, warum es überall, außer auf meinem K8S Cluster funktioniert. Der Cluster besteht aus Ec2-Instanzen, auf denen das neueste CoreOS stable ami läuft (CoreOS stable 1235.8.0)
Das Docker-Image, das auf meinem Dev-Computer funktioniert, basiert auf Scratch. Zur Fehlerbehebung habe ich ein Image erstellt, das auf Ubuntu basiert, und zwar mit einem separaten Go-Programm, das einfach ein Element von dynamodb holt. Wenn dieses Image auf meinem k8s-Cluster ausgeführt wird und das Programm von einer interaktiven Shell ausgeführt wird, erhalte ich die gleichen Fehler. Ich habe bestätigt, dass ich die dynamodb Endpunkte von diesem env anpingen kann.
Ich habe eine schwere Zeit, dieses Problem zu beheben: Verpasse ich hier etwas dummes? Kann mir jemand in die richtige Richtung zeigen oder eine Vorstellung davon haben, was vor sich geht?
Das '\ n' war in der Kopfzeile, bevor ich für die Veröffentlichung gereinigt habe. Ich würde es seltsam finden, dass es nur in die k8s-Umgebung eingefügt wurde, obwohl alles andere gleich sein sollte (besonders angesichts der Docker-Deploy), aber es ist eine Spur, die ich aufspüren werde! – SjB
Beim Erstellen eines k8s-Geheimnisses aus einer Datei wurde nach den geheimen Daten ein \ n hinzugefügt, das dann in den Header eingefügt wurde. – SjB