如何让 LoadBalancer service 分配 ip 而不是 localhost - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiangzm
V2EX    Kubernetes

如何让 LoadBalancer service 分配 ip 而不是 localhost

  •  
  •   jiangzm 2023-12-12 19:39:48 +08:00 1727 次点击
    这是一个创建于 669 天的主题,其中的信息可能已经有所发展或是发生改变。

    kubernetes 环境

    • system os: macOS
    • install tool: docker-desktop
    • docker: 24.0.7
    • kubernetes: v1.28.2
    • component: ingress-nginx-controller, cert-manager, external-dns

    ingress-nginx-controller

    • 提供访问入口、反向代理、卸载证书...

    cert-manager

    • 自动颁发应用域名证书(self-signed or let's encrypt)

    external-dns

    • 为应用新域名添加 DNS 记录到外部 DNS 服务

    应用部署流程

    1. 创建应用 Deployment 、Service 、Ingress 配置
    2. 安装应用配置
    3. cert-manager 签发证书
    4. external-dns 添加 DNS 记录

    期望应用安装完,在本地能直接使用 https+域名访问应用,
    以上 1 、2 、3 都没问题,第 4 步 external-dns 提示错误日志

    Failed to create CNAME record named 'echo.mylabs.work' to 'localhost' with ttl 0 for Alibaba Cloud DNS: SDK.ServerError ErrorCode: SubDomainInvalid.Value Message: The DNS record is invalid or in the wrong format. 

    问题出在 ingress ip 分配的是 localhost

     kubectl get svc -n ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) ingress-nginx-controller LoadBalancer 10.101.27.87 localhost 80:30375/TCP,443:31539/TCP ... 

    ingress service yaml

    apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx app.kubernetes.io/version: 1.9.4 name: ingress-nginx-controller namespace: ingress-nginx spec: externalTrafficPolicy: Local ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - appProtocol: http name: http port: 80 protocol: TCP targetPort: http - appProtocol: https name: https port: 443 protocol: TCP targetPort: https selector: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx type: LoadBalancer 

    部署完分配了一个 localhost, 本地也监听了对应端口

    ...`ingress service` status: loadBalancer: ingress: - hostname: localhost 

    关于 LoadBalancer 问题

    1. 因为不是云环境也没有部署类似 MetalLB 服务,LoadBalancer service 是如何分配 host/ip 的?
    2. 如果想让 LoadBalancer service 绑定本机(宿主机)局域网 ip, 应该如何做?

    尝试过给 service 配置了loadBalancerIP或者externalIPs没有产生效果

    2 条回复    2023-12-13 13:31:32 +08:00
    token10086
        1
    token10086  
       2023-12-12 23:04:40 +08:00
    我也在学习阶段,说的不一定对。是这段时间学习的积累

    1.
    在 k8s 中 LoadBalancer service 要云服务商支持,或者自己装一个 Klipper LoadBalancer

    在 k3s 里面是自带的
    https://docs.k3s.io/zh/networking

    2. Ingress controller 实际上也是一个 pod ,hostNetwork: true 或许能满足需求

    因为都是遵循了统一开发标准这个配置也可以了解下,它能做的 NGINX Ingress 也能对应找稳定就行了

    https://github.com/traefik/traefik-helm-chart/blob/master/traefik/VALUES.md
    jiangzm
        2
    jiangzm  
    OP
       2023-12-13 13:31:32 +08:00
    @token10086 谢谢。好像没找到 klipper 在 k8s 的安装方法,官方没提供对应的 yaml 或者 helm 。Ingress controller 暴露端口其实没问题,在宿主机能访问到用 localhost 及 host ip 都行。另外就是 external-dns 支持 service 或者 ingress ,因为这两者都可以有 hostname 和 ip ,pod 应该没有 host 或者 externalName 配置。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2627 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:39 PVG 18:39 LAX 03:39 JFK 06:39
    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