多个 docker 容器在同一主机上相互解析
Multiple docker containers resolving each others on the same host
一些背景:我目前正在为我的身份提供商 (IdP) 和服务提供商 (SP) 使用 Docker 开发 SAML 测试环境。
简而言之:
- IdP 应该能够联系 SP。
- SP 应该能够联系 IdP。
- Docker 上的用户(对于 Mac)应该能够浏览 IdP 和 SP。
在 docker-compose 中使用 IdP 和 SP 会产生名称解析错误,因为这两个服务将根据其服务名称相互联系。
但是,浏览器无法根据他们 docker 的姓名联系他们。
基本上我想要一个适用于我的机器和 docker 容器的 DNS。
你会如何设置它?
问题 #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
(2) How to build and run Shibboleth SAML IdP and SP using Docker container 在 GitHub 存储库中提供了使用 Docker 容器构建 Shibbolth SAML IdP 和 Shibboleth SAML SP 的说明。
Shibboleth SAML IdP 负责身份联合。
OpenLDAP负责身份认证。
Shibboleth SAML SP 用于保护演示应用程序。
问题 #2:
但是,浏览器无法根据他们的 docker 姓名联系他们。
回答:
(1) 您不能使用 Web 浏览器根据 docker 的名称与 IdP 或 SP 进行通信。
(2) 您可以使用 Web 浏览器根据其 IP address/Port 本机(无需 HAProxy)与 IdP 和 SP 进行通信。
您可以 build and run Shibboleth SAML IdP and SP using Docker container 然后按照说明使用 Web 浏览器根据其 IP address/Port 或域 name/port.
与 IdP 和 SP 进行通信
(3) 您可以使用网络浏览器根据域名与 DNS 和 HAProxy 与 IdP 和 SP 进行通信。
问题 #3:
基本上我想要一个既适用于我的机器又适用于 docker 容器的 DNS。你会如何设置它?
回答:
SAML 依靠网络浏览器将 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).
对于测试环境,您可以只修改本机浏览器的本地主机文件,将不同的IP地址映射到不同的域名,而无需配置DNS服务器。
比如你使用webbrowser/Windows10机器访问SAML IdP和SAML SP,你可以编辑host文件"C:\Windows\System32\drivers\etc\hosts"添加如下IP地址映射
10.10.40.10 idp.example.com
10.10.40.11 sp.example.org
一些背景:我目前正在为我的身份提供商 (IdP) 和服务提供商 (SP) 使用 Docker 开发 SAML 测试环境。
简而言之:
- IdP 应该能够联系 SP。
- SP 应该能够联系 IdP。
- Docker 上的用户(对于 Mac)应该能够浏览 IdP 和 SP。
在 docker-compose 中使用 IdP 和 SP 会产生名称解析错误,因为这两个服务将根据其服务名称相互联系。 但是,浏览器无法根据他们 docker 的姓名联系他们。
基本上我想要一个适用于我的机器和 docker 容器的 DNS。 你会如何设置它?
问题 #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
(2) How to build and run Shibboleth SAML IdP and SP using Docker container 在 GitHub 存储库中提供了使用 Docker 容器构建 Shibbolth SAML IdP 和 Shibboleth SAML SP 的说明。
Shibboleth SAML IdP 负责身份联合。
OpenLDAP负责身份认证。
Shibboleth SAML SP 用于保护演示应用程序。
问题 #2:
但是,浏览器无法根据他们的 docker 姓名联系他们。
回答:
(1) 您不能使用 Web 浏览器根据 docker 的名称与 IdP 或 SP 进行通信。
(2) 您可以使用 Web 浏览器根据其 IP address/Port 本机(无需 HAProxy)与 IdP 和 SP 进行通信。
您可以 build and run Shibboleth SAML IdP and SP using Docker container 然后按照说明使用 Web 浏览器根据其 IP address/Port 或域 name/port.
与 IdP 和 SP 进行通信(3) 您可以使用网络浏览器根据域名与 DNS 和 HAProxy 与 IdP 和 SP 进行通信。
问题 #3:
基本上我想要一个既适用于我的机器又适用于 docker 容器的 DNS。你会如何设置它?
回答:
SAML 依靠网络浏览器将 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).
对于测试环境,您可以只修改本机浏览器的本地主机文件,将不同的IP地址映射到不同的域名,而无需配置DNS服务器。
比如你使用webbrowser/Windows10机器访问SAML IdP和SAML SP,你可以编辑host文件"C:\Windows\System32\drivers\etc\hosts"添加如下IP地址映射
10.10.40.10 idp.example.com
10.10.40.11 sp.example.org