0

我有两个服务在一个集群中运行(我将它们称为 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

4

0 回答 0