docker - 如何对在 Docker Desktop (Kubernetes) 中运行的 pod 进行 HTTP 调用
问题描述
因此,当我尝试从设置为 Ingress 的前端拨打电话时,我遇到了 ERR_CONNECTION_REFUSED 的问题。我的后端快速服务器在端口 5000 上运行,并设置为 ClusterIP。我已经阅读了 docker for mac local cluster ip is the same as localhost 所以这就是我设置它的方式。
我有信心我有正确的文件和网络。我只是不确定将 API 调用指向后端的位置。它也是本地主机吗?我将包括以下文件。
前端部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-deployment
spec:
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend-container
image: mrich6347/vue-frontend:5
resources:
requests:
memory: "32Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 8080
前端服务
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
type: ClusterIP
selector:
app: frontend
ports:
- port: 8080
targetPort: 8080
快速服务器部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: express-server-deployment
spec:
selector:
matchLabels:
app: express-server
template:
metadata:
labels:
app: express-server
spec:
containers:
- name: express-server
image: mrich6347/express-server:5
resources:
requests:
memory: "32Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 5000
快递服务器服务
apiVersion: v1
kind: Service
metadata:
name: express-server-service
spec:
type: ClusterIP
selector:
app: express-server
ports:
- port: 5000
targetPort: 5000
这是我来自 vue 的 api 调用
export default {
name: 'app',
components: {
HelloWorld
},
created: async () => {
console.log("SERVER IS UP")
let res = await axios.get("http://127.0.0.1:5000/test");
console.log(res)
}
}
最后是我的简单快递 API
const app = require('express')();
var cors = require('cors')
app.use(cors())
app.get("/test", (req, res) => {
res.send("WORKING!")
})
app.listen(5000, () => {
console.log("Server is up on 5000")
})
入口控制器
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traffic-router
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: frontend-service
servicePort: 8080
解决方案
我已经阅读了 docker for mac local cluster ip is the same as localhost 所以这就是我设置它的方式
Docker for Mac Kubernetes 中的服务不能直接用于您的桌面。集群 IP 有很多,而且只有一个localhost
,所以如果它们都暴露出来,你很快就会在 localhost 上遇到端口冲突。
Docker for Mac 将自动公开类型为LoadBalancer
on 的服务localhost
。这个概念类似于跑步docker run -p 80:30843 ...
。请参阅EXTERNAL-IP
此入口控制器上的 。
$ kubectl get service m-nginx-nginx-ingress-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
m-nginx-nginx-ingress-controller LoadBalancer 10.108.201.47 localhost 80:30843/TCP,443:31419/TCP 22h
$ curl http://localhost:80
default backend - 404
听起来您已经有一个用于前端服务的入口控制器,因此重用该入口并将另一个主机名或 URI 路径映射到后端服务是最简单的。
推荐阅读
- c# - 任务执行代码 2 次而不是 5 次
- python - 计算函数签名中的位置参数
- python - 来自搜索树算法的令人困惑的语法
- javascript - 如何在导出默认值中访问变量?
- angular - 路线数据中的 Angular 8 路线参数
- java - spring-boot 和 shedlock - 如何追踪依赖冲突?
- excel - 条件格式 - 负值不能作为正值
- cordova - 删除splashscreen cordova插件后,ionic 4 splashscreen仍然显示白屏
- visual-studio-code - 没有应用程序连接到 REPL 服务器
- azure - 在 azure kudu 中安装 python talib 库