无法让 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-serviceClusterIP10.97.58.104

您的服务的 IP 是在不同网络上运行的集群的内部 IP,您无法直接从主机网络对其进行寻址。

要通过服务直接访问您的 pod,您可以使用 kubectl port-forward svc/hello-world-service <host-port>:<service-port>,在您的情况下,服务端口是 5000host-port 可以是您希望的任何可用端口。

如果您不能将端口 5000 分配为主机端口,您的应用程序实例可能是 运行。

所以总结一下:

kubectl port-forward svc/hello-world-service 5001:5000
curl http://localhost:5001
Hello world from python