这是题为《Securing Kubernetes for Cloud Native Applications》系列文章的最后一篇,这个系列文章中,我们讨论了构成Kubernetes集群每个层的安全性方面的内容。在终结篇中,我们将讨论容器工作负载本身的安全性。我们如何确保容器内容的完整性?我们如何知道容器内部实际上是什么?让我们从Secrets(秘钥)开始。
保护Secrets
这引出了一个问题:我们如何为在Kubernetes集群中运行的容器化应用程序提供Secrets? 由于它们的敏感性,Kubernetes提供了一个专用的API资源对象来处理Secrets,称为(不出所料)Secret。然后,可以在需要访问它们的Pod的Spec中引用封装在Secret对象中的秘密数据:最好是通过卷装入,而不是通过环境变量。
重要的是要确保对Secret的访问严格限于那些需要使用它的实体(用户和Pod),它不是通过网络未加密传输的,并且当存储在磁盘上时(静止状态)它是不可访问或可读的。 在之前的文章中,我们了解了如何使用身份验证和授权(RBAC)控制对API对象(如Secrets)的访问,以及使用TLS加密集群组件之间的通信的需求。这满足了其中两个原则,包括配置节点授权和kubelet通过API访问Secret的场景,但是需要确保Secret在静止状态时无法访问或可读。
保护Secrets
这引出了一个问题:我们如何为在Kubernetes集群中运行的容器化应用程序提供Secrets? 由于它们的敏感性,Kubernetes提供了一个专用的API资源对象来处理Secrets,称为(不出所料)Secret。然后,可以在需要访问它们的Pod的Spec中引用封装在Secret对象中的秘密数据:最好是通过卷装入,而不是通过环境变量。
重要的是要确保对Secret的访问严格限于那些需要使用它的实体(用户和Pod),它不是通过网络未加密传输的,并且当存储在磁盘上时(静止状态)它是不可访问或可读的。 在之前的文章中,我们了解了如何使用身份验证和授权(RBAC)控制对API对象(如Secrets)的访问,以及使用TLS加密集群组件之间的通信的需求。这满足了其中两个原则,包括配置节点授权和kubelet通过API访问Secret的场景,但是需要确保Secret在静止状态时无法访问或可读。