我有两个服务在swarm中运行(我称之为A和B),副本为1,这意味着每个服务都有一个容器。
服务A有一个Web应用程序(UI),可以调用服务B中的另一个Web应用程序(api)。
服务A在8082上公开,服务B在8081上公开。
但是我必须实现某种类型的反向代理才能使这项工作由于端口的不同而且CORS不允许A调用B(即使它们在相同的URL上可用,因为它们是群的一部分)。
我的想法是在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