【发布时间】:2021-07-28 20:41:36
【问题描述】:
我正在尝试学习 Kubernetes,目前我正在尝试部署我制作的测试应用程序。
我有 3 个容器,每个容器都在自己的 pod 上运行
- 前端应用(使用 Nuxtjs)
- 后端 API (Nodejs)
- MongoDB
对于前端容器,我配置了一个运行良好的外部服务 (LoadBalancer)。我可以毫无问题地从浏览器访问该应用程序。
对于后端 API 和 MongoDB,我为每个配置了一个内部服务。后端 API 和 MongoDB 之间的通信正在工作。我遇到的问题是前端与后端 API 通信。
我在 Nuxtjs 和 nuxtjs.config.js 文件中使用 Axios 组件,我已将 Axios 基本 URL 设置为 http://service-name:portnumber/。但这不起作用,我猜是因为 url 是从客户端(浏览器)端调用的,而不是从服务器端调用的。如果我将后端 API 的服务类型更改为 LoadBalancer 并配置 IP 地址和端口号,并将其用作我的 axios URL,那么它可以工作。不过,我有点希望将 BackEnd-API 服务保留在内部。是否可以从服务器端而不是从客户端调用 Axios 基本 URL。
任何帮助/指导将不胜感激。
这是我的前端 YML 文件
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mhov-ipp
name: mhov-ipp
namespace: mhov
spec:
replicas: 1
selector:
matchLabels:
app: mhov-ipp
template:
metadata:
labels:
app: mhov-ipp
spec:
containers:
- image: mhov-ipp:1.1
name: mhov-ipp
ports:
- containerPort: 8080
env:
- name: NODE_ENV
value: "development"
- name: PORT
value: "8080"
- name: TITLE
value: "MHOV - IPP - K8s"
- name: API_URL
value: "http://mhov-api-service:4000/"
---
apiVersion: v1
kind: Service
metadata:
name: mhov-ipp-service
spec:
selector:
app: mhov-ipp
type: LoadBalancer
ports:
- protocol: TCP
port: 8082
targetPort: 8080
nodePort: 30600
这里是后端 YML 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: mhov-api-depl
labels:
app: mhov-api
spec:
replicas: 1
selector:
matchLabels:
app: mhov-api
template:
metadata:
labels:
app: mhov-api
spec:
containers:
- name: mhov-api
image: mhov-api:1.0
ports:
- containerPort: 4000
env:
- name: mongoURI
valueFrom:
configMapKeyRef:
name: mhov-configmap
key: database_url
---
apiVersion: v1
kind: Service
metadata:
name: mhov-api-service
spec:
selector:
app: mhov-api
ports:
- protocol: TCP
port: 4000
targetPort: 4000
【问题讨论】:
标签: kubernetes axios nuxtjs