新手,请教一个 k8s 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ydongd
V2EX    Kubernetes

新手,请教一个 k8s 的问题

  •  
  •   ydongd 2022-06-29 16:07:58 +08:00 3502 次点击
    这是一个创建于 1202 天前的主题,其中的信息可能已经有所发展或是发生改变。
    中心服 A ,对外提供服务的 B 。B 需要将自己链接到 A ,同时需要对外提供服。用户先到 A 去拿取 B 的地址在链接到 B 。

    A 可以部署多个,A 服务功能是一样的,采用 deployment 部署。对外访问用 service ,用户访问任意一个都行。

    B 也需要部署多个,虽然功能是一样,但是有服务的逻辑地址,又算是不同的服务。采用 statefulSet 部署,由 podID 来生成逻辑地址。

    类似于官方的案列:部署多个 mysql 服务。但是教程只到了 k8s 集群内通过 ip 来区分并访问不同的 mysql 。对于外部的访问怎么区分访问呢?

    问题:
    service 的方式是将一批 pod 统一暴露出去了,不能做到定向访问。怎么将 statefulSet 部署的 pod 通过外部访问,且用户能选择访问那一个 pod ?
    第 1 条附言    2022-06-29 17:06:25 +08:00
    假设部署 3 个 B ,要把他们代理到本地网络。那就需要 3 个端口来分别代理( ip 地址是一样的),通过不同的端口来访问不同的 B 服务。
    第 2 条附言    2022-06-30 11:56:06 +08:00
    Mac mini. docker 桌面版,k8s 是 docker 自带的。

    之前安装的 minikube ,但是用 service 外部不能访问。用桌面版后能访问。

    不知道是不是安装的方式版本有什么问题,使用一些外部访问 pod 的方式仍然不是访问。
    22 条回复    2022-07-13 16:29:22 +08:00
    prodan
        1
    prodan  
       2022-06-29 16:22:55 +08:00
    service 本质上是一个负载均衡,据我所知是做不到指定用户访问指定的 pod ,你应该从你的程序设计上解决。
    hwdef
        2
    hwdef  
       2022-06-29 16:24:10 +08:00
    headless service
    offswitch
        3
    offswitch  
       2022-06-29 16:25:18 +08:00
    你需要试试 istio ,istio 可以实现你需要的需求。
    ydongd
        4
    ydongd  
    OP
       2022-06-29 16:58:00 +08:00
    @hwdef headless service 好像也是集群内部访问的,集群外不能访问
    Tinet
        5
    Tinet  
       2022-06-29 17:14:45 +08:00   1
    两个步骤:
    1. 在集群外解析 headless service 域名地址
    2. 将 clusterIP 与集群外网络打通
    ydongd
        6
    ydongd  
    OP
       2022-06-29 17:31:21 +08:00
    @Tinet 能详细说说这两个步骤吗?
    Tinet
        7
    Tinet  
       2022-06-29 17:38:31 +08:00
    @ydongd 域名解析不说了,网络打通给你个关键词 calico bgp
    April5
        8
    April5  
       2022-06-29 17:44:15 +08:00
    前置一个网关,通过 zk 或 etcd 维护服务 B ,网关订阅服务 B 的地址信息,网关将指定消息代理到相应的 B
    aragakiyuii
        9
    aragakiyuii  
       2022-06-29 18:08:06 +08:00 via iPhone
    代理到 {podName}.{headlessServiceName}
    buffzty
        10
    buffzty  
       2022-06-29 19:35:57 +08:00
    mysql-0.mysql.svc.cluster.local:3306
    Jiki
        11
    Jiki  
       2022-06-30 00:12:00 +08:00 via iPhone
    最近也遇到这个问题,关注一下
    ydongd
        12
    ydongd  
    OP
       2022-06-30 09:02:47 +08:00
    @aragakiyuii @buffzty 我用的 docker 自带的 k8s , 好像代理不了。之前用 minikube 普通的 service 都转发不出来。用的 mac 。 可能新手就需要踩这些坑吧
    ydongd
        13
    ydongd  
    OP
       2022-06-30 09:04:00 +08:00
    @buffzty k8s 集群内部可以访问,外边不行
    aragakiyuii
        14
    aragakiyuii  
       2022-06-30 10:08:08 +08:00
    可以在集群里面部署一个 nginx ,配置好 TCP 转发规则,转发至 {podName}.{headlessServiceName},然后可以通过 hostPort 或者 nodePort 形式将 nginx 暴露到集群外部
    qianhun
        15
    qianhun  
       2022-06-30 11:13:53 +08:00
    用 statefulset 模式,然后通过脚本获取主机名,并修改应用服务的端口,在通过 hostNetwork 映射到宿主机上
    ydongd
        16
    ydongd  
    OP
       2022-06-30 11:42:40 +08:00
    @qianhun 不知到啥原因 这种方式也不行
    apiVersion: v1
    kind: Pod
    metadata:
    name: server-pod
    spec:
    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet
    containers:
    - name: server
    image: yddeng/server:1.1
    command: ["./server"]
    args: ["server-0","127.0.0.1:9563"]
    qianhun
        17
    qianhun  
       2022-06-30 13:10:47 +08:00
    用 statefulset 控制器,启动一个 initcontainer ,写一个 shell 脚本,判断主机名,如果是 server-0 ,port 为 9563 ,如果是 server-1 ,port 为 9564 ,然后把具体的执行命令输出到启动脚本里,给你的 server pod 执行,不要在 args 里面写参数,在 args 里写参数只能启动一个 pod
    ydongd
        18
    ydongd  
    OP
       2022-06-30 13:24:20 +08:00
    @qianhun 我知道你这种方式,我这里只是做了一个测试,结果仍然是不能访问
    qianhun
        19
    qianhun  
       2022-06-30 14:22:38 +08:00
    不能访问,有什么报错么
    1.看看 pod 是否运行正常,日志有报错没有
    2.到宿主机上看看端口启动了没
    3.防火墙是否关闭
    ydongd
        20
    ydongd  
    OP
       2022-06-30 14:44:50 +08:00
    @qianhun 248244142 我 QQ 。我想请教一下,这个上面回复太慢了
    yyttrr
        21
    yyttrr  
       2022-07-01 17:17:47 +08:00
    研究一下 ingress ,集群入口有很多种
    lostsquirrelX
        22
    lostsquirrelX  
       2022-07-13 16:29:22 +08:00
    请描述一个你想要做什么,而不是你是怎么做的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3098 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:37 PVG 20:37 LAX 05:37 JFK 08:37
    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