Weave Net创建了一个虚拟网络,可以跨多个主机连接Docker容器并启用它们的自动发现。使用Weave Net,由多个容器组成的基于便携式微服务的应用程序可以在任何地方运行:在一个主机,多个主机上,甚至跨云提供商和数据中心。应用程序使用网络就像容器全部插入同一网络交换机一样,无需配置端口映射,中继或链接。

@[TOC]

Weave Net上的应用程序容器提供的服务可以暴露给外部世界,无论它们在何处运行。类似地,可以打开现有的内部系统以接受来自应用程序容器的连接,而不管它们的位置如何。

安装

在安装Weave Net之前,应确保防火墙未阻止以下端口:TCP 6783和UDP 6783/6784。有关详细信息,请参见常见问题解答

可以使用单个命令将Weave Net安装到启用CNI的Kubernetes集群上:

1
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

几秒钟后,Weave Net pod应该在每个节点上运行,您创建的任何其他pod将自动连接到Weave网络。

注意:此命令需要Kubernetes 1.4或更高版本,我们建议您的主节点至少具有两个CPU核心。

1
2
3
4
5
注意:如果使用Weave Net之前完全安装Weave Net 的Weave CNI插件,则必须先将其卸载,然后再应用Weave-kube插件。关闭Kubernetes,并在所有节点上执行以下操作:
weave reset
删除您在启动时运行Weave所做的任何单独规定,例如systemd单位
rm /opt/cni/bin/weave-*
然后重新启动Kubernetes并按上述方法安装插件。

升级DaemonSet

DaemonSet 定义指定滚动更新,因此当您应用新版本时,Kubernetes将自动逐个重新启动Weave Net窗格。

CPU和内存要求

Kubernetes管理 每个节点上的资源,并且仅调度pod以在具有足够可用资源的节点上运行。

典型的Kubernetes安装的组件(主节点运行etcd,调度程序,api-server等)占用了大约95%的CPU,几乎没有空间运行其他任何东西。要使Weave Net的所有功能都能正常工作,它必须在每个节点上运行,包括主节点。

解决此问题的最佳方法是使用具有至少两个CPU核心的计算机。但是,如果您是第一次安装Kubernetes和Weave Net,您可能不会意识到这一要求。出于这个原因,Weave Net作为DaemonSet启动,其规范为每个容器保留至少1%的CPU。这使Weave Net能够在单CPU节点上无缝启动。

根据工作负载,Weave Net可能需要超过1%的CPU。DaemonSet中设置的百分比是最小值而不是限制。这个最小设置允许Weave Net利用可用的CPU,并在需要时“突发”超过该限制。

Pod Eviction

如果节点耗尽CPU,内存或磁盘,Kubernetes可能会决定驱逐 一个或多个pod。它可能会选择驱逐Weave Net pod,这会破坏pod网络的运营。

您可以通过更改DaemonSet以获得更大的请求以及相同值的限制来减少驱逐的机会。

这导致Kubernetes应用“保证”而不是“可爆”政策。但是,无法对磁盘空间进行类似的请求,因此请注意此问题并监视您的资源以确保它们保持在100%以下。

Pod网络

Weave Net提供了一个网络,可以将所有pod连接在一起,实现Kubernetes模型。

Kubernetes使用容器网络接口 (CNI)将pod连接到Weave Net。

Kubernetes在pod网络之上实现了许多网络功能。这包括 服务, 通过DNS的服务发现 和进入群集的Ingress。使用Kubernetes插件时,WeaveDNS被禁用。

网络策略

Kubernetes网络策略允许您根据命名空间和标签安全地隔离pod。有关在Kubernetes中配置网络策略的详细信息,请参阅 演练NetworkPolicy API对象定义

注意:从Weave Net 1.9版开始,网络策略控制器允许所有多播流量。由于多个pod可能使用单个多播地址,因此我们无法实现规则来单独隔离它们。您可以通过在YAML配置中添加–allow-mcast=false参数来关闭此行为(阻止所有多播流量)weave-npc。

阅读日志

从列表输出中选择一个pod kubectl get pods并询问如下日志:

$ kubectl logs -n kube-system weave-net-1jkl6 weave

