我有两个服务在一个集群中运行(我将它们称为 A 和 B),副本为 1,这意味着每个服务一个容器。
服务 A 有一个 Web 应用程序 (UI),它调用服务 B 中的另一个 Web 应用程序 (api)。
服务 A 在 8082 上公开,服务 B 在 8081 上公开。
但是,由于端口的差异,我将不得不实现某种反向代理来完成这项工作,并且 CORS 不允许 A 调用 B(即使它们在同一个 url 上可用,因为它们是 swarm 的一部分)。
我的想法是在 A 中拥有一个虚拟 web api 以及现有的 UI 应用程序,并将 urlReWrite 规则添加到虚拟 api,以便从 UI 应用程序到服务 A 中的虚拟 web 应用程序的请求将被重定向到服务 B 中的实际请求。
无论出于何种原因,这都行不通。我只是收到 404 错误。有人可以帮我弄这个吗?
我还在下面为服务 A 发布了 dockerfile 内容,其中写入了 urlRewrite。
# escape=`
FROM microsoft/aspnet
SHELL ["powershell", "-command"]
# Install urlRewrite
RUN Invoke-WebRequest http://download.microsoft.com/download/E/9/8/E9849D6A-020E-47E4-9FD0-A023E99B54EB/requestRouter_amd64.msi -UseBasicParsing -OutFile C:/requestrouter.msi; `
Start-Process msiexec -ArgumentList '/i C:\requestrouter.msi /qn' -Wait; rm C:\requestrouter.msi
# Install ARR
RUN Invoke-WebRequest http://download.microsoft.com/download/C/9/E/C9E8180D-4E51-40A6-A9BF-776990D8BCA9/rewrite_amd64.msi -UseBasicParsing -OutFile C:/rewrite.msi; `
Start-Process msiexec -ArgumentList '/i C:\rewrite.msi /qn' -Wait; rm C:\rewrite.msi
# Enable ARR proxy
RUN Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Name 'enabled' -Filter 'system.webServer/proxy' -Value 'True'
# Configure website
EXPOSE 8082
RUN Set-WebBinding -Name 'Default Web Site' `
-BindingInformation '*:80:' `
-PropertyName Port -Value 8082; `
md C:\inetpub\wwwroot\Application; `
md C:\inetpub\wwwroot\webapi; `
md c:\transformedsettings; `
New-WebApplication -Name 'UIApplication' `
-Site 'Default Web Site' `
-PhysicalPath 'C:\inetpub\wwwroot\Application' `
-ApplicationPool '.NET v4.5'; `
New-WebApplication -Name 'webapi' `
-Site 'Default Web Site' `
-PhysicalPath 'C:\inetpub\wwwroot\webapi' `
-ApplicationPool '.NET v4.5';
RUN Add-WebConfigurationProperty -PSPath 'IIS:\Sites\Default Web Site\webapi' -filter "system.webServer/rewrite/rules" -name '.' -value @{name='umrp'; patterSyntax='Regular Expressions'; stopProcessing='False'}; `
Set-WebConfigurationProperty -PSPath 'IIS:\Sites\Default Web Site\webapi' -filter "system.webServer/rewrite/rules/rule[@name='umrp']/match" -name 'url' -value '(.*)'; `
Set-WebConfigurationProperty -PSPath 'IIS:\Sites\Default Web Site\webapi' -filter "system.webServer/rewrite/rules/rule[@name='umrp']/action" -name 'type' -value 'Rewrite'; `
Set-WebConfigurationProperty -PSPath 'IIS:\Sites\Default Web Site\webapi' -filter "system.webServer/rewrite/rules/rule[@name='umrp']/action" -name 'url' -value 'http://(manager nodes ip):8081/{R:1}'
# The final instruction copies the site you published earlier into the container.
COPY ./Xpo.LastMile.Portal/bin/Release/PublishOutput C:/inetpub/wwwroot/Application
COPY ./InitializeContainer.ps1 c:/
COPY ./transformedsettings c:/transformedsettings
COPY ./Xpo.LastMile.Portal/angular2 C:/inetpub/wwwroot/Application/angular2
COPY ./Xpo.LastMile.Portal/node_modules C:/inetpub/wwwroot/Application/node_modules
COPY ./Default.html C:/inetpub/wwwroot/webapi
ENTRYPOINT powershell c:\InitializeContainer