作为一名IT承包商,我的任务是修复客户软件中的一个问题,该问题简单地使用第三方库来加密或解密字节串。由于与AWS临时访问令牌相关的原因,库需要偶尔重新初始化,以获取新的访问令牌(通过AWS EKS)并使用。
我想出了一个简单的解决方案,其中这个库的初始化和使用被委托给一个为此目的而派生的子进程,输入和输出字符串通过几个管道以十六进制形式传递,然后为了重新初始化库,父进程可以简单地杀死这个子进程并派生一个新的。
看起来很标准的东西,在Unix中到处使用。但是客户代表说这可能会在Kubernetes pod中引起问题,涉及到访问权限和进程监控等。他是正确的,还是他(正如我怀疑的)是一个过于谨慎的珍珠离合器?
如果他是对的,那么会出现什么样的问题,又如何避免这些问题?
1条答案
按热度按时间hs1ihplo1#
但客户代表说,这可能会导致Kubernetes pod出现问题,涉及访问权限和进程监控等问题。
Kubernetes在子进程和访问权限方面没有什么特别之处,它只是Unix进程:子节点以与父节点相同的凭证运行,并且可以访问与父节点相同的文件和其它资源。
进程监控问题值得更详细地探讨。通常,我们说容器一般--不仅在Kubernetes中,而且在docker/podman等中--应该有一个入口点。换句话说,您不希望创建一个运行多个服务的容器,如Web服务器和数据库。这是因为在多入口点容器中,服务的故障对容器管理工具是隐藏的,因此容器运行时不能响应于服务故障而破坏和重新创建容器。
只要您的应用程序能够正确地响应子进程的意外死亡--通过调用
wait()
来清理进程条目,并在必要时正确地重新生成它--您就处于良好状态。