使用 Docker 驱动程序启动 Minikube 并将其绑定到主机网络

Jér*_*eau 5 kubernetes minikube

我想知道是否可以将我的 minikube 网络绑定到我的host网络。

\n

我试过:

\n
minikube start --memory=10000 --cpus=4 --vm-driver=docker --kubernetes-version=v1.19.6 --mount --mount-string="/usr/local/citizennet/db:/usr/local/citizennet/db" --network="host"\n
Run Code Online (Sandbox Code Playgroud)\n

但我收到以下错误:

\n
\xe2\x9d\x97  Unable to create dedicated network, this might result in cluster IP change after restart: un-retryable: create network host 192.168.49.0/24: docker network create --driver=bridge --subnet=192.168.49.0/24 --gateway=192.168.49.1 -o --ip-masq -o --icc -o com.docker.network.driver.mtu=1500 --label=created_by.minikube.sigs.k8s.io=true host: exit status 1\nstdout:\n\nstderr:\nError response from daemon: operation is not permitted on predefined host network\n
Run Code Online (Sandbox Code Playgroud)\n

我能够通过使用来做到这一点haproxy但我想知道是否有更干净的方法来做到这一点。\n我的 minikube 托管在 EC2 实例上,我想将所有内容直接转发到我的 minikube。或者至少是 HTTP/HTTPS 请求。

\n

谢谢!

\n

Daw*_*ruk 4

minikube我还没有找到将实例公开--driver=docker给主机网络的方法(除了$ kubectl port-forward svc/svc-name --address=0.0.0.0 local_port:pod_port在主机上运行之外)。

它产生与原始海报所遇到的相同的错误:

Error response from daemon: operation is not permitted on predefined host network
Run Code Online (Sandbox Code Playgroud)

确认以下评论:

问题是我想使用该ingress插件,但该插件不再与--driver=none.

--driver=docker您可以选择直接在 Docker 容器上配置所有资源,而不是使用--driver=none它将所有资源放置在 Docker 容器中。VM. 您将能够直接从其他网络设备查询资源。

目前minikube版本v1.17.1不允许使用该ingress插件--driver=none,但我找到了一种可以配置它的方法。我已将此示例包含在本答案的末尾。请将此视为解决方法。

这个问题(无法在 上使用ingress插件--driver=none)已经在 github 上得到解决


从暴露的角度来说minikube

由于它旨在从外部源进行访问,因此我建议尝试其他解决方案,主观上讲,这些解决方案可以更轻松地将您的工作负载暴露给外部源。有许多可用的工具可以生成 Kubernetes 集群,您可以看看哪一个最适合您的需求。他们之中有一些是:


部署nginx-ingressminikube --driver=none

如前所述,请将其视为解决方法。

附注!

看看你的NGINX Ingress控制器是如何配置的,minikube addons enable ingress因为在这个例子中它几乎被模仿了。

脚步:

  • Download清单nginx-ingress YAML
    • 修改Deployment清单中的
    • Service从清单中删除
  • 申请并检查

Download清单nginx-ingress YAML

您可以使用以下清单:

修改Deployment清单中的

正如我之前所说,跑步时发生的事情minikube addons enable ingress可能会很有用。部署的资源有一些关于您需要如何修改它的线索。

  • 添加hostPortforHTTPHTTPScommunications:
Error response from daemon: operation is not permitted on predefined host network
Run Code Online (Sandbox Code Playgroud)
  • 删除--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
          ports:
            - name: http
              hostPort: 80 # <-- IMPORTANT, ADD THIS
              containerPort: 80
              protocol: TCP
            - name: https
              hostPort: 443 # <-- IMPORTANT, ADD THIS
              containerPort: 443
              protocol: TCP
            - name: webhook
              containerPort: 8443
              protocol: TCP
Run Code Online (Sandbox Code Playgroud)

Service从清单中删除

您将需要从清单中完全删除名为: Service的类型,因为您已经在使用.LoadBalanceringress-nginxhostPort

完成此步骤后,您应该能够使用Ingress资源并与他们进行通信VM_IP80/ 443


其他资源: