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

求教:外部服务访问 kubernetes 集群中服务的方式该如何选择?

  •  
  •   douz · 8 小时 3 分钟前 · 637 次点击

    需求:k8s 集群中部署了一个 prometheus 服务,现在外部环境的服务需要访问这个服务的 /api/v1/query 接口,访问不频繁,主要是实现查询指标功能。现在有两种方式,不知道哪种比较合适,求大佬科普。

    1. 给 prometheus 服务开一个主机端口 9090 ,通过 ip:9090/api/v1/query 的方式访问,这个应该最常见,但是需要暴露一个主机端口。

    2. 通过 api server 的 proxy 功能访问,路径为: https://ip:8443/api/v1/namespaces/kube-system/pods/prometheus/proxy/api/v1/query 。这种方式好像不太常见,不知道是否推荐。

    23 条回复    2025-01-10 18:51:58 +08:00
    hackroad
        1
    hackroad  
       8 小时 2 分钟前   ❤️ 1
    ingress
    douz
        2
    douz  
    OP
       7 小时 54 分钟前
    @hackroad 这个了解过一点,但是不想在集群中做额外的操作,加上对 k8s 也不太熟悉
    Frankcox
        3
    Frankcox  
       7 小时 54 分钟前   ❤️ 1
    ingress 当成一个正常的 web 服务暴露
    douz
        4
    douz  
    OP
       7 小时 52 分钟前
    @Frankcox 这个需求用不上这个,目前的访问逻辑就是通过集群 ip:port 去访问
    defunct9
        5
    defunct9  
       7 小时 50 分钟前   ❤️ 1
    ingress
    xcai
        6
    xcai  
       7 小时 49 分钟前   ❤️ 1
    但是不想在集群中做额外的操作 结论:无,就用 NodePort 吧
    seers
        7
    seers  
       7 小时 44 分钟前 via Android   ❤️ 1
    kebevpn
    Frankcox
        8
    Frankcox  
       7 小时 36 分钟前
    @douz #4 那就 NodePort 暴露端口吧
    defunct9
        9
    defunct9  
       7 小时 32 分钟前
    违反逻辑啊,开 ingress 跟开 NodePort 区别不大啊。尤其开 NodePort ,每个 worker node 上都得捅个口子,前面的 LB 又怎么搞
    brom111
        10
    brom111  
       7 小时 29 分钟前   ❤️ 1
    这两种相比肯定是第一种好 Nodeport
    vkillwucy
        11
    vkillwucy  
       7 小时 28 分钟前 via Android   ❤️ 1
    能用就行那就 nodeport
    JoeJasper
        12
    JoeJasper  
       7 小时 27 分钟前   ❤️ 1
    Gateway API
    douz
        13
    douz  
    OP
       7 小时 25 分钟前
    @defunct9 #9 确实有点不妥,这也是考虑第二种方式的原因。
    mightybruce
        14
    mightybruce  
       7 小时 24 分钟前   ❤️ 1
    专业一点都是 ingress, 南北流量 基本都是走 Ingress 或者 LB.
    如果就是玩玩而已,集群可以搞 nodeport
    defunct9
        15
    defunct9  
       7 小时 20 分钟前
    弄 ingress 也就 5 分钟的事,有啥难度。反倒是 nodeport 或者 api 反代麻烦死
    anubu
        16
    anubu  
       7 小时 14 分钟前   ❤️ 1
    第二种似乎更不妥,对一个业务暴露控制平面容易挖坑。
    cheng6563
        17
    cheng6563  
       7 小时 9 分钟前
    暴露主机端口很正常的
    cheng6563
        18
    cheng6563  
       7 小时 9 分钟前   ❤️ 1
    尤其是一些非 HTTP 端口不能用 Ingress 的
    zealot0630
        19
    zealot0630  
       6 小时 47 分钟前 via Android   ❤️ 1
    gateway API
    xwh
        20
    xwh  
       6 小时 19 分钟前   ❤️ 1
    不想用 nodeport ingress 就在集群的 node 节点上装个 nginx ,代理 prometheus 的的 clusterIP 。
    sunzhenyucn
        21
    sunzhenyucn  
       5 小时 29 分钟前
    Ingress, Ingress 不只是为 http 类端口服务的, 你像 APISIX 就提供了 Stream Proxy 来帮助代理基于 TCP 或 UDP 协议的面向流式的流量, 不过这并不是一个银弹, 适用场景可以参考官方文档。

    P.S. 无利益相关
    julyclyde
        22
    julyclyde  
       5 小时 12 分钟前
    nodeport 模式都不知道哪个 sb 设计的,需要在所有 node 上协商出同一个端口

    按说你这样普通 http 服务就直接用 api server proxy 就行了; ingress 或者 loadbalancer 模式的 service 有点大材小用
    neilyoone
        23
    neilyoone  
       4 小时 13 分钟前
    如果是云平台部署的 K8S, 你需要绑定一个 CLB 给
    如果是自建数据中心的 K8S, 你需要部署一个 MetalLB 来作为 HA IP 提供者

    单纯的 ingress 并不能将流量从外部打通到 K8S 内部
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2574 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 15:05 · PVG 23:05 · LAX 07:05 · JFK 10:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.