目前,Kubernetes中的网络策略允许您控制pod上的出口和入口。但是,如果两个容器在同一个pod中运行,则无法为每个容器设置不同的网络策略。
我正在尝试实现一个Kafka消费者,它能够从托管在我们私有子网中的代理读取消息,然后将此请求分发到侧容器,该侧容器运行由web上随机用户设计的不受信任的代码。由于没有办法限制容器与策略的通信,这些不受信任的代码可以到达我们的Kafka代理。
我知道这可以通过在Kafka上启用身份验证来限制。但是,服务仍然会暴露给不受信任的容器。
有没有办法阻止这种情况的发生?我们已经探索了Kata容器,Istio + Envoy和Cilium,它们似乎都不能帮助解决这个问题。
你需要在Kafka和任何客户端之间启用非对称加密(SSL/Kerberos)。这样,您就可以将公钥委托给任何受信任的客户端,而任何不受信任的代码在没有有效密钥对的情况下都无法连接。此外,加密将防止不受信任的代码嗅探该容器/pod/主机本地的网络数据。这些都不需要/不涉及Kubernetes。这可以通过在Kafka上启用身份验证来限制
- https://kafka.apache.org/documentation/安全
- https://docs.confluent.io/platform/current/kafka/encryption.html encrypt-with-tls
除此之外,在容器中以受限访问(非root)用户帐户运行不受信任的代码,无论如何,您应该在容器中执行常规的安全最佳实践。
如果您需要在容器中使用更精细的网络策略,例如安装iptables
。