Minikube Ingress 陷入 "Scheduled for sync"

Minikube Ingress Stuck In "Scheduled for sync"

总结

尝试使用 minikube minikube-test-ifs.com 映射到我的部署。

我做了什么

minikube start
minikube addons enable ingress
kubectl apply -f <path-to-yaml-below>
kubectl get ingress
<ip> minikube-test-ifs.com
形式将入口 IP 映射添加到 /etc/hosts 文件 我转到 chrome 并输入 minikube-test-ifs.com 但它没有加载。
我收到“无法访问网站,响应时间太长”

yaml 文件

注意 - 都在默认命名空间中,我不知道这是否有问题。
这个 yaml 中可能有问题,但我检查并双重检查并没有发现潜在的错误......除非我遗漏了什么

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: nginx
        ports:
          - name: client
            containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: test-service
spec:
  selector:
    app: test
  ports:
    - name: client
      protocol: TCP
      port: 3000
      targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress  
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: minikube-test-ifs.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: test-service
            port:
              number: 3000

OS

Windows 10

其他东西

我检查了 但我已经添加到我的 /etc/hosts 并且我也尝试删除 spec.host 但这仍然不起作用...
还检查了 Minikube Ingress (Nginx Controller) not working 但那个人已经加载了他的页面,所以据我所知与我无关

有什么想法吗?

我看了很多关于这方面的 Youtube 教程,我完全按照每件事来做。我对此还是个新手,但我看不出它不起作用的原因?

编辑

当我 运行 kubectl describe ingress <ingress> 我得到:

  Type    Reason  Age               From                      Message
  ----    ------  ----              ----                      -------
  Normal  Sync    8s (x5 over 19m)  nginx-ingress-controller  Scheduled for sync

如何让它同步?是不是有问题,因为它已经“Scheduled for sync”了很长时间

概览

  • 使用 docker 驱动程序的 Minikube Ingress 插件仅适用于 linux
  • Docker for Windows 使用 Hyper-V,因此,如果 Docker 守护程序是 运行ning,您将 无法 使用 VM 平台,例如 VirtualBox 或 VMware
  • 如果您有 Windows 专业版、企业版或教育版,如果您使用 Hyper-V 作为您的 minikube 集群(请参阅解决方案 1),您可能能够让它正常工作
  • 如果您不想升级 Windows,您可以在 Linux 虚拟机上打开一个 minikube 集群,然后 运行 在那里进行所有测试。这将要求您配置一些 Windows VM 设置,以使您的 VM 达到 运行(请参阅解决方案 2)。请注意,您只能 运行 Docker 或 VM 平台(Hyper-V 除外),但 不能两者都 (请参阅第二个问题了解为什么会这样)。

问题

对于那些和我情况相同的人,问题在于 minikube ingress 插件仅适用于 Linux OS when using docker 驱动程序(感谢@riovall 向我展示了这个 documentation)。

第二题

所以解决方法应该很简单吧?只需使用不同的驱动程序,它应该可以工作。这里的问题是,当 Docker 安装在 Windows 上时,它使用内置的 Hyper-V 虚拟化技术,默认情况下似乎禁用所有其他虚拟化技术。

我测试了这个假设,似乎是这样。当 Docker 守护进程处于 运行ning 时,我无法启动我拥有的任何虚拟机。例如,当我尝试 运行 我的 VM 在 VirtualBox 和 VMWare 上时出现错误。

此外,当我尝试使用 virtualbox 驱动程序启动 minikube 集群时,它卡在“正在引导内核”,然后出现 This computer doesn't have VT-X/AMD-v enabled 错误。这个错误是错误的,因为我确实启用了 VT-X(我检查了我的 BIOS)。这很可能是因为当启用 Hyper-V 时,所有其他类型的虚拟化技术 似乎 都被禁用。

对于我的个人计算机,当我搜索“打开或关闭 windows 功能”时,Docker 守护程序启用了“虚拟机平台”,然后要求我重新启动计算机。这发生在我安装 Docker 时。作为测试,我关闭了“虚拟机平台”和“Windows Hypervsor 平台”功能并重新启动了我的计算机。

当我这样做时发生了什么? Docker 守护程序停止了 运行ning,我无法再使用 docker,但是,我能够打开我的虚拟机 我能够以 virtualbox 作为驱动程序启动我的 minikube 集群。问题?好吧,Docker 不起作用,所以当我的集群试图拉取我正在使用的 docker 图像时,它将无法。

问题就出在这里。您启用了 VM 技术并禁用了 Docker,或者您启用了 VM 技术(Hyper-V 除外,我将很快谈到)并启用了 Docker。但你不能两者兼得。

解决方案 1(未测试)

最简单的解决方案可能是升级到 Windows 专业版、企业版或教育版。 Hyper-V 平台无法正常访问 Windows。升级后,您应该能够同时使用 Hyper-V 作为驱动程序和 Docker 守护程序。从理论上讲,这应该可以使入口正常工作。

解决方案 2(已测试)

如果你像我一样不想为这么小的东西升级系统,还有另一种解决方案。

首先,在您的计算机中搜索“打开或关闭 windows 功能”部分并禁用“虚拟机平台”和“Windows 管理程序平台”,然后重新启动您的计算机。 (一会儿见 :D)

之后,在你的电脑上安装一个虚拟机平台。我更喜欢 VirtualBox but you can also use others such as VMware.

安装 VM 平台后,添加一个新的 Linux VM。我建议 Debian or Ubuntu. If you are unfamiliar with how to set up a VM, this 视频将向您展示如何操作。这将是大多数 iso 图像的一般设置。

启动 VM 并 运行ning 后,在其上下载 minikube and Docker。确保为您的 VM 安装正确的版本(对于 Debian,安装 Debian 版本,对于 Ubuntu,安装 Ubuntu 版本。一些下载可能只是一般的 Linux,应该适用于大多数 Linux 个版本)。

一旦你安装了所有东西,创建一个以 docker 作为驱动程序的 minikube 集群,应用你的 Kubernetes 配置(部署、服务和入口)。配置您的 /etc/hosts 文件并转到您的浏览器,它应该可以工作。如果您不知道如何设置 ingress,可以观看 this 视频以了解有关什么是 ingress、其工作原理以及如何设置的示例。