【发布时间】:2021-03-18 02:46:01
【问题描述】:
使用 MetalLB 负载平衡器时无法连接到 Kubernetes 部署(应用程序)。尝试配置浮动 IP,以便当一个节点发生故障并且工作负载转移时,我仍然知道在具有新地址的新节点上的 IP 是什么。
已部署:
- 4x Raspberry Pi 4s 上的 Raspbian
- 在以太网端口上启用混杂模式
- Docker + Kubernetes
- CNI - 编织(设置 NO_MASQ_LOCAL = 1)。 [我也用 Flannel 进行了设置,结果相同]
- NGINX 泊坞窗图像
- 具有 Layer2 的 MetalLB(节点网络为 192.168.0.0/24,MetalLB 的 YAML 为 VIP 192.168.0.240/28 分配了一个小子网)
已验证:
- 部署 (NGINX) 在 CNI IP (10.44.0.1:80) 上工作。使用 curl 验证从节点托管容器到容器 IP。
- 部署 (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
结果
我认为可行:
- 我认为笔记本电脑向 VIP 发出的 ARP 请求正在运行,出现托管容器的节点的 MAC 地址。
不起作用:
- 部署分配 VIP 192.168.0.240 和端口 X 的负载平衡器,但是当我尝试从工作节点或我的笔记本电脑连接到此时失败。我的笔记本电脑 IP 在同一个网络中。该 VIP 所在的节点也无法执行 curl 请求。
- 我尝试将负载平衡子网设置为部署节点的 /32,以查看它是 IP 还是 ARP 问题。这样做时,我可以验证 MetalLB 分配的端口是否打开,但没有响应。这是在我的笔记本电脑上完成的。
笔记本电脑的结果
- ~用户$ curl 192.168.0.102:31854
- curl: (7) 连接 192.168.0.102 端口 31854 失败:连接被拒绝
笔记本电脑的ARP请求.102是节点,.240是MetalLB分配的VIP
- ~用户$ arp 192.168.0.102
- ? (192.168.0.102) 在 dc:a6:32:b:fc:d on en0 ifscope [以太网]
- ~用户$ 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