angular - AKS K8S - 使用服务名称从 Angular 前端访问 spring-boot 应用程序
问题描述
我有两个使用 angular 开发的应用程序前端和使用 spring-boot 开发的后端。两个应用程序都在同一个命名空间中运行。
已经创建了两种类型的服务:负载均衡器。
- 前端说
frontend-app-lb
(暴露9001) - 后端说
backend-app-lb
(暴露9000)。
我能够通过外部 IP 获得响应。使用卷曲http://<External-ip>:900[0/1]/
在 Angular 应用程序中,我配置了 environment-prod.ts,baseurl 为http://<External-ip-of-backend-app-lb>:9000/
. 在允许 CORS 的情况下,能够访问后端应用程序。
我也知道,如果应用程序在不同的命名空间中运行,我们可以使用 this 从不同的命名空间访问应用程序/pod http://<service-name>.<namespace>.svc.cluster.local:port
。
如何仅使用 baseurl 中的服务名称访问在同一命名空间中运行的后端应用程序,例如http://backend-app-lb:9000
. - 这可能吗?
解决方案
我发现,访问http://backend-app-lb:9000
可能不是一种方法。
其他方法:
方法 #1:使用 Azure 应用程序网关:
将后端服务公开为 LoadBalancer 类型的服务(在我的例子中是部署在 AKS 中的应用程序)。因此配置了应用程序网关(第 7 层)。
- 说任何 url
/backend-api
连接到后端应用程序。
- 说任何 url
在前端应用程序
environment.prod.ts
中,使用/backend-api
as baseurl 连接到后端 api。
方法 #2:使用 Nginx 代理
- 如果前端应用程序是在 Ngnix 服务器上开发的,使用配置我们创建一个代理并访问后端服务。
- Kubernetes 文档中提供的参考资料
- 在这种情况下,后端应用程序可以作为服务公开(它可以是 NodePort 或 LoadBalancer 类型)。
这两种方法在某种程度上使前端应用程序对后端服务的访问变得简单,并且在构建期间无需进行操作。
推荐阅读
- php - 使用 Laravel 控制器在不同页面上显示相同的项目
- javascript - 制作一个用“eval”全局制作的数组
- command-line-interface - 如果 Robot Framework 中的测试套件之一通过,如何将最终结果标记为 PASS?
- asp.net - Ext.net 重复标题下拉上下文菜单,用于在树面板中添加/隐藏列
- oracle - 如果没有自动增量,我必须添加带有 continue Id no 的行
- css - 值和类名具有相同的值 - webpack - css-loader
- python - Python轮函数没有按预期工作
- node.js - 如何解决节点 sass 安装错误
- amazon-web-services - 如何在 Kubernetes Yaml 中对 AWS ECR 进行身份验证
- flutter - Flutter:flutter_signin_button 溢出问题