库伯内斯 ERR_NAME_NOT_RESOLVED
Kubernetes ERR_NAME_NOT_RESOLVED
我有两个部署,一个用于后端,一个用于前端,还有两个服务。前端服务设置为 LoadBalancer 并按预期公开(使用 minikube 隧道)。后端服务不应该暴露在集群之外,因此我没有设置任何类型的服务(默认是 ClusterIP,它只在集群内可用)。现在我想从前端到后端进行调用。当我输入
kubectl exec -it FRONT_END_POD_NAME -- /bin/sh
然后使用 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
由于这还没有部分答案,不妨让其他人将来更容易找到它。提问的人在问题的评论里自己回答了
基本上这里发生的事情是,React 不在前端 pod 上执行,而是在客户端的浏览器中执行。因此,如果客户端无法访问后端 pod,任何尝试联系后端 pod 的请求都将失败,例如具有 ClusterIP 服务的后端 pod 就是这种情况。
要解决这个问题,后端服务器需要可以从客户端访问。这可以通过将与后端 pod 关联的服务更改为 LoadBalancer 或使用入口来完成。
我有两个部署,一个用于后端,一个用于前端,还有两个服务。前端服务设置为 LoadBalancer 并按预期公开(使用 minikube 隧道)。后端服务不应该暴露在集群之外,因此我没有设置任何类型的服务(默认是 ClusterIP,它只在集群内可用)。现在我想从前端到后端进行调用。当我输入
kubectl exec -it FRONT_END_POD_NAME -- /bin/sh
然后使用 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
由于这还没有部分答案,不妨让其他人将来更容易找到它。提问的人在问题的评论里自己回答了
基本上这里发生的事情是,React 不在前端 pod 上执行,而是在客户端的浏览器中执行。因此,如果客户端无法访问后端 pod,任何尝试联系后端 pod 的请求都将失败,例如具有 ClusterIP 服务的后端 pod 就是这种情况。
要解决这个问题,后端服务器需要可以从客户端访问。这可以通过将与后端 pod 关联的服务更改为 LoadBalancer 或使用入口来完成。