无法让 kubectl 进入 minikube 中的 运行 flask 应用程序
unable to get kubectl to run flask app in minikube
我一直在研究 Whosebug,但无法弄清楚为什么我的 kubectl 无法连接到 Kubernetes 文档中的简单烧瓶示例。这是我的文件:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello world from python"
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0")
我的docker文件:
FROM python:3.9
RUN mkdir myapp
RUN cd myapp
COPY hello_world.py .
COPY requirements.txt .
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python3", "hello_world.py"]
我的 YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world-deployment
labels:
app: hello
spec:
replicas: 4
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello-world-container
image: mrajancsr/playground:1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: hello-world-service
spec:
selector:
app: hello
ports:
- protocol: TCP
port: 5000
targetPort: 5000
现在,当我 运行 以下内容时:
kubectl get pods
我明白了
hello-world-deployment-67d4d6c95c-2cpvx 1/1 Running 0 12m
hello-world-deployment-67d4d6c95c-dm78v 1/1 Running 0 12m
hello-world-deployment-67d4d6c95c-f62w7 1/1 Running 0 10m
hello-world-deployment-67d4d6c95c-xlr7w 1/1 Running 0 12m
然后下一个:
kubectl get svc
我明白了...
hello-world-service ClusterIP 10.97.58.104 <none> 5000/TCP 12h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d13h
然后我输入:
kubectl exec -it hello-world-deployment-67d4d6c95c-2cpvx bash
curl localhost:5000
我收到消息:
Hello world from python
这也有效:
docker run -p 5001:5000 hello-python
我无法使用 5000:5000,因为它出于某种原因已经被绑定了。
但我无法通过 kubectl 连接它:
curl 10.97.58.104:5000
然后我读到 kubectl 不工作的原因是因为我可能需要推送我的 docker 图像并让它拉取?所以我创建了一个 docker 存储库并推送了我的图像,因此你可以看到标签为 mrajancsr/playground:1
因为这是我从我的私人存储库中提取的并且它仍然无法正常工作。
kubectl
告诉您您的服务 hello-world-service
的 ClusterIP
为 10.97.58.104
。
您的服务的 IP 是在不同网络上运行的集群的内部 IP,您无法直接从主机网络对其进行寻址。
要通过服务直接访问您的 pod,您可以使用 kubectl port-forward svc/hello-world-service <host-port>:<service-port>
,在您的情况下,服务端口是 5000
,host-port
可以是您希望的任何可用端口。
如果您不能将端口 5000 分配为主机端口,您的应用程序实例可能是 运行。
所以总结一下:
kubectl port-forward svc/hello-world-service 5001:5000
curl http://localhost:5001
Hello world from python
我一直在研究 Whosebug,但无法弄清楚为什么我的 kubectl 无法连接到 Kubernetes 文档中的简单烧瓶示例。这是我的文件:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello world from python"
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0")
我的docker文件:
FROM python:3.9
RUN mkdir myapp
RUN cd myapp
COPY hello_world.py .
COPY requirements.txt .
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python3", "hello_world.py"]
我的 YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world-deployment
labels:
app: hello
spec:
replicas: 4
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello-world-container
image: mrajancsr/playground:1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: hello-world-service
spec:
selector:
app: hello
ports:
- protocol: TCP
port: 5000
targetPort: 5000
现在,当我 运行 以下内容时:
kubectl get pods
我明白了
hello-world-deployment-67d4d6c95c-2cpvx 1/1 Running 0 12m
hello-world-deployment-67d4d6c95c-dm78v 1/1 Running 0 12m
hello-world-deployment-67d4d6c95c-f62w7 1/1 Running 0 10m
hello-world-deployment-67d4d6c95c-xlr7w 1/1 Running 0 12m
然后下一个:
kubectl get svc
我明白了...
hello-world-service ClusterIP 10.97.58.104 <none> 5000/TCP 12h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d13h
然后我输入:
kubectl exec -it hello-world-deployment-67d4d6c95c-2cpvx bash
curl localhost:5000
我收到消息:
Hello world from python
这也有效:
docker run -p 5001:5000 hello-python
我无法使用 5000:5000,因为它出于某种原因已经被绑定了。
但我无法通过 kubectl 连接它:
curl 10.97.58.104:5000
然后我读到 kubectl 不工作的原因是因为我可能需要推送我的 docker 图像并让它拉取?所以我创建了一个 docker 存储库并推送了我的图像,因此你可以看到标签为 mrajancsr/playground:1
因为这是我从我的私人存储库中提取的并且它仍然无法正常工作。
kubectl
告诉您您的服务 hello-world-service
的 ClusterIP
为 10.97.58.104
。
您的服务的 IP 是在不同网络上运行的集群的内部 IP,您无法直接从主机网络对其进行寻址。
要通过服务直接访问您的 pod,您可以使用 kubectl port-forward svc/hello-world-service <host-port>:<service-port>
,在您的情况下,服务端口是 5000
,host-port
可以是您希望的任何可用端口。
如果您不能将端口 5000 分配为主机端口,您的应用程序实例可能是 运行。
所以总结一下:
kubectl port-forward svc/hello-world-service 5001:5000
curl http://localhost:5001
Hello world from python