需要注意的事项

  1. 不要打开--masquerade-allkube-proxy:这将改变每个pod-to-pod对话的源地址,这将使得无法正确实施限制哪些pod可以通话的网络策略。
  2. 如果你--cluster-cidrkube-proxy上设置了选项,请确保它与IPALLOC_RANGE给定的Weave Net 相匹配(见下文)。
  3. 必须在每个节点上启用IP转发,以便pod访问另一个网络上的Kubernetes服务或其他IP地址。检查一下sysctl net.ipv4.ip_forward; 结果应该是1。(请注意,启用IP转发可能会产生安全隐患)。
  4. Weave Net可以在minikube v0.28或更高版本上运行,默认的CNI配置随minikube一起被禁用。有关 详细信息,请参阅#3124。

更改配置选项

通过在URL末尾追加此命令 &password-secret=weave-passwd- 生成一个YAML文件

1
curl -fsSLo weave-daemonset.yaml "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&password-secret=weave-passwd"

  • version:Weave Net的版本。默认值:latest,即最新版本。
  • password-secret:包含密码的Kubernetes秘密的名称。 注意:Kubernetes密码必须与包含密码的文件名相对应
  • known-peers:以逗号分隔的主机列表。默认值:空。
  • trusted-subnets:逗号分隔的CIDR列表。默认值:空。
  • disable-npc:boolean(true|false)。默认值:false。
  • env.NAME=VALUE:添加环境变量NAME并将其设置为VALUE。
  • seLinuxOptions.NAME=VALUE:添加SELinux选项NAME并将其设置为VALUE,例如seLinuxOptions.type=spc_t

您可以设置的变量列表是:

  • CHECKPOINT_DISABLE - 如果设置为1,则禁用检查新的Weave Net版本(默认为空,即启用检查)
  • CONN_LIMIT - 对等体之间连接数的软限制。默认为30。
  • HAIRPIN_MODE- Weave Net默认为在veth附加的容器的桥侧启用发夹。如果你需要禁用发夹,例如你的内核是启用了发夹的恐慌之一,那么你可以通过设- 置禁用它HAIRPIN_MODE=false。
  • IPALLOC_RANGE- Weave Net使用的IP地址范围及其所在的子网(CIDR格式;默认10.32.0.0/12)
  • EXPECT_NPC - 设置为0以禁用网络策略控制器(默认打开)
  • KUBE_PEERS - Kubernetes集群中对等体的地址列表(默认是从api-server获取列表)
  • IPALLOC_INIT- 设置IP地址管理器的初始化模式 (默认为共识KUBE_PEERS)
  • WEAVE_EXPOSE_IP - 将用作网关的IP地址从Weave网络设置为主机网络 - 如果您将插件配置为静态pod,这将非常有用。
  • WEAVE_METRICS_ADDR - Weave Net守护程序将提供Prometheus样式度量标准的地址和端口(默认为0.0.0.0:6782)
  • WEAVE_STATUS_ADDR - Weave Net守护程序将为状态请求提供服务的地址和端口(默认为禁用)
  • WEAVE_MTU- Weave Net默认为1376字节,但如果您的基础网络有更严格的限制,您可以设置更小的大小,或者如果您的网络支持巨型帧,您可以设置更- 大的大小以获得更好的性能 - 有关详细信息,请参阅此处。
  • NO_MASQ_LOCAL- 设置为1以在访问带注释的服务时保留客户端源IP地址service.spec.externalTrafficPolicy=Local。该功能仅适用于Weave IPAM(默认)。

指定IPALLOC_RANGE 示例

1
curl -fsSLo weave-daemonset.yaml "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&env.IPALLOC_RANGE=10.42.0.0/16"

yaml其中包含:

1
2
3
4
5
6
7
8
spec:
containers:
- name: weave
command:
- /home/weave/launch.sh
env:
- name: IPALLOC_RANGE
value: 10.42.0.0/16

手动编辑YAML文件

无论您是cloud.weave.works从我们的发布页面保存了YAML文件还是从我们的发布页面下载了静态YAML文件,您都可以手动编辑它以满足您的需求。

例如,

通过将它们添加到command:YAML文件中的数组,可以向Weave路由器进程提供其他参数,
可以通过上面列出的环境变量设置其他参数; 这些可以像这样插入到YAML文件中:

1
2
3
4
5
containers:
- name: weave
env:
- name: IPALLOC_RANGE
value: 10.0.0.0/16

参考

  1. From Integrating Kubernetes via the Addon
  2. kubeadm Installing a pod network add-on