나는 aws-sdk-go를 사용하여 dynamodb와 통신하는 Go 프로그램을 가지고 있습니다. 종속성이 판매됩니다. 1.7.1 버전으로 이동하십시오. aws-sdk-go 버전 1.6.24. 이 프로그램은 다음의 모든 환경에서 예상 작품과 같이 쉘에서kubernetes/CoreOS에서만 유효하지 않은 헤더 필드 값
- dev에 상자 (아치 리눅스)
- 고정 표시기 용기 내 dev에 상자에서 실행 (도커 1.13.1) 쉘에서
- EC2 인스턴스 (우분투 16.04)
내가는 Kubernetes에 고정 표시기 용기 (나는 내 dev에 상자에서 테스트 같은 것), 나는 다음과 같은 오류 얻을 실행하면 :
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을 을 바탕으로
:
https://golang.org/src/net/http/transport.go
https://godoc.org/golang.org/x/net/lex/httplex#ValidHeaderFieldValue
문제가 헤더 값 유효성 검사입니다, 그러나 나는 그것이 내 K8S 클러스터를 제외하고 모든 곳에서 작동하는 이유를 이해하기 위해 딱하다 것 같습니다. 클러스터는 최신 CoreOS stable ami (CoreOS stable 1235.8.0)를 실행하는 Ec2 인스턴스로 구성됩니다.
내 dev 컴퓨터에서 작동하는 고정 이미지는 스크래치 기반입니다. 문제를 해결하기 위해 나는 우분투 기반의 이미지를 만들어 냈습니다. 그냥 dynamodb에서 간단한 아이템을 얻는 별도의 go 프로그램을 사용했습니다. 이 이미지가 k8s 클러스터에서 실행되고 프로그램이 대화 형 셸에서 실행되면 동일한 오류가 발생합니다. 이 env에서 dynamodb 엔드 포인트를 ping 할 수 있음을 확인했습니다.
이 문제를 해결하는 데 어려움을 겪고 있습니다. 여기에 바보가 있습니까? 누군가가 올바른 방향으로 나를 가르키거나 무슨 일이 일어나고 있는지 생각할 수 있습니까?
게시를 위해 정리되기 전에 '\ n'이 헤더에있었습니다. 나는 그것이 k8s 환경에서만 삽입되었다는 것이 이상하다는 것을 알았지 만 다른 것들은 모두 같아야한다 (특히 docker가 배포 된 경우). 그러나 그것은 내가 추적 할 리드입니다! – SjB
파일에서 k8s 비밀을 생성하는 것은 비밀 데이터 뒤에 \ n을 추가하는 것이고, 그 다음 비밀 데이터는 헤더에 삽입됩니다. – SjB