V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
token10086
V2EX  ›  Kubernetes

自学 k8s 对 Ingress 的一些疑惑

  •  
  •   token10086 · 2023-12-20 15:16:39 +08:00 · 3505 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自学了 2 周多一点,搞了真实环境( 3 台小鸡)自学。

    集群装的 k3s 集成了 traefik 的 Ingress 在使用中有 2 点比较好奇

    有了 Ingress 还用 Nginx 吗?

    我自己的结论是:

    能代替,但是我还是想只把 Ingress 当成一个流量入口。路由交给 Nginx ,因为 Nginx 更熟悉不用增加学习成本。

    不知道这样的做法标准不?

    CA 证书管理

    目前我用的是 came 写了个 cronjob 定期生成证书,然后再用系统的 crontab 写入 k8s 的 secret ,能实现功但感觉这样很奇怪。

    traefik 自带的 CA 管理和 cert-manager 哪一个好用一点?

    CA 的部署关系

    Ingress 上配置了 SSL 后,Nginx 还需要配置 SSL 吗? 还是有其他的做法

    26 条回复    2024-05-11 11:24:46 +08:00
    beyondstars
        1
    beyondstars  
       2023-12-20 15:22:54 +08:00   ❤️ 2
    1. 有了 ing 还用不用 nginx: 不用
    2. CA 证书管理:用 cert-manager
    3. 不需要,因为 ing 做的就是 ssl termination.
    beyondstars
        2
    beyondstars  
       2023-12-20 15:24:16 +08:00
    1 也有例外就是你需要用一些功能 ingress 里面配置起来比较麻烦,但是 nginx 好配,那可以通过路由把 http 流量导到 nginx 然后再在 nginx 里边配。
    DefoliationM
        3
    DefoliationM  
       2023-12-20 15:27:38 +08:00 via Android
    其实 ingress 就是 nginx
    beyondstars
        4
    beyondstars  
       2023-12-20 15:28:08 +08:00
    3 也有例外就是假如你的 node 是跨越公网的,并且你需要加密 ingress controller 到 backend (svc, pod, ...) 的流量,可以在 backend 也上 tls ,并且让 ingress 通过 tls 和 backend 通信。
    token10086
        5
    token10086  
    OP
       2023-12-20 15:36:54 +08:00
    @beyondstars
    @DefoliationM

    可以,懂了,感谢两位好大哥
    juzisang
        6
    juzisang  
       2023-12-20 15:40:41 +08:00
    Ingress 可以当 Nginx 用,helm 安装 ingress-nginx 提供了很多配置
    helm 原理其实很简单,通过配置 + helm 的语法,可以动态生成配置,然后再映射给容器,没啥特殊的
    cert-manager 其实也一样

    我用了一段时间 k3s ,个人感觉 kubernetes 配置真的是及其繁琐 啰嗦,而且 helm 包因为套了一层配置,大多数 helm 包又要高可用,配置又多又复杂,文档写得也不好,run 起来还特别吃配置...一个简单的事情,经过这么多层封装,变得极其难用,学习成本很高。

    个人使用推荐 docker swarm ,特别简单...
    LsLsLsLsLs
        7
    LsLsLsLsLs  
       2023-12-20 16:50:41 +08:00
    玩一玩 treafik 小土豆子
    piupuer
        8
    piupuer  
       2023-12-20 16:58:08 +08:00
    有了 Ingress 还用 Nginx 吗
    ingress 就是 nginx ,流量入口用 ingress ,同时配合 loadbalancer ,app 应用层可以加一个 nginx container ,app 内有自定义的路由需求会比全部配在 ingress 方便
    GopherDaily
        9
    GopherDaily  
       2023-12-20 16:59:27 +08:00   ❤️ 5
    - Ingress 处理流量从公网到集群,Egress 处理流量从集群到公网
    - Ingress 在 k8s 中是一个逻辑概念,Nginx 是 Ingres 的一种实现选择
    - Ingress Controller 是会根据 k8s 的相关逻辑概念,控制具体实现的配置
    注意 k8s 和 nginx 各自维护了一个 controller ,参考 https://github.com/j2gg0s/j2gg0s/blob/main/_posts/2022-11-15-nginx_%E6%98%93%E6%B7%B7%E6%B7%86%E7%9A%84%E6%9C%AF%E8%AF%AD.md
    - Ingress 前面一半还会有一层 SLB ,我们一般在 SLB 处理证书
    zmh69695328
        10
    zmh69695328  
       2023-12-20 17:09:19 +08:00 via Android
    借楼问一下,请问自学教程有推荐嘛?
    exiaohao
        11
    exiaohao  
       2023-12-20 21:01:28 +08:00
    有了 Ingress 还用 Nginx 吗?
    个人意见看业务,比如 k3s 的 traefik 能满足你的需要 就不需要了
    如果 traefik 满足不了,可能 nginx/envoy 什么是更好的选择,那就是替换 ingress 的实现了

    CA 证书管理: cert-manager

    CA 部署关系: Ingress 你可以把它当作传统服务商的「负载均衡和 HTTPS 卸载」
    在它以北的认为直接暴露公网了,如果你还有 WAF 什么的,那就看实际情况配置了
    devopsdogdog
        12
    devopsdogdog  
       2023-12-20 21:15:20 +08:00 via Android
    有了 Ingress 还用 Nginx 吗?

    我理解不是一个东西。虽然差不多

    比如能直接,当做展示前端代码的 nginx 来用?
    或者是配合 php_fpm 用?

    请指教,我认为可能在负载均衡,反向代理这块差不多,其他替代不了吧。
    antipro
        13
    antipro  
       2023-12-20 21:51:22 +08:00 via Android
    @juzisang docker swarm 不要用在生产环境
    jiangzm
        14
    jiangzm  
       2023-12-20 22:36:12 +08:00
    ingress 当然不是 nginx ,ingress 是用来管理路由规则的, 路由规则需要由 ingress controller 来处理。
    可以理解为一个弱网关规则加上 controller 就是一个网关,虽然后面 ingress 会被 gateway-api 替代。
    nginx, traefik, apisix, kong... 这些都支持 ingress controller 。
    所以有了 traefik 就不用 nginx 做 controller ,除非应用内部(Pod)需要用到 nginx 做静态服务或者其他。

    熟悉 nginx 对于配置 ingress 其实作用不是那么大,本来就是抽象了一层规则。
    token10086
        15
    token10086  
    OP
       2023-12-20 22:53:34 +08:00
    @juzisang
    很赞同,对于初学者来说 k8s 抽象概念太多,设计思路的确很巧妙,但是上手翻阅各种文档并且去了解每个配置意思然后再组合起来的过程很痛苦。

    @2677672

    @piupuer
    @GopherDaily 谢谢我再去知识的海洋里浸泡下

    @zmh69695328 我是 极客时间的专栏 + 书 + 官方文档 组合服用

    @exiaohao
    @devopsdogdog 我的理解也是这样,只把 ingress 当入口,复杂场景还是配置 NGINX 方便减少了学习成本。另外配合 php_fpm 应该属于反向代理的一种真要做 ingress 是可以,当成资源服务器官方文档有例子


    @jiangzm 了解下来是这样的,我还是再去把文档多读几遍
    hardto
        16
    hardto  
       2023-12-20 23:02:19 +08:00
    @beyondstars node 跨越公网的安全问题一般在 4 层解决吧( vpn 啥的),node 上的应用层一般不考虑安全问题
    bazbaozhilv
        17
    bazbaozhilv  
       2023-12-20 23:29:15 +08:00
    有了 Ingress 还用 Nginx 吗?

    首先我之前看过的资料,ingress 是概念性的东西,如 pod ,是 k8s 的一个控制器,而 nginx ingress 是 ingress 的具体实现,ingress 我之前还玩过 traefik

    其他问题嘛,我就不清楚了,毕竟没从事 k8s 相关的工作
    mritd
        18
    mritd  
       2023-12-21 07:58:45 +08:00 via iPhone
    9 楼说的已经很到位了,ingress 只是个逻辑概念, 你可以理解为 ingress 在 k8s etcd 里就是个 json(protobuf) object ,他只是一个有自己规范的协议对象而已

    会有一个 ingress controller 负责 watch 这个 obj, 然后根据 ingress 的定义来进行路由

    所以说 nginx 跟 ingress 是完全两个东西, 没有所谓的替代、 不学的说法, 只不过是大家习惯使用 nginx ingress controller 配合 ingress 而已

    总不能说 学会了 http 协议就完全不需要学 Spring boot 、postman 之类的软件或框架吧
    bli22ard
        19
    bli22ard  
       2023-12-21 09:29:51 +08:00   ❤️ 1
    这回答里面就 9 楼和 18 楼说的对, 其他回答连 ingress 概念都没搞明白
    flmn
        20
    flmn  
       2023-12-21 09:48:36 +08:00
    @antipro docker swarm 为什么不要用在生产环境?
    xiaogui
        21
    xiaogui  
       2023-12-21 10:05:04 +08:00
    Nginx ingress
    ccde8259
        22
    ccde8259  
       2023-12-21 21:25:49 +08:00
    ingress 只是对象,声明了路由……
    traefik 是 ingress-controller ,监听 ingress 变化并根据 ingress 路由流量……
    nginx 也可以改一改拿来做 ingress-controller ,具体的方案就是 ingress-nginx-controller……
    CA 管理建议 cert-manager ,只需要先配个 ClusterIssuer ,对应证书只需要写好 Certificate 以后还能帮你自动 Renew……
    比如我现在部署服务只需要先写份 Certificate 申一本证书,Helm 的 values.yaml 里给打上 ingress 配置,就可以 helm install 完直接域名访问……
    antipro
        23
    antipro  
       2023-12-22 08:39:05 +08:00 via Android
    @flmn 稳定性不大好,超过 400 每秒请求,内部 dns 性能下降。
    flmn
        24
    flmn  
       2023-12-22 10:47:00 +08:00
    @antipro 这抗压能力属实有点低
    ironboxplus
        25
    ironboxplus  
       320 天前
    Ingress 可以理解成入口的“声明”或者“接口”这种概念,Nginx 和 traefik 是实现接口的 Ingress Controller ,
    traefik 的证书管理不具有分布式的功能,也就是说,你的 traefik 有几个 pod ,就会去申请几次证书,多 traefik 负载均衡肯定是不合理的,证书管理要用 certmanager 此类的
    yunshangdetianya
        26
    yunshangdetianya  
       225 天前
    @juzisang swarm 的坑也不少
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2623 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:57 · PVG 14:57 · LAX 22:57 · JFK 01:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.