4

我们正在使用kube2iam在容器内传递 ec2 角色。有时我们会得到:

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

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

当kube2iam 需要时间来传递凭据时,似乎我们遇到了问题。

我确实发现这个提交使超时时间更短。

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

4

1 回答 1

2

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

默认情况下,当EC2Metadata创建类型(由默认凭据链使用)时,http.Client. 如果您kube2iam在该时间内没有响应,则凭证调用将失败。

您可以EC2MetadataDisableTimeoutOverrideaws.Config创建session.Session. 这样做时,超时将与http.DefaultClient.

例子:

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

sess, _ := session.NewSession(cfg)

db := dynamodb.New(sess) // etc.
于 2020-02-25T20:57:13.933 回答