Kubernetes 如何使用MetalLB和入口控制器在裸机集群中传递传入流量?
我正试图在裸机k8s集群上向外界公开内部负载平衡 假设我们有一个基本的集群:Kubernetes 如何使用MetalLB和入口控制器在裸机集群中传递传入流量?,kubernetes,kubernetes-ingress,metallb,Kubernetes,Kubernetes Ingress,Metallb,我正试图在裸机k8s集群上向外界公开内部负载平衡 假设我们有一个基本的集群: 一些主节点和一些工作节点,具有两个接口,一个面向公共(eth0)和一个本地(eth1),ip位于192.168.0.0/16网络内 部署MetalLB并为其内部IP配置192.168.200.200-192.168.200.254范围 Ingress控制器及其带有LoadBalancer类型的服务 根据我目前的理解,MetalLB现在应该将192.168.200.200-192.168.200.254中的一个IP
是否可以转发请求保存源ip地址或附加X-Forwarded-For标头是唯一的选项?假设我们正在使用
Layer2
讨论Metallb
处理以下问题:
在每个节点上,我都可以使用附加的主机头对入口控制器externalIP进行卷曲(只要它们在eth1上可访问),并从在coresponding ingress resource中配置的服务获取响应,还是仅在当前放置入口吊舱的节点上有效
是否可以转发请求保存源ip地址或附加X-Forwarded-For头是唯一的选项
在保留源IP的前提下划分解决方案,这个问题可能有两个方面:
保留源IP地址 为此,您需要通过设置(在您的
YAML
清单中),将入口控制器的LoadBalancer
类型服务设置为支持“本地流量策略”:
.spec.externalTrafficPolicy:Local
只要在每个节点上都有入口控制器的副本,此设置就有效,因为进入控制器的所有网络都将包含在单个节点中
引用官方文件:
使用Local
流量策略,接收流量的节点上的kube proxy
仅将其发送到同一节点上的服务pod。节点之间没有“水平”流量
因为kube-proxy
不需要在集群节点之间发送流量,所以您的POD可以看到传入连接的真实源IP地址
此策略的缺点是,传入的流量只流向服务中的一些pod。不在当前leader节点上的POD不接收流量,它们只是作为副本存在,以防需要故障切换
不保留源IP地址
如果您的用例不要求您保留源IP地址,您可以使用:
.spec.externalTrafficPolicy:Cluster
此设置不要求每个节点上都有入口控制器的副本
引用官方文件:
使用默认的Cluster
流量策略,接收流量的节点上的kube proxy
执行负载平衡,并将流量分配到服务中的所有POD
此策略可在服务中的所有POD上实现统一的流量分布。但是,kube proxy
在进行负载平衡时会隐藏连接的源IP地址,因此pod日志将显示外部流量似乎来自服务的leader节点
关于第二个问题:
将传入的外部流量传递到eth0到eth1网络上侦听的入口的选项有哪些
默认情况下,所有接口上的Metallb侦听,您需要做的只是在Metallb配置中从此eth
指定地址池
您可以通过以下方式找到有关此主题的更多参考资料:
此类配置的一个示例如下:
apiVersion:v1
种类:配置地图
元数据:
名称空间:metallb系统
名称:config
数据:
配置:|
地址池:#此处
-名称:我的ip空间
协议:第2层
地址:
- 192.168.1.240/28
假设我们使用的是Layer2
处理以下问题:
在每个节点上,我都可以使用附加的主机头对入口控制器externalIP进行卷曲(只要它们在eth1上可访问),并从在coresponding ingress resource中配置的服务获取响应,还是仅在当前放置入口吊舱的节点上有效
是否可以转发请求保存源ip地址或附加X-Forwarded-For头是唯一的选项
在保留源IP的前提下划分解决方案,这个问题可能有两个方面:
保留源IP地址
为此,您需要通过设置(在您的YAML
清单中),将入口控制器的LoadBalancer
类型服务设置为支持“本地流量策略”:
.spec.externalTrafficPolicy:Local
只要在每个节点上都有入口控制器的副本,此设置就有效,因为进入控制器的所有网络都将包含在单个节点中
引用官方文件:
使用Local