我有一个本地k8s集群,有3个主集群和4个工人集群。安装了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。将其更改为Local没有帮助。
发生了什么?如何解决服务工作,然后停止工作,然后再次开始工作的问题?:)
我让它再次工作的一种方法是改变MetalLB配置中的一个值来重新加载它。
编辑:
将externalTrafficPolicy
从Local
改为Cluster
后,对我来说似乎是稳定的。
根据文档:https://metallb.universe.tf/usage/
Layer2当宣布为Layer2模式时,集群中的一个节点将为业务IP吸引流量。从那里,行为取决于
" Cluster "流量策略使用默认的Cluster流量策略,接收流量的节点上的Kube-proxy进行负载均衡,并将流量分配给您服务中的所有pod。
此策略导致所有pod之间的流量均匀分布该服务。但是,kube-proxy将模糊的源IP地址连接时进行负载平衡,因此您的pod日志将显示外部流量似乎来自该服务的领导者节点。
" Local "流量策略启用本地流量策略后,kube-proxy开启接收流量的节点只将其发送到服务位于同一节点上的Pod。没有"横向"交通节点间的流
因为kube-proxy不需要在集群节点之间发送流量,您的pods可以看到传入连接的真实源IP地址。
此策略的缺点是传入的流量只流向某些服务中的pod。不在当前领导节点上的pod不接收任何流量,它们只是作为副本存在,以防发生故障转移是必要的。