具有多个外部IP的Kube-Proxy

时间:2018-03-21 14:49:38

标签: linux centos kubernetes iptables

我想运行多个Kubernetes服务,并使用externalIPs字段为这些服务将特定服务绑定到特定IP。

我有一个有三个接口的VM:

  1. 内部接口(eth0)
  2. 外部接口(eth1)
  3. 外部接口(eth2)
  4. 我已经为接口2和3添加了iproute2表/路由/规则,注意流量通过正确的接口进行反向路由。

    只要kubelet / kube-proxy没有运行,一切都按预期工作。 (例如,运行nc来提供一些数据。)

    一旦kubelet / kube-proxy启动,一些(我不知道哪个)iptables配置被创建,这会丢弃包。 (至少这是tcpdump中的样子。)

    如果我在节点上只运行一个IP,一切都按预期工作 - 所以我假设问题是第二个IP和某种路由。

    以下是启动kubelet服务之前和之后的iptables配置。 我已经匿名化了该文件并删除了显然无关的内容 - 如果我删除了很多内容,请告诉我。

    有人运行类似的设置吗? 如何配置kube-proxy和/或操作系统来设置这种网络? 有什么想法继续进行调试吗?

    我在CentOS7上运行Kubernetes 1.6.4。

1 个答案:

答案 0 :(得分:0)

Kube-proxy尝试管理它拥有的所有接口,当然,还强制执行一些规则(包括过滤)来提供服务。

如果您真的想在服务器上使用多个接口并同时在接口之间保存自定义转发规则,则可以将所有组件绑定到内部接口(在您的情况下为eth0)并管理所有其他根据需要手动接口。

对于set one接口,您应该使用CLI args:

  • kubelet守护程序 - --address
  • kube-proxy守护程序 - --bind-address
  • kube-api守护程序 - --bind-address

但请记住,您需要将这些接口用于集群内的所有互通,而HostNetwork等标志也只为您提供该接口。