Kubernetes 在POD之间分发外部APIToken

Kubernetes 在POD之间分发外部APIToken,kubernetes,Kubernetes,我在k8s上部署了一个与外部云服务对话的微服务。外部服务对每个apptoken可以进行的调用数量有api速率限制。我们可以预先创建多个AppToken 我们通常运行2-5个pod,并且希望每个pod都有一个令牌,这样我们就避免了重叠和超过速率限制 考虑到所有pod的部署设置完全相同且pod保持动态循环,在开始时为每个pod分配令牌的最简单方法是什么?正确的方法可能涉及某种专用服务来分发这些凭据。它可能会使用KubernetesAPI来监视POD,以查看它们是否退出,或者要求服务定期发送心跳信号以

我在k8s上部署了一个与外部云服务对话的微服务。外部服务对每个apptoken可以进行的调用数量有api速率限制。我们可以预先创建多个AppToken

我们通常运行2-5个pod,并且希望每个pod都有一个令牌,这样我们就避免了重叠和超过速率限制


考虑到所有pod的部署设置完全相同且pod保持动态循环,在开始时为每个pod分配令牌的最简单方法是什么?

正确的方法可能涉及某种专用服务来分发这些凭据。它可能会使用KubernetesAPI来监视POD,以查看它们是否退出,或者要求服务定期发送心跳信号以保留其当前令牌。共享Redis可以是一种轻量级的方式来维护状态,而不需要真正的服务器。如果你觉得有趣,你可以编写一个Kubernetes控制器,它可以看到用某种标签创建的吊舱,并创建一个匹配的秘密对象,该对象包含秘密

如果你真的想避免这种情况,你可以在一个简单的环境中运行你的应用程序。这将具有按顺序分配pod名称的属性,
myservice-0
myservice-1
,…,因此每个pod都知道它是哪个pod。然后,您可以使用令牌创建一个秘密,其中该秘密的密钥是预期的pod名称。服务将需要代码从装载的配置文件中检索值,或者init容器将需要将正确的值复制到已知位置。本文将详细介绍此init容器设置。如果您的POD经常停止,或者您需要频繁地上下扩展设置,那么由于StatefulSet利用率的限制,您可能会遇到一些操作问题(如果您有5个副本,您不能只停止#2并将其关闭;您必须停止编号最高的副本)


另一个骇客的方法是建立一个几乎只包含一个计数器的Redis容器。用您选择的语言编写一个小脚本,将带有令牌的秘密装载为一个文件,增加计数器(可能环绕),并将第n个令牌写入一个文件。然后您可以让一个部署以init脚本的形式运行它。在这里,您可以轻松地使用相同的令牌运行两个pod,但如果它们定期重新启动,则不会持续太长时间。

正确的方法可能需要某种专用服务来分发这些凭据。它可能会使用KubernetesAPI来监视POD,以查看它们是否退出,或者要求服务定期发送心跳信号以保留其当前令牌。共享Redis可以是一种轻量级的方式来维护状态,而不需要真正的服务器。如果你觉得有趣,你可以编写一个Kubernetes控制器,它可以看到用某种标签创建的吊舱,并创建一个匹配的秘密对象,该对象包含秘密

如果你真的想避免这种情况,你可以在一个简单的环境中运行你的应用程序。这将具有按顺序分配pod名称的属性,
myservice-0
myservice-1
,…,因此每个pod都知道它是哪个pod。然后,您可以使用令牌创建一个秘密,其中该秘密的密钥是预期的pod名称。服务将需要代码从装载的配置文件中检索值,或者init容器将需要将正确的值复制到已知位置。本文将详细介绍此init容器设置。如果您的POD经常停止,或者您需要频繁地上下扩展设置,那么由于StatefulSet利用率的限制,您可能会遇到一些操作问题(如果您有5个副本,您不能只停止#2并将其关闭;您必须停止编号最高的副本)

另一个骇客的方法是建立一个几乎只包含一个计数器的Redis容器。用您选择的语言编写一个小脚本,将带有令牌的秘密装载为一个文件,增加计数器(可能环绕),并将第n个令牌写入一个文件。然后您可以让一个部署以init脚本的形式运行它。在这里,您可以很容易地让两个吊舱使用相同的令牌运行,但如果它们定期重新启动,时间不会太长