1. 每个项目开启应用路由后会在kubesphere-controls-system项目里面去创建一个服务。添加应用路由使用的ingress。点击访问时是带上ingress的规则与kubesphere-controls-system对应服务的端口。。。(这是我使用后大致知道应用路由的工作方式)。

  2. 或者简单说,就是服务聚合服务,最后再由(ingress+端口)聚合服务———->最终提供外网访问的是域名+不同端口

  3. 但问题就来了,相当于我在每个项目里面开启应用路由,那么就会产生一个端口。但事实网站提供给客户使用的时候并没有带上非默认端口(80或443)。

  4. 那就说明整个kubeshpere的应用路由根本不适合直接提供外网访问(我没发现正常生产环境提供客户使用的网站访问时还拼接端口的)

  5. 那就更进一步说明,如果要提供用户使用,那整个k8s外层网络需要再提供一个反向代理才行(否则所有的域名提供的服务不能可能做到使用443或80端口)

  6. 最后我觉得应用路由根本不适合提供外网访问,既然这样我还不如直接使用服务,创建端口,在整个外层自己去处理反向代理(这样还省去了创建应用路由步骤)

那就说明一个问题,应用路由基本是废掉的(个人看法)

—— 最后我还特意去看了文档应用路由的说明和案例,访问offee或tea确实带了端口(那这样这个应用路由怎么可能直接提供生成环境使用,搞了一大半天,要提供给用户使用还得搞一次反向代理)。麻烦了一次又得搞一次,搞了最后还得再弄一次

真的是聚合又聚合,聚合又聚合(好恐怖)

pog2g 更改标题为「应用路由很不合理(基本就是废的)

这个问题我理解是如何将网关暴露提供服务的问题。
应用路由的网关目前有两种方式可以对外暴露服务(也就是k8s service的两种)
NodePort 和 load balancer .
当你使用nodeport暴露服务的时候就会使用随机的端口。
建议使用LB的方式暴露网关,这样可以满足你的需求。

是的,用LB暴露网关,应用路由(ingress)聚合服务还是需要的。

6 天 后

我也觉得这个访问网关有点迷惑。现在自己统一独立部署了Nginx Ingress Controller在另一个namespace
去监控ingress资源,才能实现外网域名的直接访问(不带端口的域名访问)。
但是麻烦的是如果不去高级设置里面设置访问网关,就不能直接添加应用路由,我的理解是这里的应用路由应该是创建ingress资源,可以指定域名。这个时候自己部署的ingress controller才可以工作,如果现在去把访问网关删除,应用路由(ingress resource)还是会保留,对域名访问没有任何影响,感觉如果用kubectl直接去创建ingress的yaml,apply一下应该可以达到同样的效果。

不知道这样理解是不是有问题,还是我哪部分没做对,希望大家更正。

    Richardwei 您自己搭建的ingress-nginx,不带端口通过指定域名,在外网访问,能正常代理转发访问服务?
    之前我也是这个思路部署了ingress controller,发现在项目下不开启访问网关,是不能使用应用路由的;开启访问网关后,通过应用路由定义域名发布服务时,还是会自带匹配使用,在开启网关时产生的随机端口;
    我理解kubesphere的思路是选择NodePort方式,一个项目(或称呼命名空间)下,会产生随机的HTTP和HTTPS 两个端口;总之项目越多,端口越多,虽然用了ipv的4层转发,但是这个随机端口的维护确实也是费尽;可能这个kubesphere还是更倾向于公有云的部署吧,使用lb;反正我理解不了这个思路,我更建议产品把应用路由,改成域名概念,整个kubesphere平台来定义ingress ,统一使用80和443这种端口;不同项目自己定义域名就是呗,

    是可以域名直接访问的,因为有ingress资源,所以可以匹配到域名,开启网关确实会给域名再分配一个端口号,如果域名加端口号也是可以访问,不用端口号也行,这个时候如果去删掉网关,端口号就消失了,但是域名还是可以照常访问。我没有去用真实域名实验,只是改了主机的host指定域名到自己部署的ingress controller的node ip地址。
    我觉得你可以不必理会应用路由分配的端口,但是要确保流量是打到自己部署的ingress controller的ip地址上,这样才能正确解析域名。

    1 年 后

    我这边是在windows虚拟机上搭建的k8s kubesphere,创建了网关
    loadbalancer,也创建了应用路由 域名绑定nginx的80端口,windows host也配置了域名,但是就是访问不到呢,求大佬回复,我看到有人说要安装porter,porter我也安装了,但是还是无法通过域名访问,新人求指导

    8 个月 后

    跟楼主一样的疑问,现在部署了 openelb,把dns解析道 elb 上,但又面临着 https 怎么搞,又要把https证书做到 pod 里面去?

      7 天 后

      Feynman

      已经有Wildcard 证书了,本来配置到“应用路由”里就可以访问,但带了 port。

      后面部署了openelb,直接给service 给了 layer2 的 EIP ,那我这是怎么加http证书呢?

      好像并不是cert-manager 的问题吧?

        RolandMa1986

        可以了,但不知道我做法对不对。

        在网关上使用 LB,但这个LB都是云上的选取,而我环境是裸机,是openelb自建的使用 layer2 IP 的。

        看着有点别扭,只有云上的几个显示负载均衡提供商,而我是 porter 自建的。

          2 个月 后