【发布时间】:2022-01-13 23:55:42
【问题描述】:
我正在尝试将 Flask python API 部署到 Kubernetes (EKS)。我已经设置了 Dockerfile,但是发生了一些奇怪的事情。
Dockerfile:
FROM python:3.8
WORKDIR /app
COPY . /app
RUN pip3 install -r requirements.txt
EXPOSE 43594
ENTRYPOINT ["python3"]
CMD ["app.py"]
我构建运行 docker build -t store-api . 的映像。
当我尝试运行容器并到达端点时,我得到socker hung up。但是,如果我运行图像做
docker run -d -p 43594:43594 store-api
我可以通过响应成功到达端点。
我的直觉是端口映射。
现在说了这么多,在 Kubernetes pod 中运行映像,我无法从端点取回任何东西并获得 socket hung up。
我的问题是,如何将端口映射显式添加到我的 Kubernetes 部署/服务?
部分Deployment.yaml:
spec:
containers:
- image: store-api
name: store-api
ports:
- containerPort: 43594
resources: {}
volumeMounts:
- mountPath: /usr/local/bin/wait-for-it.sh
name: store-api-claim0
imagePullPolicy: Always
Service.yaml:
spec:
type: LoadBalancer
ports:
- port: 43594
protocol: TCP
targetPort: 43594
selector:
app: store-api
status:
loadBalancer: {}
如果我使用kubectl port-forward deployment/store-api 43594:43594 进行端口转发并将请求发布到localhost:43594/,它可以正常工作。
【问题讨论】:
-
在 Kubernetes 案例中您尝试连接的 URL 是什么? Pod 是否真的启动了(
kubectl logs是否显示 Flask 应用程序的输出)? Service 是否正确绑定到 Pod(kubectl describe service ...对Endpoints:显示什么)? -
@DavidMaze 感谢您的回复。是的,pod 像往常一样启动,日志显示它正在侦听我分配的端口。描述服务时,我得到一个
LoadBalancer ingressURL,但对于端点我有<none>。 -
如果我使用
kubectl port-forward deployment/store-api 43594:43594进行端口转发并将请求发布到localhost:43594/它工作正常。 -
socket挂了是nodejs错误! kuber 入口控制器和其他 kuber 组件都是用 go 编写的,你的代码是 python!怎么来的?!
-
如果服务描述为
Endpoints: <none>,则服务的selector:与部署的template: { metadata: { labels: } }不匹配。仔细检查。
标签: docker kubernetes