在Kubernetes中连接前端和后端

时间:2020-10-02 10:40:29

标签: node.js kubernetes

我的前端设置为:

this.http.post<any>(`${environment.apiUrl}/auth/login`, {email, password})

apiUrl: 'http://backend/api'

我在容器中构建了前端,并将其暴露给负载均衡器服务,我试图通过ClusterIP服务将其连接到端口3000上的后端。

前端YAML:

apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  selector:
    tier: frontend
  ports:
    - port: 80
      targetPort: 80
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  selector:
    matchLabels:
      tier: frontend
  replicas: 1
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: frontend
        image: <Image>
        imagePullPolicy: Always
        ports:
        - containerPort: 80

后端YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  selector:
    matchLabels:
      app: app
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: app
        tier: backend
    spec:
      containers:
      - name: frontend-container
        image: <Image>
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  selector:
    app: app
    tier: backend
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000

如文档here中所述。

但是当我尝试从浏览器访问它时,它不起作用,我收到未知错误!!

enter image description here

enter image description here

以下是前端内部的屏幕截图,以确保它能够在内部到达后端。

enter image description here

我不明白我在哪里出了问题。我认为设置为http:// backend的apiUrl var无法正确转换,因为如果我将其更改为负载均衡器IP并重建了映像,则将后端公开给LB服务而不是ClusterIP。确实可以。

但是显然我不想让我的后端使用LB服务。

有什么主意吗?

2 个答案:

答案 0 :(得分:2)

查看以下内容:

outside world  | k8s cluster
               | 
Browser  -->   | Nginx-pod --> backend-pod
               |
               |

URL http://backend/api仅在群集中可解析,但是您的浏览器在外部环境中,因此它不知道此URL是什么。

理想情况下,您将使用ingress来管理到群集Pod的路由。

答案 1 :(得分:1)

正如@Elgarni所说,客户端的浏览器无法访问您的集群,因此http://backend/api在集群外部无法解析。
如果您定义了入口,请使用kubectl get ingress命令并了解您的外部IP。然后将您的${environment.apiUrl}替换为http://$EXTERNAL_IP/api/或 为您的外部IP定义DNS记录,并通过您定义的域进行访问。

相关问题