【发布时间】:2021-09-09 22:43:03
【问题描述】:
我正在通过 Minikube 学习 Kubernetes。 我的演示包含一个 Flask API 和一个 MySQL 数据库。 我制作了所有 .yaml 文件,但是部署服务发生了一些奇怪的事情......
我无法在外部与 API 通信(Postman、Curl、浏览器都不能...)
“外部”是指“来自集群外部”(在同一台机器上,例如:来自浏览器、邮递员...)
这是 API 的部署+服务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-dip-api-deployment
labels:
app: api-dip-api
spec:
replicas: 1
selector:
matchLabels:
app: api-dip-api
template:
metadata:
labels:
app: api-dip-api
spec:
containers:
- name: api-dip-api
image: myregistry.com
ports:
- containerPort: 5000
env:
- name: DATABASE_USER
valueFrom:
secretKeyRef:
name: api-secret
key: api-db-user
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: api-secret
key: api-db-password
- name: DATABASE_HOST
valueFrom:
configMapKeyRef:
name: api-configmap
key: api-database-url
- name: DATABASE_NAME
valueFrom:
configMapKeyRef:
name: api-configmap
key: api-database-name
- name: DATABASE_PORT
valueFrom:
configMapKeyRef:
name: api-configmap
key: api-database-port
imagePullSecrets:
- name: regcred
---
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: api-dip-api
ports:
- port: 5000
protocol: TCP
targetPort: 5000
nodePort: 30000
type: LoadBalancer
Dockerfile API:
FROM python:latest
# create a dir for app
WORKDIR /app
# intall dependecies
COPY requirements.txt .
RUN pip install -r requirements.txt
# source code
COPY /app .
EXPOSE 5000
# run the application
CMD ["python", "main.py"]
由于我使用的是 Minikube,因此服务的正确 IP 显示为
minikube service <service_name>
我已经尝试过查看 minikube 上下文,正如另一篇文章中所建议的那样,但它显示如下:
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* minikube minikube minikube default
应该没问题。
我现在不知道该尝试什么...我认为端口映射正确。
【问题讨论】:
-
在 Flask 应用程序中,
app.run()行是什么样的? Deploying a minimal flask app in docker - server connection issues 适用于 Docker 和 Kubernetes 环境。 -
@DavidMaze 我这样写那行:app.run(host='0.0.0.0', port=5000)
-
您能否检查您的服务是否能够找到一些端点?为此,请使用以下命令:
kubectl describe service <service_name> | grep Endpoints -
@ArnaudDevelay 它打印出:“端点:172.17.0.4:5000”
-
@ArnaudDevelay 这是尝试的第一件事。我使用“minikube 服务
来获取正确的 IP:30000,如果我尝试去那里,我会得到”“连接被拒绝”......相反,我应该得到 swagger 网页。如果尝试从邮递员
标签: docker kubernetes service minikube connection-refused