首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes负载均衡器业务包源IP

Kubernetes负载均衡器业务包源IP
EN

Stack Overflow用户
提问于 2019-04-21 13:41:19
回答 1查看 903关注 0票数 0

我有一个kubernetes 1.13版本集群(目前是一个节点),它安装在带kubeadm的裸金属上。该节点有两个网络接口连接到它,用于测试目的。理想的情况是,在未来,一个接口应该面向intranet,另一个应该面向公共网络。到那时,节点的数量也将大于一个。

对于内部网入口,我使用HAProxy的头盔图表( https://github.com/helm/charts/tree/master/incubator/haproxy-ingress )设置该配置:

代码语言:javascript
复制
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

然后交通到达哈代,具体如下:

代码语言:javascript
复制
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 pod

HAProxy访问日志显示的源IP为10.32.0.1。这是一个来自kubernete网络层的IP。Kubernetes pod CIDR为10.32.0.0/12。然而,我需要访问日志来显示连接的实际源IP。

我已经尝试过手工编辑由HAProxy创建的负载平衡器服务并设置externalTrafficPolicy: Local。这没什么用。

如何在此配置中获取客户端的源IP?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 12:20:29

我已经解决了这个问题,原来的配置中有几个问题。

首先,我没有提到我的网络提供商是什么。我使用的是weave-net,而且事实证明,即使kubernetes文档指出,为了保持源IP,向负载均衡器服务添加externalTrafficPolicy: Local就足够了,除非您特别启用它,否则它不会与weave-net一起工作。因此,在我使用的织网版本(2.5.1)中,您必须添加以下环境变量来编织-net DeamonSet NO_MASQ_LOCAL=1。有关更多细节,请参阅他们的文档

老实说,在那之后,我的记忆有点模糊,但我认为你在这个阶段得到的是一个集群,其中:

  • NodePort service:不支持源IP保存。不知何故,这在AWS上工作,但不是由kubernetes本身支持裸金属,编织网不是错。
  • 将IP X绑定到另一个节点Y的IP上的LoadBalancer服务:不支持源IP保存,因为通信必须在kubernetes网络中路由。
  • 将IP X绑定到同一个IP X的节点上的LoadBalancer服务:我不太清楚,但我认为这是可行的。

第二,问题是kubernetes不支持真正的LoadBalancer服务。如果您决定坚持“标准”设置而不添加任何其他设置,则必须将您的荚限制为仅在绑定了LB IP地址的集群节点上运行。这使得管理集群变得非常麻烦,因为您将非常依赖于节点上组件的特定安排。你也会失去冗余。

要解决第二个问题,您必须为裸金属设置配置负载均衡器实现提供程序。我个人使用了MetalLB。对其进行配置后,您将为负载平衡器服务提供一个IP地址列表,这些IP地址是虚拟的,因为它们没有附加到特定的节点上。每次kubernetes启动一个接受来自LB服务的流量的荚时,它都会将一个虚拟IP地址附加到同一个节点上。因此,LB IP地址总是与吊舱一起移动,您不必通过kubernetes网络路由外部通信。因此,您可以获得100%的源IP保存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55783255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档