kubernetes - 使用 Docker 驱动程序启动 Minikube 并将其绑定到主机网络
问题描述
我想知道是否可以将我的 minikube 网络绑定到我的host
网络。
我试过了:
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"
但我收到以下错误:
❗ 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
stdout:
stderr:
Error response from daemon: operation is not permitted on predefined host network
我可以通过使用来做到这一点,haproxy
但我想知道是否有更清洁的方式来做到这一点。我的 minikube 托管在 EC2 实例上,我想将所有内容直接转发到我的 minikube。或者至少是 HTTP/HTTPS 请求。
谢谢!
解决方案
我还没有找到将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
承认以下评论:
问题是我想使用
ingress
插件,而这个插件不再兼容--driver=none
.
您--driver=docker
可以选择--driver=none
将所有资源直接配置在VM
. 您将能够直接从其他网络设备查询资源。
目前minikube
版本v1.17.1
不允许使用ingress
插件,--driver=none
但我找到了一种可以配置它的方法。我在这个答案的末尾包含了这个例子。请将此视为一种解决方法。
这个问题(无法在 上使用ingress
插件--driver=none
)已经在 github 上得到解决:
从曝光的角度来讲minikube
:
由于它旨在从外部资源访问,我建议尝试其他解决方案,从主观上讲,这些解决方案可以更轻松地将您的工作负载暴露给外部资源。有许多可用的工具可以生成 Kubernetes 集群,您可以查看最适合您需求的工具。其中一些是:
部署nginx-ingress
_minikube --driver=none
如前所述,请将其视为一种解决方法。
旁注!
看看你的
NGINX Ingress
控制器是如何配置的,minikube addons enable ingress
因为它在这个例子中几乎是模仿的。
脚步:
Download
nginx-ingress
YAML
清单 :- 修改
Deployment
清单中的 Service
从清单中删除
- 修改
- 申请并检查
Download
nginx-ingress
YAML
清单_
您可以使用以下清单:
- Kubernetes.github.io:Ingress Nginx:部署(例如
GKE
可以下载清单)
修改Deployment
清单中的
正如我之前所说,跑步时发生的事情minikube addons enable ingress
可能会很有用。部署的资源有一些关于您需要如何修改它的线索。
- 添加
hostPort
forHTTP
和HTTPS
通信:
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
- 删除
--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
:
args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller # <-- DELETE THIS
- --election-id=ingress-controller-leader
- --ingress-class=nginx
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
- --validating-webhook=:8443
- --validating-webhook-certificate=/usr/local/certificates/cert
- --validating-webhook-key=/usr/local/certificates/key
Service
从清单中删除
您将需要从清单中完全删除名为: Service
的类型,因为您已经在使用.LoadBalancer
ingress-nginx
hostPort
完成此步骤后,您应该能够使用资源并在: /Ingress
上与它们通信。VM_IP
80
443
其他资源:
推荐阅读
- java - 按范围日期分组
- c# - EF TPT 继承和自引用
- flutter - 按下按钮时改变亮度灯/飞镖
- mysql - 删除后Mysql数据库存储过程返回
- java - ORA-29973: 使用 DatabaseChangeRegistration 时更改通知注册期间不支持的查询或操作
- asp.net-core - 在反向代理子路径后面托管时,IdentityServer4 AddLocalApiAuthentication 未使用正确的颁发者 uri
- angular - 如何仅向前跳过流?
- r - 不在注释行查找和/或替换
- reactjs - Firebase 托管:为什么 firebase 将我的所有源代码托管到那里托管?我怎样才能仅限于“构建”文件夹?
- python - Django如何将views.py中的参数传递给另一个文件中的websocket“on_open”函数