K8s metallb 负载均衡器 IP 有时无法访问

问题描述 投票:0回答:1

我有一个内部部署的 k8s 集群,有 3 个 master 和 4 个 worker。安装了 Metallb,并从与本地集群 IP 相同的网络为他提供了 DHCP。

我尝试在集群中启动 Kubernetes Dashboard 应用程序,除 Kubernetes Dashboard 的 LoadBalancer 服务类型外,一切正常:

apiVersion: v1
metadata:
  annotations:
    metallb.universe.tf/address-pool: single-ip
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: LoadBalancer
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  externalIPs:
   - 192.168.1.129
root@master1:/# kubectl get services -n kubernetes-dashboard
NAME                        TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP      10.249.40.230   <none>            8000/TCP        6h8m
kubernetes-dashboard        LoadBalancer   10.249.3.22     192.168.1.129   443:32593/TCP   6h8m

应用所有配置后,仪表板开始在 https://192.168.1.129 从群集和我的计算机正确工作。

但是在一段时间后停止在我的电脑上工作,但继续在集群上工作。从我的电脑我得到“连接被拒绝错误”。

从我的电脑和集群 192.168.1.129 IP 正常 ping 没有任何问题。

externalTrafficPolicy 默认为 Cluster。将其更改为本地没有帮助。

发生什么事了?服务工作然后停止工作然后再次开始工作时如何解决问题? :)

kubernetes dhcp metallb
1个回答
0
投票

我让它再次工作的一种方法是更改 MetalLB 配置中的值以重新加载它。

编辑:

externalTrafficPolicy
Local
更改为
Cluster
后,对我来说似乎很稳定。

根据文档:https://metallb.universe.tf/usage/

Layer2 在 layer2 模式下发布时,集群中的一个节点将 为服务IP吸引流量。从那里,行为取决于 在选定的流量策略上。

“Cluster”流策略使用默认的Cluster流策略, 接收流量的节点上的 kube-proxy 做负载均衡, 并将流量分配给您服务中的所有 Pod。

此策略导致在所有 pod 中统一流量分配 服务。但是kube-proxy会隐藏源IP地址 进行负载平衡时的连接,因此您的 pod 日志将显示 外部流量似乎来自服务的领导者 节点。

“Local”流量策略 有了 Local 流量策略,kube-proxy on 接收流量的节点仅将其发送到服务的 位于同一节点上的 pod。没有“水平”流量 节点之间的流动。

因为kube-proxy不需要在集群节点之间发送流量, 您的 Pod 可以看到传入连接的真实源 IP 地址。

此策略的缺点是传入流量仅流向某些 服务中的豆荚。不在当前领导节点上的 Pod 没有流量,它们只是作为副本存在,以防故障转移 是需要的。

© www.soinside.com 2019 - 2024. All rights reserved.