Vanilla JS ERR_NAME_NOT_RESOLVED 是一个 minikube 集群

Vanilla JS ERR_NAME_NOT_RESOLVED on minikube cluster

我在本地 minikube 集群上有一个最小的 Web 应用程序 运行ning。 后端在 /be/test/hi 处公开了一个 API 并且服务名称也是。 当我从前端向后端发送 GET 请求时,我得到:

main.js:15 GET http://be/be/test/hi net::ERR_NAME_NOT_RESOLVED

如果我从前端 POD 运行 nslookup be 获得正确的 dns 解析,并且 运行ning curl be/be/test/hi 我从后端得到了正确的响应(一个简单的 'Hello world' 字符串)

我错过了什么?

backend.yaml

apiVersion: v1
kind: Service
metadata:
  name: be
spec:
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: be
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: be
spec:
  replicas: 1
  selector:
    matchLabels:
      app: be
  template:
    metadata:
      labels:
        app: be
    spec:
      containers:
      - name: be
        image: kubebe
        imagePullPolicy: Never
        ports:
          - containerPort: 8080

frontend.yaml

apiVersion: v1
kind: Service
metadata:
  name: fe
spec:
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: fe
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fe
  template:
    metadata:
      labels:
        app: fe
    spec:
      containers:
      - name: fe
        image: kubefe
        imagePullPolicy: Never
        ports:
          - containerPort: 8080

main.js

const URL="http://be/be/test/hi"

  function httpGetAsync(){
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
            console.log(xmlHttp.responseText);
    }
    xmlHttp.open("GET", URL, true); 
    xmlHttp.send(null);
}

前端 Dockerfile(kubefe 镜像):

FROM centos/httpd-24-centos7:2.4
RUN mkdir -p /var/www/html/fe
COPY ./index.html ./main.js /var/www/html/fe/

编辑:我已经解决了我的问题,但我认为实际问题仍未得到解答。

为了解决这个问题,我简单地从 url 中删除了协议和主机,并在 /etc/httpd/conf.d/default-site.conf

中设置了代理规则

默认-site.conf

<VirtualHost *:8080> 
  ProxyPreserveHost Off
  ProxyRequests Off
  ProxyPass /be/ http://be/be/
</VirtualHost> 

您的前端代码 (javascript) 正在您的浏览器中执行,而不是在 kubernetes 集群 (nginx pod) 中执行

这里有 3 个选项,

  1. 为您的前端创建一个 NodePort 服务
  2. 依赖kubeproxy做端口转发
  3. 创建入口