2017-03-02 30 views
3

我有一個使用AWS-SDK-去談話dynamodb Go程序。依賴關係是暢銷的。去版本1.7.1。 aws-sdk-go版本1.6.24。該項目工程按預期在所有以下環境:從外殼無效的報頭字段值僅在kubernetes/CoreOS

  • 開發框(Arch Linux的)對我的dev的盒子運行
  • 泊塢窗容器(泊塢窗1.13.1)從外殼
  • EC2實例(Ubuntu的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穩定AMI(CoreOS穩定1235.8.0)

的碼頭工人形象,我的dev的機器的工作原理是基於從頭EC2實例。爲了排除故障,我創建了一個基於Ubuntu的圖像,並使用一個單獨的go程序創建了一個簡單的從dynamodb獲取項目的程序。當這個鏡像在我的k8s羣集上運行並且程序從交互式shell運行時,我得到了相同的錯誤。我已經證實我可以從這個env ping通dynamodb端點。

我有一個很難解決此問題:我失去了一些愚蠢的事嗎?有人能指出我正確的方向還是想知道發生了什麼?

回答

2

hidden\n肯定是無效的。不知道它是否實際存在或以某種方式在您清理髮布時插入。

考慮:

package main 

import (
    "fmt" 
    "golang.org/x/net/lex/httplex" 
) 

func main() { 
    fmt.Println("Is valid (without new line)", httplex.ValidHeaderFieldValue("AWS4-HMAC-SHA256 Credential=hidden/20170302/us-east-1/dynamodb/aws4_request, SignedHeaders=accept-encoding;content-length;content-type;host;x-amz-date;x-amz-target, Signature=483f56dd0b17d8945d3c2f2044b7f97e531190602f132a4d5f828264b3a2cff2")) 
    fmt.Println("Is valid (with new line)", httplex.ValidHeaderFieldValue("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")) 
} 

一個猜測是,無論真正的潛在價值正從(配置文件等)拉錯在那裏\n和它高興地得到拉進你的頭,但只有在這案件。

+1

'\ n'在我清理髮布之前已經在標題中。我覺得奇怪的是,它只能插入到k8s環境中,不過因爲一切都應該是相同的(特別是在docker部署的情況下),但它是我追蹤的主角! – SjB

+1

從文件中創建一個k8s祕密是在祕密數據後面添加一個\ n,然後將其插入到標題中。 – SjB

1

記得 「-n」 當你這樣做: 回聲-n關鍵| base64

+0

這似乎與 – Efren

+0

這個問題沒有關係,這可能是問題的根源:使用沒有-n標誌的echo會在輸出中添加一個換行符(用於在終端中顯示),並且隨着其他數據到base64 – SjB