这里的场景是,我们的应用程序服务需要访问作为内部托管的 Azure 容器应用程序,可以通过 vnet 访问。
如果我们有一个容器应用程序,并且我们已经使用以下链接实现了应用程序网关路由,则应用程序网关路由效果很好 - 单容器解决方案
假设我们有 2 个容器应用程序,如果我们有 /api1/--> 到容器 1 的路由,如果我们有 /api2/--> 到容器 2 的路由。
我们尝试实现相同的目标,但它无法访问站点,并且运行状况探测显示后端池的成功消息为 302 cod,并且作为测试目的,我们仅使用 http
有任何需要跟进的文档或这方面的专业知识吗?如果是,任何人都可以建议测试相同的最佳方法
实现这一目标的最佳方法是将这 2 个容器应用程序作为“仅限内部”运行,并创建一个运行您选择的代理的第三个容器应用程序:例如:nginx、envoy、caddy、yarp、apache、haproxy 等。在那里设置您想要的任何高级路由配置。你几乎可以做 nginx 或 envoy 或 yarp 此刻能做的任何事情。您的“上游”或“目标”是
http://app1
和 http://app2
(或您为应用程序命名的任何名称)
这是一个 nginx default.conf 示例,它路由 /api1 -> app1 和 /api2 -> app2
server {
listen 8080;
listen [::]:8080;
server_name _;
location /api1 {
proxy_pass http://app1;
proxy_http_version 1.1;
}
location /api2 {
proxy_pass http://app2;
proxy_http_version 1.1;
}
location / {
return 404;
}
}
您可以使用
构建自己的 nginx 镜像FROM nginx
# assuming the above config is in a file called default.conf
COPY default.conf /etc/nginx/conf.d/
或者使用默认的 nginx 映像并将其作为文件安装在那里。请参阅此二头肌模板作为示例 https://github.com/ahmelsayed/bicep-templates/tree/main/apps/routers/nginx
它创建 3 个应用程序,appv1(内部)和 appv2(内部)以及 nginx(外部),然后安装与上面映射非常相似的 nginx 配置
您可以对任何其他代理使用相同的方法