kubernetes - NodePort 类型服务在集群外部不可访问

标签 kubernetes minikube docker-for-windows

我正在尝试在 Windows 计算机中使用 minikube 设置本地集群。按照 kubernetes.io 中的一些教程,我得到了以下集群 list :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: external-nginx-deployment
  labels:
   app: external-nginx
spec: 
  selector: 
    matchLabels: 
      app: external-nginx
  replicas: 2 
  template: 
    metadata: 
      labels:
        app: external-nginx
    spec: 
      containers: 
      - name: external-nginx
        image: nginx 
        ports: 
        - containerPort: 80 
---
apiVersion: v1
kind: Service 
metadata: 
  name: expose-nginx 
  labels: 
   service: expose-nginx
spec: 
  type: NodePort 
  selector: 
    app: external-nginx 
  ports: 
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32000

如果我做对了,这应该创建一个带有 nginx 实例的 pod,并将其暴露给端口 32000 的主机。 但是,当我运行 curl http://$(minikube ip):32000 时,出现连接被拒绝错误。

我通过 kubectl exec svc/expose-nginx -it bash 在服务 expose-nginx 中运行 bash,从那里我能够访问外部-nginx pods 正常,这让我相信这不是集群内的问题。

我还尝试将服务类型更改为 LoadBalancer 并启用 minikube 隧道,但得到了相同的结果。

我有什么遗漏吗?

最佳答案

默认情况下,minikube 几乎总是使用 docker 驱动程序来创建 minikube VM。在主机系统中,它看起来像一个用于虚拟机的大型 docker 容器,其中其他 kubernetes 组件也作为容器运行。根据测试,服务的 NodePort 通常不起作用,因为它应该像访问通过 NodePort 公开的服务一样,应该在 minikube_IP:NodePort 地址上工作.

解决方案是:

  • 供本地测试使用 kubectl port-forward将服务公开给本地计算机(OP 这样做了)

  • 使用minikube service命令会将服务公开给主机。工作方式与 kubectl port-forward 非常相似。

  • 使用正确的虚拟机代替 docker 驱动程序,该虚拟机将获得自己的 IP 地址(VirtualBoxhyperv 驱动程序 - 取决于系统)。 Reference .

  • (与 minikube 无关)使用 Docker Desktop for Windows 中的内置功能 kubernetes。我已经tested it服务类型应为 LoadBalancer - 它将暴露给 localhost 上的主机。

关于kubernetes - NodePort 类型服务在集群外部不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70276205/

相关文章:

kubernetes - 如何禁用 Kubernetes 日志到磁盘文件?

spring-boot - 将 eureka 与 kubernetes 问题集成

kubernetes - Liveness/Readiness 探针如何与 Pod 通信?

docker - 使用minikube从本地Docker注册表中提取镜像(带有自签名CA证书)

kubernetes - kubernetes (minikube) 中的 Fabric v2.0 - 错误对等 channel 加入 - 由于 pod 名称导致的 TLS 问题

docker-for-windows - 在 Docker-compose 中使用现有的文件共享/卷和 Docker for Windows WSL2

docker - 基于 pod 内文件的 Kubernetes 日志记录

docker - 尝试在本地 PC 中启用 RBAC 时 Minikube 运行异常

docker - Windows Server 2016 上的容器到容器访问 Windows 容器问题

dockerfile - 通过 windows docker 文件设置 git