您可以创建主机名灵活的 Kerberos 主体吗? (Docker)

Can you create Kerberos principals where the hostname is flexible? (Docker)

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

但是,我的理解是 Kerberos 将主机名与主体联系在一起,因此如果我要使服务 foobar 对客户端可用,我需要创建 foobar/hostname@REALM 的主体。然后,客户端服务可能会使用主体 foobar 连接到 hostname,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 中看到 运行ning Storm 的多个在线示例,但我无法想象没有人的集群是安全的。

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