使用NodePort从本地浏览器访问kubernetes pod中的Web服务导致连接被拒绝

fdbelqdn  于 2023-01-25  发布在  Kubernetes
关注(0)|答案(1)|浏览(286)

我需要做些什么才能让我的本地浏览器访问并向在我的机器上本地运行的Minikube示例中运行的Web服务请求资源?
我在尝试kubectl port-forward时得到了Connection refused
我的工作流程是:
1.正在创建启用Web服务的停靠文件
1.在Docker中启动minikube
1.构建Docker映像
1.将图像本地导入Minikube
1.创建了具有一个容器和一个NodePort服务的部署
1.应用部署/服务
1.运行kubectl port-forward(希望将请求转发到我的容器)
1.打开浏览器访问www.example.com 127.0.0.1:31000

端口配置摘要

  • 停靠文件:
  • 暴露量:80
  • 葡萄膜炎:80
  • 部署
  • 节点端口服务:
  • 端口:80
  • 目标端口:80
  • 节点端口:31000
  • Kubectl指挥部:八千五百分三万一千分
  • 浏览器:127.0.0.1:8500

设置并运行

开发文档文件(步骤1)

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)

    • 寻找Pod**
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中从Docker组成工作。我可以从日志(Minikube Jmeter 板)中看到Pod在Minikube中启动并运行。

3pvhb19x

3pvhb19x1#

你搞混了:

  • Pod正在侦听端口80
  • NodePort服务正在侦听节点上的端口31000,但其基础ClusterIP服务也在侦听端口80。
  • 您正在尝试端口转发到Pod上的端口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。

相关问题