首页 > 解决方案 > 启用 hostNetwork:仅适用于 IPv6

问题描述

我正在寻找一种使用 hostNetwork: true 但仅适用于 IPv6 的方法,我需要主机 ipv6 功能,但还希望有一个用于 pod 的内部网络(例如用于 prometheus 或准备好的 HTTP 服务器)如​​果我启用 hostNetwork = true我无法绑定额外的 HTTP 服务器,因为它绑定到主机。

谢谢!

标签: kuberneteskubernetes-podproject-calico

解决方案


仅使用 IPv6

如果您希望只使用 IPv6(通过禁用 IPv4)或者您的主机只有 IPv6 地址,则必须通过设置 IP 为来 禁用 IPv4 的自动检测none。使用该集合,您还必须将 a 传递 CALICO_ROUTER_ID 给每个 calico-node pod。

要禁用 IPv4,我们需要允许节点的 IPv4 为空:

  spec:
    bgp:
      ipv4Address: none
      ipv6Address: ff9b::/128

但问题是在bird(6) 配置中ipv4 地址被用作路由器ID,不幸的是它并不像使用ipv6 地址那样简单。

看一下:bgp-router-ipv6ipv6-calico-only

另请参阅:calico-ipv6-only

您可以在节点中添加默认 gw。添加默认 gw 并尝试 curl 命令以从您的主机访问您的 API 服务 IP 地址。除非无法访问,否则您的集群将不会启动。示例 IP 2001:db8:0:f101::2,添加一个虚拟路由,如下图:

sudo /sbin/route -A inet6 add default gw 2001:0db8:0:f101::1

如果您使用 ipvs 而不是 iptables,我可以看到它在没有任何默认路由的情况下工作,因为 ipvsadm 正在添加以下规则。fd20::1 是我的集群IP

TCP [fd20::1]:443 rr  
-> [2001:db8:0:f101::2]:6443 Masq 1 5 0

推荐阅读