使用 MetalLB 负载均衡器时无法连接到 Kubernetes Deployment (App)。尝试配置浮动 IP,因此当一个节点发生故障并且工作负载转移时,我仍然知道在具有新地址的新节点上的 IP 是什么。
部署:
- 4x Raspberry Pi 4s 上的 Raspbian
- 在以太网端口上启用混杂模式
- 码头工人 + 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-服务-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) 在 en0 ifscope [以太网] 上的 dc:a6:32:b:fc:d
- 〜用户$ arp 192.168.0.240
- ? (192.168.0.240) 在 en0 ifscope [以太网] 上的 dc:a6:32:b:fc:d