如何将字符串从一个Kubernetes窗格中的供应商应用程序复制到另一窗格中的供应商应用程序?

问题描述 投票:0回答:1

[我有一组供应商提供的容器,它们一起工作以提供服务,我们将它们称为A,B和C-Kubernetes集群在单独的Pod中运行每个容器中的一个。

  • 容器A是一个前端Nginx容器,主要将内容转发到容器B。该前端允许您注册一个帐户,这实际上是一个转发到容器B的API调用。
  • 容器B是后端-它具有专有的内存数据库,并将帐户存储在该数据库中。创建帐户后,还将创建并存储安全令牌。 (用户可以通过A的API调用来检索该令牌。)
  • 容器C是连接集群外部某些内容的桥梁。但至关重要的是,您使用环境变量配置它,该环境变量包含来自容器B中存储的用户帐户的有效安全令牌。C使用该令牌通过A与B进行对话。

理想情况下,我想一次性全部部署这-这意味着我需要以某种方式在容器B中创建一个帐户(通过调用A,然后将该值放入C的环境变量中。

一些想法:

  • 我无法使用初始化容器来SQL插入新用户,因为未公开数据库。
  • 我可以在供应商容器的顶部构建容器以编辑配置/脚本等,但是替换二进制文件可能超出范围。
  • 我可以差不多通过A到B编写后端API脚本。但是,由于它利用了在请求之间保持不变的XSRF令牌,因此具有挑战性。有关实现此目的的最简单工具/库的任何建议欢迎。
  • 如果执行脚本以创建帐户的脚本,则需要将该令牌放入容器C的部署中-我可以使用ConfigMap,但是随后我需要调用Kube API来从集群内部修改ConfigMap,对我来说,这似乎不是一个好主意。

对我来说,唯一可行的解​​决方案是将initContainer放在C上,该C将向B查询(通过A)安全令牌,然后将其写入共享卷。然后,我将在容器C的顶部构建以读取共享卷,在容器内部设置环境变量,然后开始供应商的过程。但是然后我必须管理用户帐户的机密。

该方法是否有改进,或者我没有考虑过完全不同的事物?

kubernetes vendor
1个回答
0
投票

从容器内部执行API操作不是反模式。在initContainer运行并更新包含令牌的Secret之前,阻止在C上启动进程。不要将ConfigMap用于机密;为了实现这些目的而存在Secret对象,您可以将Secret引入到PodSpec中(作为env vars或卷装入),就像拉ConfigMap一样(具有一些小的语法变化)。

我可以看到的唯一可能遇到的麻烦是,您将要处理多个副本,因此您可能希望随机化一些Secret名称。在Pod共享文件系统中,在initContainer中创建它,在文件系统中传递随机名称,然后在主容器中使用它,并在设置环境变量或装载后删除Secret。 Pod启动后,机密和ConfigMap可以消失,而不会影响它们在Pod中的存在。

您可能还需要某种清理用户帐户的方法,因为从本质上来说,每次复制副本启动时您都会创建一个新用户,并且没有机会删除它。 cron作业可能是解决该问题的方法-列出与您的命名约定匹配的用户帐户,然后重新启动部署并在重新启动之前在您获取的列表中删除这些帐户。这样一来,您就不会在任何活动的复制品上花钱了。

© www.soinside.com 2019 - 2024. All rights reserved.