我特别尝试使用 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 的例子,但我无法想象没有人的集群是安全的。