【问题标题】:Access a web service in kubernetes pod from local browser using NodePort yields Connection refused使用 NodePort 从本地浏览器访问 kubernetes pod 中的 Web 服务会产生连接被拒绝
【发布时间】:2023-01-23 23:39:06
【问题描述】:

我需要做什么才能让我的本地浏览器访问并向在我机器上本地运行的 Minikube 实例中运行的 Web 服务请求资源?

我在尝试 kubectl port-forward 时收到 Connection refused

我的工作流程是:

  1. 正在创建带有 Web 服务的 Dockerfile
  2. 在docker中启动minikube
  3. 构建 docker 镜像
  4. 将图像本地导入到 Minikube
  5. 创建了一个包含一个容器和一个 NodePort 服务的部署
  6. 应用部署/服务
  7. 运行 kubectl port-forward(希望将请求转发到我的容器)
  8. 打开浏览器到 127.0.0.1:31000

    端口配置摘要

    • Docker 文件:
      • 公开:80
      • 独角兽:80
    • 部署
      • 节点端口服务:
        • 端口:80
        • 目标端口:80
        • 节点端口:31000
    • Kubectl 命令:8500:31000
    • 浏览器:127.0.0.1:8500

    设置并运行

    dev.docker 文件(第一步)

    FROM python:3.11-buster # Some Debian Python image...  I built my own
    
    COPY ../sources/api/ /app/
    RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
    
    ENV PYTHONPATH=/app/
    
    EXPOSE 80
    
    CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
    

    构建顺序(步骤 2 至 4)

    # 2 - start minikube
    minikube start --bootstrapper=kubeadm --vm-driver=docker
    minikube docker-env
    
    ## 3 - build image
    docker build -f ../../service1/deploy/dev.dockerfile ../../service1 -t acme-app.service1:latest 
    
    ## 4 - load image into minikube
    minikube image load acme-app.service1:latest
    

    部署(第 5 步和第 6 步)

    部署.yaml

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: acme-service-1-deployment
      namespace: acme-app-dev
      labels:
        app: service-1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: service-1
      template:
        metadata:
          labels:
            app: service-1
        spec:
          containers:
            - name: service1-container
              image: docker.io/library/acme-app.service1:latest
              imagePullPolicy: Never
              ports:
              - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: service-1-service
      namespace: acme-app-dev
    spec:
      type: NodePort
      selector:
        app: service-1
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
        nodePort: 31000
    

    部署

    kubectl apply -f deployment.yaml
    

    kubectl 端口转发(第 7 步)

    寻找吊舱

    kubectl get pods -n acme-app-dev
    NAME                                         READY   STATUS    RESTARTS   AGE
    acme-service-1-deployment-76748d7ff6-llcsr   1/1     Running   0          11s
    

    端口转发到 pod

    port-forward acme-service-1-deployment-76748d7ff6-llcsr 8500:31000 -n acme-app-dev
    Forwarding from 127.0.0.1:8500 -> 31000
    Forwarding from [::1]:8500 -> 31000
    

    在浏览器中测试(第 8 步)

    打开最喜欢的浏览器并导航到 127.0.0.1:31000。

    运行端口转发的控制台现在输出:

    E0123 14:54:16.208010   25932 portforward.go:406] an error occurred forwarding 8500 -> 31000: error forwarding port 31000 to pod d4c0fa6cb16ce02335a05cad904fbf2ab7818e2073d7c7ded8ad05f193aa37e7, uid : exit status 1: 2023/01/23 14:54:16 socat[39370] E connect(5, AF=2 127.0.0.1:31000, 16): Connection refused
    E0123 14:54:16.213268   25932 portforward.go:234] lost connection to pod
    

    我看了什么?

    我试过查看 kubernetes 网站上的文档以及此处的问题(是的,有类似的)。这非常相似 - 虽然没有明显的答案并且看起来仍然是一个问题。我在这里看不到我的问题的解决方案。

    NodePort exposed Port connection refused

    我在 Windows 上运行 Minikube,我刚刚开始 kubernetes 之旅。

    图像本身在 docker compose 中工作。我可以从日志(minikube 仪表板)中看到 pod 已启动并在 minikube 中运行。

【问题讨论】:

  • 您可以尝试使用其他端口,例如 8080 或 3000 吗?通常不建议使用 80,因为它被认为是特权端口。

标签: docker kubernetes minikube portforwarding kubernetes-deployment


【解决方案1】:

你的电线交叉了:

  • pod 正在侦听端口 80
  • NodePort 服务正在侦听节点上的端口 31000,但其底层 ClusterIP 服务也在侦听端口 80。
  • 您正在尝试将端口转发到端口 31000.这是行不通的。

请改为调用以下方法之一:

  • kubectl port-forward -n acme-app-dev deploy/acme-service-1-deployment 8500:80
  • kubectl port-forward -n acme-app-dev service/service-1-service 8500:80
  • 或使用minikube service -n acme-app-dev service-1-service并使用提供的 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2020-11-06
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多