将 Windows 容器配置为 NAT 路由器

将 Windows 容器配置为 NAT 路由器

前言:类似于这个帖子,但需要特定于 Windows 的解决方案。

我需要将来自 Windows 容器集群的流量路由到同一集群内的另一个 Windows 容器。目标是将这些容器的出站流量路由到相同的源 IP,这将允许应用现有路由策略,这些策略可能与主机的 IP 路由策略不同。我想要路由的容器将在主机的外部网络上拥有自己的静态 IP(通过docker network create -d l2bridge ...)。

可行的方法是使用network_mode: "service:router-container",但是由于我的大多数服务都暴露相同的端口,因此会发生端口冲突和其他未知问题。出于这个原因(以及其他原因),我无法为这些容器指定不同的端口,而不会破坏现有的基础架构,因此将这些容器连接到同一个网络(通过 network_mode)对于我的情况来说不是一个可行的解决方案。

我试过配置 RRAS然而,在服务器核心容器上,我不断收到有关源文件的错误,这使我陷入了无益的困境(将源指向 install.wim 等)。

PS C:\> Install-WindowsFeature RemoteAccess

Install-WindowsFeature : The request to add or remove features on the specified server failed.
Installation of one or more roles, role services, or features failed.
The source files could not be found.
Use the "Source" option to specify the location of the files that are required to restore the feature. For more
information on specifying a source location, see http://go.microsoft.com/fwlink/?LinkId=243077. Error: 0x800f081f
At line:1 char:1
+ Install-WindowsFeature RemoteAccess
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (@{Vhd=; Credent...Name=localhost}:PSObject) [Install-WindowsFeature],
    Exception
    + FullyQualifiedErrorId : DISMAPI_Error__Failed_To_Enable_Updates,Microsoft.Windows.ServerManager.Commands.AddWind
   owsFeatureCommand

我也曾屈尊尝试设置 ICS但在创建 com 对象时也遇到了错误。尝试复制相关的 DLL(C:\Windows\System32\hnet*.dll),但仍然无法使其工作。

PS C:\> regsvr32 hnetcfg.dll /s
PS C:\> $m = New-Object -ComObject HNetCfg.HNetShare
New-Object : Retrieving the COM class factory for component with CLSID {00000000-0000-0000-0000-000000000000} failed
due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
At line:1 char:6
+ $m = New-Object -ComObject HNetCfg.HNetShare
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [New-Object], COMException
    + FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand

由于我使用的是 Windows 容器,所以我认为与使用 Linux 容器相比,我的灵活性稍差一些,因此如果可能的话,我正在寻找可以在 Windows 容器内工作的解决方案。

參閱我现有的帖子(未作任何解释就关闭了)为什么我需要这样做,以及有关我的基础设施的更多详细信息。

答案1

经过几个小时的头脑风暴,我终于意识到我可能需要尝试不同的窗口服务器容器。目前有四个窗口基础镜像

  • 纳米服务器是一款用于新应用程序开发的超轻型 Windows 产品。
  • 服务器核心规模适中,是“提升和转移” Windows Server 应用程序的一个不错选择。
  • 视窗是最大的图像,并且对工作负载具有完整的 Windows API 支持。
  • Windows 服务器比 Windows 映像略小,具有完整的 Windows API 支持,并允许您使用更多服务器功能。

我一直在尝试的是服务器核心映像,因此我尝试了“mcr.microsoft.com/windows”,但它似乎没有发现 RRAS 功能,而且无论如何只支持到 20H2/1809。另一方面,“mcr.microsoft.com/windows/server”在服务器 2022 上受支持,应该是今后要使用的。使用那个,我成功安装了 RRAS 并查询了 ICS com 对象(尽管它没有返回任何结果)。所以现在我只需要弄清楚如何从终端正确设置 RRAS(可能会有用),但这绝对是朝着正确方向迈出的一步。

仍然好奇是否有更好的方法可以在 Windows 容器环境中完成我在这里尝试做的事情。我不介意拥有一个包含 Linux 和 Windows 容器的混合生态系统,但根据我的研究,目前还没有完全支持,至少在同一主机上还没有。

相关内容