0

我特别尝试使用 Apache Storm (1.0.2) 来执行此操作,但它与任何使用 Kerberos 保护的服务相关。我正在尝试在 Docker 中运行一个安全的 Storm 集群。Storm 有许多开箱即用的 docker 镜像,它们在不安全的情况下工作得很好。我正在使用https://github.com/Baqend/docker-storm。我还让 Storm 在 RHEL VM 上安全运行。

但是,我的理解是 Kerberos 将主机名与委托人联系起来,所以如果我要让客户可以使用服务 foobar,我需要创建一个foobar/hostname@REALM. 然后客户端服务可能会hostname使用 principal连接foobar,Kerberos 将foobar/hostname@REALM在其数据库中查找,发现它在那里(因为我们创建了一个具有该名称的主体),并且一切都会正常工作。

在我的情况下,它在这里描述:https ://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.0/bk_installing_manually_book/content/configure_kerberos_for_storm.html 。nimbus 验证为storm/<nimbus host>@REALM,主管和外部客户端验证为storm/REALM。一切正常。

但在 2017 年,我们有了容器,主机名不再是静态的。那么我将如何对在 Docker 数据中心(或 Kubernetes 等)中运行的服务进行 Kerberize 处理?我必须将未知主机名附加到服务器身份验证。我想我可以为所有可能的主机名创建一个主体,并在启动时根据容器所在的位置动态选择正确的主机名,但这很笨拙。

我是否误解了 Kerberos 的工作原理?这里有我看不到的解决方案吗?我在网上看到很多人在 Docker 中运行 Storm 的例子,但我无法想象没有人的集群是安全的。

4

1 回答 1

0

我不知道 Apache Storm 或 Docker,但基于以前在集群中使用 JBOSS 的工作,其中入站客户端可以连接到可能数量的不同主机中的任何一个,那么您只需为整个主机分配一个虚拟名称在负载均衡器上进行池化,并根据虚拟名称而不是主机级别的单个主机名对服务进行 kerberize。因此,如果您要为客户端提供服务foobar,则需要创建foobar/virtualhostname@REALM的服务主体 (SPN)在您的目录中使用 kerberize 服务。您将该 SPN 分配给用户帐户(而不是计算机帐户),使其能够灵活地使用任何使用该 SPN 的 Kerberized 服务。如果您使用的是 Active Directory,则必须在其中创建一个带有 SPN 的 keytab,并将该 keytab 放置在每个运行 kerberized 服务实例foobar/virtualhostname@REALM的主机上。

于 2017-03-03T12:53:08.837 回答