Below you will find pages that utilize the taxonomy term “Metallb”
March 19, 2024
如何实现访问k8s集群服务之原理
"\u003cp\u003e当我们想将 k8s 集群里的服务向外暴露时,一般是将 k8s service 指定 \u003ccode\u003eLoadBalancer\u003c/code\u003e类型。目前大多数云厂商会绑定云平台的负载均衡器,并为其分配一个固定的公网 IP 从而向外提供服务。而对于我们自建的 kubernetes 裸机集群则只能选择类似 MetalLB 这类解决方案,这种情况下如何让用户可以通过这个 IP 访问到自建 k8s 的服务呢,本文来分析一下其实现原理。\u003c/p\u003e\n\u003cp\u003e本文的环境安装了 MetallB,它指定分配 IP Pool 为内网 IP 地址,实验环境为 \u003ca href=\"https://blog.haohtml.com/posts/install-kubernetes-in-raspberry-pi/\"\u003ehttps://blog.haohtml.com/posts/install-kubernetes-in-raspberry-pi/\u003c/a\u003e。\u003c/p\u003e\n\u003ch1 id=\"将外部请求流入集群节点\"\u003e将外部请求流入集群节点\u003c/h1\u003e\n\u003cp\u003e当我们需要访问一台机器时,无论是使用 IP 地址还是域名,最终都需要将其解析为 IP 地址。而要真正建立连接并传输数据,我们必须获取目标 IP 地址对应的 MAC 地址,这是由于 TCP/IP 协议分层机制决定的。\u003c/p\u003e\n\u003cp\u003e在 TCP/IP 协议栈的链路层,数据是通过封装成数据帧的方式在局域网内传输的。数据帧中包含了目标 MAC 地址,用于标识应该将数据 …\u003c/p\u003e"
February 2, 2024
Raspberry Pi 安装Kubernetes
"\u003cp\u003e这里是 arm64 架构,\u003cstrong\u003e树莓派 4B\u003c/strong\u003e, 四核八 G 内存 配置,系统为 Ubuntu 22.04.1 LTS\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ uname -a\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eLinux ubuntu 5.15.0-1049-raspi \u003cspan style=\"color:#75715e\"\u003e#52-Ubuntu SMP PREEMPT Thu Mar 14 08:39:42 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ cat /etc/issue\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eUbuntu 22.04.1 LTS \u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e\\l\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"环境检查\"\u003e环境检查\u003c/h2\u003e\n\u003cp\u003e由于 k8s 会使用 8080 和 6443 这两个端口,因此要保证端口可用,然后禁用 swap。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo swapoff -a\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e最后对安装环境初始化,参考 \u003ca href=\"https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/\"\u003ehttps://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"安装-docker\"\u003e安装 Docker\u003c/h2\u003e\n\u003cp\u003e参考 \u003ca href=\"https://docs.docker.com/engine/install/ubuntu/\"\u003ehttps://docs.docker.com/engine/install/ubuntu/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e安装成功后,修改 \u003ccode\u003ecgroupdriver\u003c/code\u003e 为 \u003ccode\u003esystemd\u003c/code\u003e, …\u003c/p\u003e"
August 16, 2021
k8s安装负载均衡器:Metallb
"\u003cp\u003e在使用kubenetes的过程中,如何将服务开放到集群外部访问是一个重要的问题。当使用云平台(阿里云、腾讯云、AWS等)的容器服务时,我们可以通过配置 service 为 \u003cstrong\u003eLoadBalancer\u003c/strong\u003e 模式来绑定云平台的负载均衡器,从而实现外网的访问。但是,如果对于自建的 kubernetes裸机集群,这个问题则要麻烦的多。\u003c/p\u003e\n\u003cp\u003e祼机集群不支持负载均衡的方式,可用的不外乎NodePort、HostNetwork、ExternalIPs等方式来实现外部访问。但这些方式并不完美,他们或多或少都存在的一些缺点,这使得裸机集群成为Kubernetes生态系统中的二等公民。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/metallb/metallb\"\u003eMetalLB\u003c/a\u003e 旨在通过提供与标准网络设备集成的Network LB实施来解决这个痛点,从而使裸机群集上的外部服务也尽可能“正常运行”,减少运维上的管理成本。它是一种纯软件的解决方案,参考 \u003ca href=\"https://kubernetes.github.io/ingress-nginx/deploy/baremetal/\"\u003ehttps://kubernetes.github.io/ingress-nginx/deploy/baremetal/\u003c/a\u003e。\u003c/p\u003e\n\u003cp\u003e从 v0.13.0 版本开始,官方对解决方案进行了部分调整,操作步骤简洁一些,建议使用最新版本, …\u003c/p\u003e"