我们很少有微服务能够正确部署在Ec2实例上并运行良好。但是,当连接到DynamoDB和SNS时,很少有pods不一致地持续出现“请求中包含的安全令牌已过期”错误。令人惊讶的是,到Aurora的DB连接似乎不是同一个微服务的问题。
这些吊舱在几分钟内面临这个问题,然后再次开始自行正常工作。即使我们重新启动POD,它也开始正常工作。
我们尝试过的事情:
RetryPolicy retryPolicy = new RetryPolicy(PredefinedRetryPolicies.DEFAULT_RETRY_CONDITION, PredefinedRetryPolicies.DEFAULT_BACKOFF_STRATEGY, MAX_RETRY_COUNT_AWS_TOKEN_EXPIRED, true); ClientConfiguration clientConfiguration = new ClientConfiguration().withRetryPolicy(retryPolicy); return AmazonSNSClientBuilder.standard().withClientConfiguration(clientConfiguration).build();
此外,如果snsclient.publish失败并出现令牌过期错误,我们将尝试从异常捕获块重试上述代码块,以实例化snsclient,假设它将创建新的snsclient,其中安全令牌将是新的,但这也不起作用。
从AWS SDK文档中,实例元数据服务使用EC2中的IAM角色,在其过期之前使用临时凭据获取新的STS令牌。但有时这似乎行不通。
以下是我的疑问:
- 问题可能是什么
- 如果我的ec2实例对AWS的实例元数据服务调用失败,如何调试?云迹没有显示任何内容
- 我们的生态系统有时会遇到DNS解析器问题,这是原因吗?ec2实例元数据服务是否也使用DNS解析器连接到AWS以获取新的STS令牌
95%的PODS运行良好,5%的PODS在一周内几分钟内失败。
请提出建议。