如何从 redis 等外部系统里看到 k8s pod ip - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
idblife
7.51D
V2EX    Kubernetes

如何从 redis 等外部系统里看到 k8s pod ip

  •  
  •   idblife 2023-02-22 13:17:51 +08:00 2866 次点击
    这是一个创建于 966 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在我们的应用运行在 k8s 的 pod 里,
    redis 上看到的连接 ip 是 pod 的物理宿主机器 ip ,
    通什么能够看到具体哪个应用或者 pod ip 在连接 redis ?
    istio ?
    第 1 条附言    2023-02-23 15:46:33 +08:00
    https://github.com/pixie-io/pixie
    完美解决
    谢谢各位的意见
    26 条回复    2023-02-23 14:54:58 +08:00
    defunct9
        1
    defunct9  
       2023-02-22 13:21:34 +08:00
    看不到啊看不到
    ql562482472
        2
    ql562482472  
       2023-02-22 13:24:48 +08:00
    放进去就行了。
    换种思路想一想,是不是 etcd 里有全部信息?是不是 K8SAPI 就能看到全部信息?
    idblife
        3
    idblife  
    OP
       2023-02-22 13:33:05 +08:00
    @ql562482472
    你知道我在说啥么。。。
    SweetEriri
        4
    SweetEriri  
       2023-02-22 13:38:45 +08:00
    istio 太麻烦了 直接命令或者 api 查询下就行了
    salmon5
        5
    salmon5  
       2023-02-22 13:42:38 +08:00
    写个插件吧,往 redis 塞下 pod 的 ip
    julyclyde
        6
    julyclyde  
       2023-02-22 13:42:46 +08:00
    你的真实需求是什么呢?
    获得了访问 redis 的 pod 的 IP ,然后呢?
    GopherDaily
        7
    GopherDaily  
       2023-02-22 13:47:15 +08:00
    让应用访问访问的时候使用不同的账号。

    你这个不是上层和中层应用的问题了,是 k8s CNI ,阿里云 VPC ,或者 TCP 之类处理的,TCP 从宿主机网卡出,所以 IP 就是宿主机的,虽然不知道具体,但是一般默认都是这样的,建议你走上面的思路
    idblife
        8
    idblife  
    OP
       2023-02-22 13:56:44 +08:00
    @julyclyde
    应用治理
    比如一个 redis 要下线,想找到使用它的所有工程提前通知
    ruanimal
        9
    ruanimal  
       2023-02-22 15:27:11 +08:00
    看描述不是缺注册中心吗
    nilai
        10
    nilai  
       2023-02-22 15:43:00 +08:00
    用 ebpf 的 cni 是否能达到这个效果呢?
    idblife
        11
    idblife  
    OP
       2023-02-22 15:54:04 +08:00
    @ruanimal
    注册中心的话拿到的 pod ip ,redis 看到的是 node ip 。
    注册中心在我描述的场景里有啥作用呢?
    idblife
        12
    idblife  
    OP
       2023-02-22 15:56:42 +08:00
    @nilai
    理论上是可以的,但是换 cni 这个有点太刺激了
    julyclyde
        13
    julyclyde  
       2023-02-22 17:29:20 +08:00
    @idblife 按说如果你的 redis 也在 k8s 集群内,pod 访问过来应该是 pod 自己的 IP 地址吧;经过 node 的 NAT 的时候才会变成 node 的 IP 地址

    redis 下线前清退客户端这个需求,其实是服务治理的问题,我感觉你做反了方向了。
    ql562482472
        14
    ql562482472  
       2023-02-22 17:33:44 +08:00
    @idblife 我看你不太知道我在说啥
    runzhliu
        15
    runzhliu  
       2023-02-22 17:37:21 +08:00   1
    @idblife 听起来怪怪的,注册中心和 redis 都在集群外?三层网络下 pod 流量出去走了 NAT ,redis 看到的是节点 IP 是正常的,如果换 CNI 应该是适合大二层的场景了,或者容器配双网卡,一个三层一个二层。
    victorc
        16
    victorc  
       2023-02-22 17:54:33 +08:00
    @idblife 应用治理 就是在链路 中间加一道 proxy ,在 proxy 里面随便造,istio 本质也是这样做的
    liuhuan475
        17
    liuhuan475  
       2023-02-22 18:35:22 +08:00
    idblife
        18
    idblife  
    OP
       2023-02-22 19:42:32 +08:00
    @runzhliu
    redis 在集群外,注册中心就是 kubernetes 的 etcd 啊
    idblife
        19
    idblife  
    OP
       2023-02-22 20:04:29 +08:00 via iPhone
    @julyclyde
    redis 在 k8s 集群外,要都在集群里就好办了
    bowser1701
        20
    bowser1701  
       2023-02-22 20:46:30 +08:00 via iPhone
    Pod IP 都是动态的,不如用账号做划分
    idblife
        21
    idblife  
    OP
       2023-02-22 21:46:48 +08:00
    @bowser1701
    悄悄地告诉你
    我们 redis 没密码。。。
    samwilson95
        22
    samwilson95  
       2023-02-22 23:04:13 +08:00
    解决方案是有的,原理是 pod 访问外部 k8s 的时候,从 k8s node 出去会做 一次 snat ,转化成 node ip , 所以 redis 看到就是 node ip 了

    如果想让 redis 那边看到 pod ip 的话,首先 出去,比如访问 redis 所在网段的时候 k8s 不要做 snat, 然后 保证 pod 的 IP 能路由到 redis 就可以

    原理是这样,我们云上架构是找云厂商帮忙做的,具体怎么设置我就不清楚了,你搞明白可以分享一下,哈哈
    julyclyde
        23
    julyclyde  
       2023-02-23 08:50:35 +08:00
    @idblife redis 在集群外。那你抓包,人工识别一下访问了啥 KEY ,再反向推测到底是哪个 pod 吧
    idblife
        24
    idblife  
    OP
       2023-02-23 11:10:50 +08:00 via iPhone
    @julyclyde
    上千个微服务,咋能知道具体用啥 key
    bowser1701
        25
    bowser1701  
       2023-02-23 14:16:10 +08:00 via iPhone
    @idblife
    istio 可以实现你的需求, 可以简单把 redis 配置成一个 external name 的 service 然后服务用这个 service 去访问 redis 。或者配置 proxy external service 的规则。

    然后可以在日志或者 trace 里面追踪你的 redis ,看看是哪些服务在访问它,用 pod ip 不太合适,因为是动态的,拿到 pod ip 你得想办法去找到对应的服务。

    但是按照你的上下文,上千个微服务,redis 没有密码,这种设置是很危险的,如果数据被别人写了,都找不到是谁。
    julyclyde
        26
    julyclyde  
       2023-02-23 14:54:58 +08:00
    @idblife 那我觉得你直接关了就行了
    等那些 pod 故障重生,就会去访问新的 redis 的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5477 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:12 PVG 15:12 LAX 00:12 JFK 03:12
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86