我有一个kubernetes 1.13版本集群(目前是一个节点),它安装在带kubeadm的裸金属上。该节点有两个网络接口连接到它,用于测试目的。理想的情况是,在未来,一个接口应该面向intranet,另一个应该面向公共网络。到那时,节点的数量也将大于一个。
对于内部网入口,我使用HAProxy的头盔图表( https://github.com/helm/charts/tree/master/incubator/haproxy-ingress )设置该配置:
rbac:
create: true
serviceAccount:
create: true
controller:
ingressClass: "intranet-ingress"
metrics:
enabled: true
stats:
enabled: true
service:
type: LoadBalancer
externalIPs:
- 10.X.X.X # IP of one of the network interfaces
service:
externalIPs:
- 10.X.X.X # IP of the same interface然后交通到达哈代,具体如下:
1. Client's browser, workstation has an IP from 172.26.X.X range
--local network, no NAT -->
2. Kubernetes server, port 443 of HAProxy's load balancer service
--magic done by kube-proxy, possibly NAT(which shoudn't have been here)-->
3. HAProxy's ingress controller podHAProxy访问日志显示的源IP为10.32.0.1。这是一个来自kubernete网络层的IP。Kubernetes pod CIDR为10.32.0.0/12。然而,我需要访问日志来显示连接的实际源IP。
我已经尝试过手工编辑由HAProxy创建的负载平衡器服务并设置externalTrafficPolicy: Local。这没什么用。
如何在此配置中获取客户端的源IP?
发布于 2019-05-21 12:20:29
我已经解决了这个问题,原来的配置中有几个问题。
首先,我没有提到我的网络提供商是什么。我使用的是weave-net,而且事实证明,即使kubernetes文档指出,为了保持源IP,向负载均衡器服务添加externalTrafficPolicy: Local就足够了,除非您特别启用它,否则它不会与weave-net一起工作。因此,在我使用的织网版本(2.5.1)中,您必须添加以下环境变量来编织-net DeamonSet NO_MASQ_LOCAL=1。有关更多细节,请参阅他们的文档。
老实说,在那之后,我的记忆有点模糊,但我认为你在这个阶段得到的是一个集群,其中:
第二,问题是kubernetes不支持真正的LoadBalancer服务。如果您决定坚持“标准”设置而不添加任何其他设置,则必须将您的荚限制为仅在绑定了LB IP地址的集群节点上运行。这使得管理集群变得非常麻烦,因为您将非常依赖于节点上组件的特定安排。你也会失去冗余。
要解决第二个问题,您必须为裸金属设置配置负载均衡器实现提供程序。我个人使用了MetalLB。对其进行配置后,您将为负载平衡器服务提供一个IP地址列表,这些IP地址是虚拟的,因为它们没有附加到特定的节点上。每次kubernetes启动一个接受来自LB服务的流量的荚时,它都会将一个虚拟IP地址附加到同一个节点上。因此,LB IP地址总是与吊舱一起移动,您不必通过kubernetes网络路由外部通信。因此,您可以获得100%的源IP保存。
https://stackoverflow.com/questions/55783255
复制相似问题