docker - azure-aks docker 容器 python-django url 不起作用
问题描述
我创建了 Docker,它具有在 8000 端口上运行的 debian + python-django。但是在部署到 azure-aks 后,url 路径在 8000 端口下不起作用。在下面保留重要的细节。
步骤1:
Dockerfile :
EXPOSE 8000
RUN /usr/local/bin/python3 manage.py migrate
CMD [ "python3", "manage.py", "runserver", "0.0.0.0:8000" ]
第 2 步:构建 docker 映像后,将其推送到 azure 注册表。
第 3 步: myfile.yaml :这是将 azure 注册表文件部署到 aks 集群中。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myops
spec:
replicas: 1
selector:
matchLabels:
app: myops
template:
metadata:
labels:
app: myops
spec:
containers:
- name: myops
image: quantumregistry.azurecr.io/myops:v1.0
ports:
- containerPort: 8000
---
# [START service]
apiVersion: v1
kind: Service
metadata:
name: myops-python
spec:
type: LoadBalancer
ports:
- port: 8000
targetPort: 8888
selector:
app: myops
# [END service]
部署到 aks:kubectl apply -f myops.yaml
第四步:检查服务
kubectl get service myops-python --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myops-python LoadBalancer <cluster-ip> <external-ip> 8000:30778/TCP 37m
注意:我已屏蔽 IP 以不向公众公开。
第 5 步:我看到容器运行正常
kubectl get pods
NAME READY STATUS RESTARTS AGE
myops-5bbd459745-cz2vc 1/1 Running 0 19m
第 6 步:我看到容器日志,它显示 python 正在主机 0.0.0.0:8000 端口下运行。
kubectl logs -f myops-5bbd459745-cz2vc
Watching for file changes with StatReloader
Performing system checks...
WARNING:param.main: pandas could not register all extension types imports failed with the following error: cannot import name 'ABCIndexClass' from 'pandas.core.dtypes.generic' (/usr/local/lib/python3.9/site-packages/pandas/core/dtypes/generic.py)
System check identified no issues (0 silenced).
September 19, 2021 - 06:47:57
Django version 3.2.5, using settings 'myops_project.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
问题是当我在浏览器 http://:8000/myops_app 中打开它时,它不工作并且超时。
解决方案
该服务myops-python
设置为在端口 8000 上接收请求,但随后它将请求发送到目标端口 8888 上的 Pod。
ports: - port: 8000 targetPort: 8888
myops
然而, Pod 中的容器myops
并没有监听 8888 端口。而是监听了 8000 端口。
Dockerfile:
EXPOSE 8000 RUN /usr/local/bin/python3 manage.py migrate CMD [ "python3", "manage.py", "runserver", "0.0.0.0:8000" ]
请设置spec.ports[0].targetPort
为8000
手动或targetPort
从spec.ports[0]
服务中删除myops-python
。默认情况下,为方便起见,targetPort
设置为与字段相同的值port
。有关详细信息,请参阅定义服务。
提示:您可以使用它kubectl edit service <service-name> -n <namepsace>
来编辑您的服务清单。
推荐阅读
- mysql - 如何获取订单计数 - SQL
- arrays - Ruby - 给出了一个整数数组。我必须找到具有最大乘积的相邻元素对
- android - 从主要活动刷新选项卡活动中的列表视图
- android - Flutter 使用 ProGuard 和 Firebase Auth 构建崩溃
- python - 如何将 wav 文件转换为 JSON 文件
- mysql - mysql删除并保留在其他表中使用的一个
- image-processing - 识别数字的图像处理
- javascript - 将 Javascript 对象转换为 JSON 字符串
- html - nil:NilClass (RoR) 的未定义方法“each”
- python - Tensorflow - ImportError:DLL 加载失败,错误代码为 -1073741795