平台前提条件

集群节点上的 Linux 内核模块要求

在用 Istio 代理 Sidecar 容器运行应用程序 Pod 的集群节点上使用 iptables 拦截模式时,需要加载某些内核模块。Istio 也可以工作在没有 iptables 的 whitebox 模式下。如果使用的是这种模式,可以忽略本节内容,因为这种模式不需要任何专用的内核模块。

具体而言,istio-init 容器或 istio-cni 守护进程需要这些内核模块,才能在 Pod 中设置 iptables 规则,将任何传入或传出的流量重定向到 istio-proxy 容器中的 Sidecar 代理。尽管在许多平台上这些模块看起来像是自动加载的,但请务必确保满足相应的前提条件, 因为我们曾多次接报以下列出的某些专用模块在主机上不可用,或无法通过 iptables 自动加载。 例如,这个 selinux issue 就在讨论 RHEL 中的 selinux 有时会阻止自动加载下述某些内核模块。

模块备注
br_netfilter
ip6table_mangle仅适用于 IPv6 或双栈集群
ip6table_nat仅适用于 IPv6 或双栈集群
ip6table_raw仅适用于 IPv6 或双栈集群
iptable_mangle
iptable_nat
iptable_raw仅适用于 DNS 拦截
xt_REDIRECT
xt_connmark仅适用于 TPROXY 拦截模式
xt_conntrack
xt_mark仅适用于 TPROXY 拦截模式
xt_owner
xt_tcpudp
xt_multiport

以下更多模块由上述列出的模块使用,也应该加载到集群节点上:

模块备注
bridge
ip6_tables仅适用于 IPv6 或双栈集群
ip_tables
nf_conntrack
nf_conntrack_ipv4
nf_conntrack_ipv6仅适用于 IPv6 或双栈集群
nf_nat
nf_nat_ipv4
nf_nat_ipv6仅适用于 IPv6 或双栈集群
nf_nat_redirect
x_tables