【发布时间】:2023-01-23 23:39:06
【问题描述】:
我需要做什么才能让我的本地浏览器访问并向在我机器上本地运行的 Minikube 实例中运行的 Web 服务请求资源?
我在尝试 kubectl port-forward 时收到 Connection refused。
我的工作流程是:
- 正在创建带有 Web 服务的 Dockerfile
- 在docker中启动minikube
- 构建 docker 镜像
- 将图像本地导入到 Minikube
- 创建了一个包含一个容器和一个 NodePort 服务的部署
- 应用部署/服务
- 运行 kubectl port-forward(希望将请求转发到我的容器)
- 打开浏览器到 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.yamlkubectl 端口转发(第 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 中运行。
- Docker 文件:
【问题讨论】:
-
您可以尝试使用其他端口,例如 8080 或 3000 吗?通常不建议使用 80,因为它被认为是特权端口。
标签: docker kubernetes minikube portforwarding kubernetes-deployment