Kubernetes网络方案 Flannel和calico

摘抄某博客api

1.   Flannel

Flannel是为kubernetes设计的一个很是简洁的多节点三层网络方案,解决不一样host上的容器互联问题,原理是为每一个host分配一个subnet,容器今后subnet中分配IP,这些IP能够在host间路由,容器间无需NAT和port  mapping就能够跨主机通讯,每一个subnet都是从一个更大的IP池中划分的,flannel会在每一个host上面运行一个守护进程flanneld,其职责就是从大池子中分配subnet,为了各个主机间共享信息,flannel用etcd存放网络配置、已分配的subnet、host的IP 等信息。安全

Flannel的节点间有三种通讯方式:网络

1.  VXLAN:默认配置,利用内核级别的VXLAN来封装host之间传送的包。架构

2.  Host-gw:二层网络配置,不支持云环境,经过在host的路由表中直接建立到其余主机subnet的路由条目。app

3.  Udp:一般用于debugspa

 

提示:Subnet在主机上的设置路径/run/flannel/subnet.env插件

2.   Calico

Calico是一个比较完整的项目,比较注重安全转为云环境设置,是一个三层的数据中心网络架构,无需依托overlay网络,通过生产环境的验证。debug

Calico在每一个计算节点利用Linux Kernel实现了一个高效的vRouter来负责数据转发,而每一个vRouter经过BGP协议负责把本身上运行的workload的路由信息向整个Calico网络内传播,小规模部署能够直接互联,大规模部署可经过指定的BGP route reflector来完成。设计

Calico基于iptables还提供了丰富而灵活的网络Policy,保证经过各个节点上的ACLs来提供workload的多租户隔离、安全组以及其余可达性限制等功能。代理

3.   NetworkPolicy

1)         kube-apiserver必须开启运行时extensions/v1beta1/networkpolicies,即设置启动参数:--runtime-config=extensions/v1beta1/networkpolicies=true

2)         kubelet必须启用cni网络插件,即设置启动参数:--network-plugin=cni

3)         kube-proxy必须启用iptables代理模式,这是默认模式,能够不用设置

4)         kube-proxy不得启用--masquerade-all,这会跟calico冲突

5)         安装calico组件

6)         Namespaces中添加

annotations:

    net.beta.kubernetes.io/network-policy: |

      {

        "ingress": {

          "isolation": "DefaultDeny"

        }

      }

实现多租户,namespaces之间隔离

相关文章
相关标签/搜索