首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >k8s:使用iptables从公共贵宾转发到clusterIP

k8s:使用iptables从公共贵宾转发到clusterIP
EN

Stack Overflow用户
提问于 2020-02-06 17:09:40
回答 1查看 1.1K关注 0票数 1

我试图深入了解从公开公开的负载均衡器层到服务集群I的转发是如何工作的。我读过一篇高层概述,我和MetalLB做的试图通过设置备存/ucarp和iptables规则手动复制它。但是,我一定是错过了什么东西,因为它不起作用;-]

我采取的步骤:

  1. 创建一个具有kubeadm的集群,其中包含一个主节点+3个节点,在一台计算机上运行k8s-1.17.2 + calico-3.12的libvirt/KVM KVM。所有VM都在192.168.122.0/24虚拟网络中。
  2. 创建了一个简单的2pod部署,并将其公开为NodePort服务,并将externalTrafficPolicy设置为cluster$ kubectl get svc dump-request NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dump-request NodePort 10.100.234.120 <none> 80:32292/TCP 65s 我已经验证了我可以从每一个节点的32292端口的IP上的主机到达它。
  3. 在所有三个节点上创建一个具有ucarp的VIP: ucarp -i ens3 -s 192.168.122.21 -k 21 -a 192.168.122.71 -v 71 -x 71 -p dump -z -n -u /usr/local/sbin/vip-up.sh -d /usr/local/sbin/vip-down.sh (knode1中的示例) 我已经证实了我可以平192.168.122.71贵宾。我甚至可以通过它向目前持有VIP的VM提供服务。 现在,如果kube处于iptables模式,我也可以通过http://192.168.122.71:32292的VIP到达它的节点端口上的服务。然而,令我惊讶的是,在ipvs模式下,这总是导致连接超时。
  4. 在每个节点上添加了一个iptables规则,用于将传入192.168.122.71的数据包转发到服务的集群-IP 10.100.234.120iptables -t nat -A PREROUTING -d 192.168.122.71 -j DNAT --to-destination 10.100.234.120 (稍后,我还尝试将规则缩小到相关端口,但它没有以任何方式改变结果: iptables -t nat -A PREROUTING -d 192.168.122.71 -p tcp --dport 80 -j DNAT --to-destination 10.100.234.120:80)

结果:

iptables模式下,所有对http://192.168.122.71:80/的请求都会导致连接超时。

ipvs模式下,它部分工作:

如果192.168.122.71贵宾是由一个有吊舱的节点持有的,那么大约50%的请求是成功的,并且总是由本地的吊舱提供服务。该应用程序还获得了主机(192.168.122.1)的真正远程IP。其余的50% (可能是被送到花药节的豆荚)是超时的。

如果VIP是由一个没有吊舱的节点持有的,那么所有请求都是超时的。

我还检查了它是否会影响结果,在任何时候都保留所有节点的规则,而只保留在持有VIP的节点上,并在VIP发布时删除它:在这两种情况下,结果都是相同的。

有谁知道为什么它不起作用以及如何修复它?(我会很感激你在这方面的帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 10:14:30

还需要添加MASQUERADE规则,以便相应地更改源。例如:

iptables -t nat -A POSTROUTING -j MASQUERADE

ipvs测试

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

https://stackoverflow.com/questions/60100233

复制
相关文章

相似问题

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