多个Docker容器在同一主机上彼此解析

时间:2019-11-19 00:32:53

标签: docker dns docker-compose saml saml-2.0

某些背景:我目前正在使用Docker为我的身份提供商(IdP)和服务提供商(SP)开发SAML测试环境。

简而言之:

  1. IdP应该能够联系SP。
  2. SP应该能够联系IdP。
  3. 使用Docker的用户(适用于Mac)应该能够浏览IdP和SP。

在docker-compose中具有IdP和SP会生成名称解析错误,因为这两个服务将基于它们的服务名称相互联系。 但是,浏览器无法根据他们的码头工人名称与他们联系。

基本上,我希望有一个适用于我的机器和docker容器的DNS。 您将如何设置?

1 个答案:

答案 0 :(得分:1)

问题#1

在docker-compose中具有IdP和SP会产生名称解析错误,因为这两个服务将基于它们的服务名称相互联系。

答案

(1)您可以配置本地DNS服务器(或主机文件)和HAProxy,以将IdP和SP映射到具有不同外部端口的相同IP地址。例如,

https://idp.example.com --> 10.10.40.10:8443

https://sp.example.org --> 10.10.40.10:2443
GitHub存储库上的

(2)How to build and run Shibboleth SAML IdP and SP using Docker container提供了有关使用Docker容器构建Shibbolth SAML IdP和Shibboleth SAML SP的说明。

  • Shibboleth SAML IdP负责身份联合。

  • OpenLDAP负责身份验证。

  • Shibboleth SAML SP用于保护演示应用程序。

问题2

但是,浏览器无法根据他们的码头工人名称与他们联系。

答案

(1)您不能使用Web浏览器根据其docker名称与IdP或SP进行通信。

(2)您可以使用Web浏览器本地基于其IP地址/端口与IdP和SP通信(没有HAProxy)。

您可以build and run Shibboleth SAML IdP and SP using Docker container,然后按照说明使用Web浏览器根据其IP地址/端口或域名/端口与IdP和SP通信。

(3)您可以使用Web浏览器根据具有DNS和HAProxy的域名与IdP和SP进行通信。

问题#3

基本上,我希望有一个适用于我的机器和docker容器的DNS。您将如何设置?

答案

SAML依靠Web浏览器将SAML请求从SP重定向到IdP,然后将SAML响应从IdP重定向到SP。

(1)您在不同的计算机上运行SAML IdP和SAML SP。因此,您无需使用HAProxy将不同的Docker外部端口映射到同一台物理计算机的不同外部端口。

(2)您只需要配置DNS即可将两个不同的物理计算机(分别运行SAML IdP和SAML SP)的IP地址映射到不同的域名(例如idp.example.com和sp.example.org) )。

对于测试环境,您只需修改Web浏览器本地计算机的本地主机文件即可将不同的IP地址映射到不同的域名,而无需配置DNS服务器。

例如,如果您使用Web浏览器/ Windows 10计算机访问SAML IdP和SAML SP,则可以编辑主机文件“ C:\ Windows \ System32 \ drivers \ etc \ hosts”以添加以下IP地址映射

10.10.40.10 idp.example.com 
10.10.40.11 sp.example.org