Tasks

Step-by-step instructions for performing operations with Kubernetes.

Edit This Page

IP 伪装代理用户指南

此页面将向您展示如何配置和启用 ip-masq-agent。

Before you begin

Kubernetes 1.7 You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using Minikube, or you can use one of these Kubernetes playgrounds:

To check the version, enter kubectl version.

创建 ip-masq-agent

要创建 ip-masq-agent,运行下面的 kubectl 命令:

kubectl create -f https://raw.githubusercontent.com/kubernetes-incubator/ip-masq-agent/master/ip-masq-agent.yaml

关于 ip-masq-agent 的更多信息请参考 该文档

在大多数情况下,默认的一套规则应该是足够的;但是,如果内置的规则不适用于您的集群,您可以创建并应用 ConfigMap 来自定义受影响的 IP 范围。例如,为了仅允许 ip-masq-agent 考虑 10.0.0.0/8,您可以在名为 “config” 的文件中创建以下 ConfigMap

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s

注意:重要的是,该文件被命名为 config,因为默认情况下,该文件将被用作 ip-masq-agent 查找的关键字。

运行下列命令将 ConfigMap 添加到您的集群中:

kubectl create configmap ip-masq-agent --from-file=config --namespace=kube-system

这将会更新 /etc/config/ip-masq-agent 文件,并每隔 resyscInterval 时间段检查一遍该文件,将配置应用到集群的节点中。

iptables -t nat -L IP-MASQ-AGENT
Chain IP-MASQ-AGENT (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local
MASQUERADE  all  --  anywhere             anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

默认情况下,本地链路范围(169.254.0.0/16)也由 ip-masq 代理处理,该代理设置相应的 iptables 规则。想要让 ip-masq-agent 忽略本地链路,您可以在 ConfigMap 中将 masqLinkLocal 设置为 true。

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s
masqLinkLocal: true

IP 伪装代理用户指南

ip-masq-agent 用户配置 iptables 规则将 Pod 的 IP 地址隐藏在集群 node 节点的 IP 地址后面。这通常在将流量发送到群集的 pod CIDR 范围之外的目的地时执行。

关键术语

Ip-masq-agent 在将流量发送到集群 node 节点的 IP 和 Cluster IP 范围之外的目的地时,会配置 iptables 规则来处理伪装的 node/pod IP 地址。这基本上将 pod 的 IP 地址隐藏在了集群 node 节点的 IP 地址后面。在某些环境中,到 “外部” 地址的流量必须来自已知的机器地址。例如,在 Google Cloud 中,到互联网的任何流量必须来自虚拟机的 IP。当使用容器时,如在GKE中,Pod IP 将被拒绝作为出口。为了避免这种情况,我们必须将 Pod IP 隐藏在 VM 自己的 IP 地址之后——通常被称为 “伪装”。默认情况下,配置代理将 RFC 1918 指定的三个专用 IP 范围视为非伪装 CIDR。范围包括 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。默认情况下,代理还将本地链路(169.254.0.0/16)视为非伪装 CIDR。代理配置为每隔60秒从 /etc/config/ip-masq-agent 位置重新加载其配置,这也是可配置的。

masq/non-masq example

代理的配置文件必须使用 yaml 或 json 语法,并且包含以下三个可选的 key:

到 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16 范围的流量将不会被伪装。任何其他流量(假定是互联网)将被伪装。这里有个例子,来自 pod 的本地目的地址可以是其节点的 IP 地址、其他节点的地址或 Cluster IP 范围中的一个 IP 地址。其他任何流量都将默认伪装。以下条目显示 ip-masq-agent 应用的默认规则集:

iptables -t nat -L IP-MASQ-AGENT
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             172.16.0.0/12        /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             192.168.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
MASQUERADE  all  --  anywhere             anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

默认情况下,在 GCE/GKE 中将启动 kubernetes 1.7.0 版本,ip-masq-agent 已经在集群中运行。如果您在其他环境中运行 kubernetes,那么您可以将 ip-masq-agent 以 DaemonSet 的方式在集群中运行。

Analytics

Create an Issue Edit this Page