【问题标题】:Why Kubernetes services not working properly on Minikube? (connection refused)为什么 Kubernetes 服务无法在 Minikube 上正常运行? (拒绝连接)
【发布时间】: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 &lt;service_name&gt; | grep Endpoints
  • @ArnaudDevelay 它打印出:“端点:172.17.0.4:5000”
  • @ArnaudDevelay 这是尝试的第一件事。我使用“minikube 服务 来获取正确的 IP:30000,如果我尝试去那里,我会得到”“连接被拒绝”......相反,我应该得到 swagger 网页。如果尝试从邮递员

标签: docker kubernetes service minikube connection-refused


【解决方案1】:

没有找到解决问题的方法。 我在我的 Mac 上使用 BigSur 在 Vmware Fusion 上运行带有 Minikube 的 Kubernetes。

我发现 SAME EXACT 部署可以在安装了 ubuntu 的机器上运行,或者在使用 VirtualBox 制作的虚拟机上运行。

实际上似乎这是一个已知问题:

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2018-10-19
    • 2019-06-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2016-05-02
    • 2021-05-25
    相关资源
    最近更新 更多