使用kube2iam

时间:2018-05-18 16:27:12

标签: aws-sdk-go

我们正在使用kube2iam在容器中传递ec2角色。偶尔我们会得到:

Error: Failed to list store contents: NoCredentialProviders: no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors

但是如果我们重新启动容器,则会获取凭据。

似乎我们在kube2iam takes time传递凭据时遇到了问题。

我确实发现this commit使得超时时间更短。

所以问题是: 有没有办法在aws-sdk-go中引入类似于AWS_METADATA_SERVICE_TIMEOUT / AWS_METADATA_SERVICE_NUM_ATTEMPTS的延迟重试?

1 个答案:

答案 0 :(得分:2)

Go AWS SDK没有直接的AWS_METADATA_SERVICE_TIMEOUT/AWS_METADATA_SERVICE_NUM_ATTEMPTS概念,但是确实有类似的概念。

默认情况下,创建EC2Metadata类型(默认凭据链使用)时,在http.Client上创建a timeout override of 1 second is set。如果您的kube2iam在这段时间内没有响应,则凭据调用将失败。

创建EC2MetadataDisableTimeoutOverride时,可以使用aws.Config上的session.Session选项禁用此行为。这样做时,超时将与http.DefaultClient的行为匹配。

示例:

cfg := aws.NewConfig().
    WithEC2MetadataDisableTimeoutOverride(true).
    WithCredentialsChainVerboseErrors(true)

sess, _ := session.NewSession(cfg)

db := dynamodb.New(sess) // etc.