Kubernetes ERR_NAME_NOT_RESOLVED

Ajr*_*ris 3 kubernetes kubectl minikube

我有两种部署,一种用于后端,一种用于前端,以及两种服务。前端服务设置为负载均衡器,并按预期公开(使用 minikube 隧道)。后端服务不应该暴露在集群之外,因此我没有设置任何类型的服务(默认是 ClusterIP,仅在集群内可用)。现在我想从前端向后端进行调用。当我打字时

kubectl exec -it FRONT_END_POD_NAME -- /bin/sh
Run Code Online (Sandbox Code Playgroud)

然后使用curl我可以获得我期望的所有资源,但是,当我打开我的网站应用程序时,该应用程序获取与我在curl中输入的资源相同的资源,控制台中出现错误net::ERR_NAME_NOT_RESOLVED。即使我能够从前端卷曲它并且一切正常,您知道为什么会发生这种情况吗?如何修复它?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
  labels:
    app: backend
spec:
  selector:
    matchLabels:
      app: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: backend
          image: ajris/site_backend:pr-kubernetes
          ports:
            - containerPort: 8080
====
apiVersion: v1
kind: Service
metadata:
  name: backend-service
  labels:
    app: backend
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8080
===
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
  labels:
    app: frontend
spec:
  selector:
    matchLabels:
      app: frontend
  replicas: 1
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: frontend
          image: ajris/site_frontend:travis-66
          ports:
            - containerPort: 3000
          imagePullPolicy: Always
===
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
  labels:
    app: frontend
spec:
  ports:
    - protocol: TCP
      port: 3001
      targetPort: 3000
  selector:
    app: frontend
  type: LoadBalancer

Run Code Online (Sandbox Code Playgroud)

Syz*_*ygy 8

由于这还没有部分答案,不妨让其他人将来更容易找到它。提问者在问题的评论中自己回答了。

本质上,这里发生的事情是,React 不在前端 pod 上执行,而是在客户端的浏览器中执行。因此,如果客户端无法访问后端 Pod,则尝试联系后端 Pod 的任何请求都将失败,例如具有 ClusterIP 服务的后端 Pod 的情况。

为了解决这个问题,后端服务器需要能够从客户端访问。这可以通过将与后端 Pod 关联的服务更改为 LoadBalancer 或使用入口来完成。