后端 URL 变量未指向正确的端口

后端 URL 变量未指向正确的端口

我刚刚部署了前端和后端 pod,但它们之间的连接存在问题。

后端 pod 配置如下:

apiVersion: v1
kind: Pod
metadata:
  name: af-backend-pod
  labels:
    name: af-backend-pod
    app: adv-format
spec:
  containers:
  - name: af-backend
    image: localhost:5000/backend:1.2
    ports:
    - containerPort: 4040
    env:
    - name: NODE_ENV
      value: "test"

后端 pod 的服务:

apiVersion: v1
kind: Service
metadata:
  name: af-backend
  labels:
    name: af-backend-service
    app: adv-format
spec:
  ports:
  - port: 4040
    targetPort: 6011
  selector:
    name: af-backend-pod
    app: adv-format

当前端尝试使用 pod 配置中定义的名称调用后端时,就会出现此问题:

apiVersion: v1
kind: Pod
metadata:
  name: af-frontend-pod
  labels:
    name: af-frontend-pod
    app: adv-format
spec:
  containers:
  - name: af-frontend
    image: localhost:5000/frontend:1.1
    ports:
    - containerPort: 80
    env:
    - name: REACT_APP_SETUP
      value: "test"
    - name: REACT_APP_BACKEND_URL
      value: "af-backend"             # <- this
    - name: REACT_APP_BACKEND_PORT
      value: "6011"

目前,前端通过端口 30120 上的 NodePort 服务公开。将错误记录到控制台表明前端尝试使用以下 URL 调用后端:http://10.11.12.13:30120/这是不正确的:我希望在内部看到端口 6011 处的后端 API。

我的理解正确吗?还是我应该将后端服务公开以供外部访问?

或者也许有办法格式化后端的 URL,剪切出端口并将其替换为所需的端口?

答案1

问题出在后端 pod 的 sevice.spec.ports 配置中。目标端口是服务将转发流量的端口。在本例中,它是 4040,因为后端 pod 正在监听 4040。服务端口应该是 6011,因为 FE pod 将在此端口上调用服务。无需将后端服务公开为 NodePort。您还可以从 FE 容器尝试 netcat 命令来检查服务是否可以访问。命令:nc -v Service_IP 6011(响应中预期为“成功”)。

apiVersion: v1
kind: Service
metadata:
  name: af-backend
  labels:
    name: af-backend-service
    app: adv-format
spec:
  ports:
  - port: 4040        << Wrong Should be 6011; FE Pod calls the service at 6011
    targetPort: 6011  << Wrong Should be 4040; backend pod container port 4040
  selector:
    name: af-backend-pod
    app: adv-format

相关内容