问题描述
在本地机器上使用minikube创建了一个服务(expressjs API),通过使用minikube service wedeliverapi --url
命令启动服务后,可以在浏览器中使用localhost:port/api
访问该服务。用户希望能够从其他设备访问该服务,以便在Flutter移动应用程序中使用该API。用户想知道如何实现这个目标。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
一种简单的方法是在您的机器外部使用代理。您可以使用Apache或类似的HA、Nginx等工具来实现代理。
以下是使用Nginx设置反向代理的详细步骤:
1. 在您的Windows机器上安装Nginx。
2. 打开Nginx的配置文件(通常位于/etc/nginx/nginx.conf
)。
3. 在配置文件中添加以下内容:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:port/api/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 保存并关闭配置文件。
- 启动Nginx服务。
- 现在,您应该能够从其他设备访问您的API服务。
请注意,上述步骤中的port
应替换为您API服务实际使用的端口号。
方案2
请注意以下操作注意版本差异及修改前做好备份。
另一种方法是使用Kubernetes的NodePort
或Ingress
来将minikube服务外部暴露出来。
对于minikube,主机和minikube VM之间还有一个网络层。您需要在主机和VM之间启用端口转发。要将整个默认的minikube NodePort范围转发到主机,请执行以下命令:
for port in {30000..32767}; do VBoxManage controlvm minikube natpf1 "NodePort$port,tcp,,$port,,$port"; done
当您完成后,要禁用端口转发,请执行以下命令:
for port in {30000..32767}; do VBoxManage controlvm minikube natpf1 delete "NodePort$port"; done
请注意,上述命令中的端口范围{30000..32767}
是minikube默认的NodePort范围。如果您在minikube中使用了不同的范围,请相应地修改命令。
使用上述方法,您应该能够将minikube服务外部暴露给同一网络中的其他设备。
方案3
请注意以下操作注意版本差异及修改前做好备份。
如果您使用的是minikube
的--driver
选项,请根据具体情况选择合适的方法。以下是使用--driver=none
选项的方法:
1. 预先安装cri-docker
服务,例如在Ubuntu 20上执行以下命令:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpgecho "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get update -ysudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectlwget https://github.com/Mirantis/cri-dockerd/releases/download/v${VER}/cri-dockerd-${VER}.amd64.tgztar xvf cri-dockerd-${VER}.amd64.tgzsudo mv cri-dockerd/cri-dockerd /usr/local/bin/tar xvf cri-dockerd-${VER}.amd64.tgzsudo mv cri-dockerd/cri-dockerd /usr/bin/wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.servicewget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socketsudo mv cri-docker.socket cri-docker.service /etc/systemd/system/sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.servicesudo systemctl daemon-reloadsudo systemctl enable cri-docker.servicesudo systemctl start cri-docker.socket
- 启动minikube,例如:
minikube start --driver=none --container-runtime=docker
,并检查minikube的IP地址。 - 部署您的应用程序,启动服务。
- 暴露服务。
- 启动Ingress(如上所述,使用
minikube addons enable ingress
命令)。 - 现在,您应该能够从外部访问它。
请注意,上述步骤中的具体命令可能因您的操作系统和minikube配置而有所不同。
以上是几种将minikube服务暴露给同一网络中的其他设备的方法。您可以根据您的具体需求选择适合您的方法。