如何配置Kubernetes来加密节点和pod之间的流量?

Sil*_*gon 10 kubernetes

为了准备HIPAA合规性,我们正在转换我们的Kubernetes集群,以便在整个机群中使用安全端点(在所有pod之间).由于集群由目前使用HTTP连接的大约8-10个服务组成,因此由Kubernetes负责处理将非常有用.

我们想要解决的具体攻击向量是节点(物理服务器)之间的数据包嗅探.

这个问题分为两部分:

  • Kubernetes默认是否加密pod和节点之间的流量?
  • 如果没有,有没有办法配置它?

非常感谢!

Tom*_*šek 8

这里的回复似乎已经过时了。截至 2021 年 4 月 28 日,至少以下组件似乎能够为 Kubernetes 提供加密的网络层:

  • 伊斯蒂奥
  • 编织
  • 链接器
  • 纤毛
  • Calico(通过 Wireguard)

(以上列表是通过查阅各项目主页获得的)


Eug*_*how 7

实际上正确的答案是“视情况而定”。我会将集群拆分为 2 个独立的网络。

1. 控制平面网络

该网络是物理网络或底层网络的网络。

k8s 控制平面元素——kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet——以各种方式相互通信。除了少数端点(例如指标),可以在所有端点上配置加密。

如果您也在进行渗透测试,那么kubelet authn/authz 也应该打开。否则,加密不会阻止对 kubelet 的未授权访问。这个端点(在端口 10250)可以很容易地被劫持。

2.集群网络

集群网络是 Pod 使用的网络,也称为覆盖网络。加密留给第 3 方覆盖插件来实现,否则,应用程序必须实现。

Weave 覆盖层支持加密。@lukas-eichler 建议的服务网格链接器也可以实现这一点,但在不同的网络层上。


Luk*_*ler 6

Kubernetes 是否默认对 Pod 和节点之间的流量进行加密?

Kubernetes 不加密任何流量。

有像linkerd这样的服务网,可以让您轻松地在 http 服务之间引入 https 通信。

您将在每个节点上运行一个服务网格实例,所有服务都将与服务网格通信。服务网格内部的通信将被加密。

例子:

您的服务 -http-> localhost 到 servicemesh 节点 - https-> remoteNode -http-> localhost 到远程服务。

当您在与您的服务相同的 pod 中运行服务网格节点时,本地主机通信将在其他 pod 无法访问的私有虚拟网络设备上运行。