繁体   English   中英

如何将 minikube ingress 暴露给 inte.net

[英]How to expose minikube ingress to internet

我在我的 linux 笔记本电脑(计算机 A)上安装了一个 minikube

在此处输入图像描述

并在其上部署一些服务:

$ minikube service list
命名空间 名称 目标端口 URL
证书管理器 证书管理器 无节点端口
证书管理器 证书管理器 webhook 无节点端口
默认 aws 5000 http://192.168.49.2:30728
默认 azure 5000 http://192.168.49.2:31794
默认 云端 5000 http://192.168.49.2:32367
默认 高频 5000 http://192.168.49.2:30970
默认 高铁 5000 http://192.168.49.2:30612
默认 kube.netes 无节点端口
默认 打开 5000 http://192.168.49.2:31547
入口-nginx 入口-nginx-控制器 http/80 http://192.168.49.2:31053
https/443 http://192.168.49.2:30302
入口-nginx 入口-nginx-控制器-准入 无节点端口
kube系统 kube-dns 无节点端口
kube.netes-仪表板 仪表板指标刮板 无节点端口
kube.netes-仪表板 kube.netes-仪表板 无节点端口

如您所见,有 6 个使用 fastAPI 创建的服务位于入口后面。 我已将入口设置为主机galigator.fun Cert-manager 已准备好启动,但目前 TLS 在入口处发表评论。 galigator.fun是我拥有的 DNS 名称。


$ minikube addons enable ingress
$ kubectl describe ingress
Name:             multiplex-applications
Namespace:        default
Address:          192.168.49.2
Default backend:  default-http-backend:80 ()
Rules:
  Host           Path  Backends
  ----           ----  --------
  galigator.fun  
                 /v1/aws/(.+)            aws:5000 (172.17.0.11:5000)
                 /v1/azure/(.+)          azure:5000 (172.17.0.14:5000)
                 /v1/gcloud/(.+)         gcloud:5000 (172.17.0.13:5000)
                 /v1/deepml/best/(.+)    hftf:5000 (172.17.0.10:5000)
                 /v1/deepml/edge/(.+)    hft:5000 (172.17.0.3:5000)
                 /v1/deepml/razor/(.+)   open:5000 (172.17.0.8:5000)
Annotations:     cert-manager.io/issue-temporary-certificate: true
                 cert-manager.io/issuer: letsencrypt-staging
                 kubernetes.io/ingress.class: nginx
                 nginx.ingress.kubernetes.io/rewrite-target: /$1
Events:
  Type    Reason  Age                From                      Message
  ----    ------  ----               ----                      -------
  Normal  Sync    52m (x3 over 53m)  nginx-ingress-controller  Scheduled for sync

默认后端的错误似乎与我的问题无关......

如果使用minikube ipgaligator.fun/etc/hosts添加一个条目,那么我可以毫无问题地运行我的服务。 但是计算机 B 不是计算机 C。

如何从计算机B和计算机C访问我的服务?

我不想更改计算机 B 和 C 中的任何配置。

据我了解, minikube ip在我的 Inte.net Box 中是未知的; 它不是物理设备。 我的 minikube 从我的 kubuntu-21.04 运行,并以minikube start --ports=80,443或只是minikube start ,但我无法观察到差异。

另一件事看起来不起作用。


$ kubectl port-forward --address 0.0.0.0 deployment/ingress-nginx-controller 80:80 --namespace ingress-nginx
Unable to listen on port 80: Listeners failed to create with the following errors: [unable to create listener: Error listen tcp4 0.0.0.0:80: bind: permission denied]
error: unable to listen on any of the requested ports: [{80 80}]

我已经使用 Apache 正确测试了端口 80 和 443 的 Inte.net 和计算机 A 之间的连接。因为我已经删除了该服务器。

首先,正如文档解释的那样,我尝试使用minikube启动选项。

minikube start --listen-address='0.0.0.0' --ports=80,443

但正如我们所见,它并没有改变任何东西:

$ docker container ls |grep minikube
0aafb00fd97d   gcr.io/k8s-minikube/kicbase:v0.0.25   "/usr/local/bin/entr…"   3 weeks ago    Up 22 minutes   127.0.0.1:49172->22/tcp, 127.0.0.1:49171->2376/tcp, 127.0.0.1:49170->5000/tcp, 127.0.0.1:49169->8443/tcp, 127.0.0.1:49168->32443/tcp   minikube

因此,如果我们更深入地调查命令错误:

kubectl port-forward -n ingress-nginx  --address 0.0.0.0 service/ingress-nginx-controller 80:80 443:443

我们可以发现绑定到端口80443但它们低于1000并且需要额外的权限/root。 出于商品原因, kubectl不是根进程。

所以一个丑陋的解决方案可能是做这样的事情:

kubectl port-forward -n ingress-nginx  --address 0.0.0.0 service/ingress-nginx-controller 50000:80 50001:443

然后更改 Inte.netBox 中的 NAT 规则。 但我不喜欢它,因为minikube是一个不应影响其他硬件的实现细节。

所以一个不那么可怕的解决方案是让 kubectl 写入绑定到低端口号......

$ man 7 capabilities | grep -A 1 CAP_NET_BIND_SERVICE
       CAP_NET_BIND_SERVICE
              Bind a socket to Internet domain privileged ports (port numbers less than 1024).

所以命令应该是:

sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/kubectl

然后

kubectl port-forward -n ingress-nginx  --address 0.0.0.0 service/ingress-nginx-controller 80:80 443:443

它适用于...

但是这里有一个主要问题,我们必须在每次启动时重做最后一个命令,并且在每次升级时重做最后两个...

如果有人有一个好的答案,那也可以用于LAN上的后台服务器,我会喜欢的。

仅在执行来自证书管理器的质询期间才需要端口80 因此,可以接近它的解决方案也可能很有趣。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM