.. _metallb_with_cilium: ======================== 在Cilium网络部署MetalLB ======================== 我在 :ref:`cilium_k8s_ingress_http` 配置 ingress 输出 http服务时,遇到一个问题: 默认配置 LoadBalancer 类型服务,但是由于是裸机部署,并没有云厂商提供的负载均衡。所以Ingress一直没有分配到IP地址,也没有对应的 External-IP。 解决方法是部署 metallb 来提供对外服务IP地址 安装 ======= - 在集群安装MetalLB: .. literalinclude:: metallb_with_cilium/kubectl_metallb-native :language: bash :caption: kubectl apply 安装 MantalLB 输出显示: .. literalinclude:: metallb_with_cilium/kubectl_metallb-native_output :language: bash :caption: kubectl apply 安装 MantalLB 输出显示 .. note:: 其他安装方法请参考 `metallb Installation `_ 配置 ====== - 创建 ``z-k8s-ip-pool.yaml`` .. literalinclude:: metallb_with_cilium/z-k8s-ip-pool.yaml :language: yaml :caption: 为负载均衡定义IPAddressPool CR - 创建IP池: .. literalinclude:: metallb_with_cilium/kubectl_create_ipaddresspool :language: bash :caption: 负载均衡创建IPAddressPool 完成后检查 ``svc`` 和 ``ingress`` 会立即看到IP池中的IP被分配给了LoadBalancer EXTERNAL-IP: .. literalinclude:: metallb_with_cilium/kubectl_get_svc :language: bash :caption: 检查SVC cilium-ingress-basic-ingress 输出显示IP池的第一个IP地址被分配给LoadBalancer的EXTERNAL-IP: .. literalinclude:: metallb_with_cilium/kubectl_get_svc_output :language: bash :caption: 检查SVC cilium-ingress-basic-ingress 输出显示EXTERNAL-IP分配成功 再检查 ingress 也看到ADDRESS分配了同样的IP地址: .. literalinclude:: metallb_with_cilium/kubectl_get_ingress :language: bash :caption: 检查ingress 输出信息: .. literalinclude:: metallb_with_cilium/kubectl_get_ingress_output :language: bash :caption: 检查ingress可以看到分配了相同的IP 但是此时,不管是ping还是telnet访问不了这个分配好的 IP 地址 ``192.168.6.151`` ,原因是还没有声明服务IP地址,这个步骤有多种声明方式,比较简单的是 Layer 2 配置: - 配置 ``z-k8s-ip-pool_announce.yaml`` : .. literalinclude:: metallb_with_cilium/z-k8s-ip-pool_announce.yaml :language: yaml :caption: 申明IP地址池的ARP公告 - 执行IP地址池ARP声明: .. literalinclude:: metallb_with_cilium/ip-pool_announce :language: yaml :caption: 申明IP地址池的ARP公告 现在虽然 ``ping 192.168.6.151`` 没有响应,但是 ``telnet 192.168.6.151 80`` 端口可以打开了,证明负载均衡输出SVC成功 现在使用浏览器访问 http://192.168.6.151 就可以看到在 :ref:`cilium_k8s_ingress_http` 搭建的案例WEB网站了,说明服务输出正确了 参考 ==== - `Kubernetes service external ip pending `_ - `metallb Configuration `_