【问题标题】:MetalLB with Kubernetes, Can't connect to VIP or PortMetalLB 与 Kubernetes,无法连接到 VIP 或端口
【发布时间】:2021-03-18 02:46:01
【问题描述】:

使用 MetalLB 负载平衡器时无法连接到 Kubernetes 部署(应用程序)。尝试配置浮动 IP,以便当一个节点发生故障并且工作负载转移时,我仍然知道在具有新地址的新节点上的 IP 是什么。

已部署:

  1. 4x Raspberry Pi 4s 上的 Raspbian
  2. 在以太网端口上启用混杂模式
  3. Docker + Kubernetes
  4. CNI - 编织(设置 NO_MASQ_LOCAL = 1)。 [我也用 Flannel 进行了设置,结果相同]
  5. NGINX 泊坞窗图像
  6. 具有 Layer2 的 MetalLB(节点网络为 192.168.0.0/24,MetalLB 的 YAML 为 VIP 192.168.0.240/28 分配了一个小子网)

已验证:

  1. 部署 (NGINX) 在 CNI IP (10.44.0.1:80) 上工作。使用 curl 验证从节点托管容器到容器 IP。
  2. 部署 (NGINX) 使用节点 IP (192.168.0.102) 在 Nodeport 上工作。通过从笔记本电脑 curl 到节点进行验证。

部署.yaml

metallb.yaml

apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: my-ip-space protocol: layer2 addresses: - 192.168.0.240/28

nginx.yaml apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1 ports: - name: http containerPort: 80

nginx-service -lb.yaml apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: selector: app: nginx type: LoadBalancer ports: - port: 80 name: http protocol: TCP targetPort: 80

结果

我认为可行:

  1. 我认为笔记本电脑向 VIP 发出的 ARP 请求正在运行,出现托管容器的节点的 MAC 地址。

不起作用:

  1. 部署分配 VIP 192.168.0.240 和端口 X 的负载平衡器,但是当我尝试从工作节点或我的笔记本电脑连接到此时失败。我的笔记本电脑 IP 在同一个网络中。该 VIP 所在的节点也无法执行 curl 请求。
  2. 我尝试将负载平衡子网设置为部署节点的 /32,以查看它是 IP 还是 ARP 问题。这样做时,我可以验证 MetalLB 分配的端口是否打开,但没有响应。这是在我的笔记本电脑上完成的。

笔记本电脑的结果

  1. ~用户$ curl 192.168.0.102:31854
    • curl: (7) 连接 192.168.0.102 端口 31854 失败:连接被拒绝

笔记本电脑的ARP请求.102是节点,.240是MetalLB分配的VIP

  1. ~用户$ arp 192.168.0.102
    • ? (192.168.0.102) 在 dc:a6:32:b:fc:d on en0 ifscope [以太网]
  2. ~用户$ arp 192.168.0.240
    • ? (192.168.0.240) 在 dc:a6:32:b:fc:d on en0 ifscope [以太网]

【问题讨论】:

  • 可以分享kubectl show svc的相关输出吗?

标签: kubernetes raspbian raspberry-pi4 metallb


【解决方案1】:

我们遇到了一个以完全相同的方式表现出来的问题,我们将其追溯到将 MetalLB 网络与另一个网络(我们的办公室无线网络)桥接的 Windows 操作系统网桥。

还有可能以类似方式出现的其他问题(例如防火墙配置),因此要验证是否是桥接网络导致了问题,请运行

arping -I <interface> <target ip>

其中&lt;interface&gt; 是MetalLB 网络上可路由的接口(在你的例子中是en0),&lt;target ip&gt; 是Kubernetes 服务的外部IP(在你的例子中是192.168.0.240)。如果是网桥导致问题,您将看到与 2 个不同 MAC 地址关联的 IP(或更多,取决于网桥的数量)。

一旦 MetalLB 分配了 IP 地址,桥接网络似乎就可以工作,即使在重新部署服务或部署新服务时也是如此。

如果存在网桥并且您必须对其进行维护,请考虑将 MetalLB 配置为 BGP 模式。

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 2013-08-21
    • 2018-11-10
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    相关资源
    最近更新 更多