深入Kubernetes络技术 -...
Transcript of 深入Kubernetes络技术 -...
深入Kubernetes⽹网络技术
陈星宇 浙江大学 SEL(VLIS)实验室 www.sel.zju.edu.cn
陈星宇: 浙江大学 计算机系研究生 研究方向 分布式系统 轻量级虚拟化 Docker User and Lover Google Kubernetes Contributor Email : [email protected] GitHub id : WIZARD-‐CXY
Docker Meetup. 杭州
演讲流程
1 • 回顾简介Docker网络模型
2 • 简介Kubernetes网络模型
3 • 高级Kubernetes网络实现
Docker Meetup. 杭州 3
Docker网络模型
Docker Meetup. 杭州
1 bridge (默认模式) 2 container:containerID 与其他容器共用网络命名空间 3 host 与宿主机共享网络命名空间 4 none 高级 用户自行设置
Docker网络模型
1 当Docker daemon进程启动时,它在主机系统上启动一个名为docker0的新的虚拟网桥接口。Docker分配一个虚拟子网,给未来的容器使用。
2 当新的容器启动时,一对新的虚拟接口被创建并赋予docker0网桥的子网范围内的地址。 3 Docker自动配置iptables规则允许同一主机上的容器互相通信并允许容器与外界通信。
Docker Meetup. 杭州
Docker网络模型
• 由上面讲的默认Docker网络模型,Docker容器无法跨主机通信。不在同一个虚拟网桥上!
• 使用NAT技术将容器服务端口暴露到宿主机 但是暴露的端口需要被静态或动态配置
Docker Meetup. 杭州
What is Kubernetes?
Docker Meetup. 杭州
• IP per Pod : 每一个pod有一个独立的IP地址,使用这个IP地址可以直接与其他机器上的容器通信
• 同一个Pod里的容器使用localhost通信
• 每个pod里自带一个infra容器,其他真正的用户容器共用他的net和ipc命名空间
⺴⽹网络模式—net=container:<infraContainerID>
Kubernetes 网络模型
Docker Meetup. 杭州
Kubernetes网络模型
Kubernetes运行对网络的要求: • 1 所有容器可以不使用NAT技术就可以与其他容器通信
• 2 所有节点(物理机 虚拟机 容器)都可以不使用NAT同容器通信 • 3 容器看到的IP地址和别的机器看到的IP是一致的 这种模式便利了将虚拟机里的app迁移到容器里与服务发现等功能
Docker Meetup. 杭州
如何实现Kubernetes对网络的要求
• Google Compute Engine
• 很多种开源的解决方法!
• 本质是在一般的网路上再架设一层overlay network , 使容器的网络运行在这层overlay 网络上。
Docker Meetup. 杭州
Flannel
• Flannel(h`ps://github.com/coreos/flannel) 满足Kubernetes网络要求的一个非常简单的搭建overlay network的工具。它可以在几分钟内安装成功。很多使用Kubernetes的人都使用flannel搭建成功overlay network。 比如由我们开发的针对Ubuntu 系统的Kubernetes部署方法: h`ps://github.com/GoogleCloudPlacorm/kubernetes/blob/master/docs/gedng-‐started-‐guides/ubuntu_mulfnodes_cluster.md
Docker Meetup. 杭州
Flannel运行原理
Flannel使用Linux通用TUN/ TAP设备,并使用UDP封装IP数据包创建一个覆盖网络。它使用etcd维护子网的分配和ovelay网络和实际IP的映射。
Docker Meetup. 杭州
其他技术
• OpenVSwitch with GRE tunnels (h`p://wiredcraj.com/blog/mulf-‐host-‐docker-‐network/)
• Weave (h`ps://github.com/zedo/weave) • Calico (h`ps://github.com/Metaswitch/calico) • OpenVPN used in Azure • Socketplane (h`ps://github.com/socketplane/socketplane/)
Docker Meetup. 杭州
socketplane with powerstrip
• socketplane 最近刚被Docker收购,用以加强原来Docker薄弱的网络环节,是SDN的工具
• powerstrip 可插拔可配置的HTTP代理,允许Docker用户自定义pre-‐hook ,post-‐hook。允许我们在真正的docker daemon做容器创建启动删除等操作前做额外的操作,非常适合用于开发测试Docker插件。
Docker Meetup. 杭州
socketplane 特色
• 1 集成OpenVSwitch功能 • 2 使用VXLAN划分多个子网, 适合云系统多租户网络隔离的要求
• 3 分布式的IP管理,防止多台主机上docker容器IP地址冲突
• 4 使用mDNS技术,新节点自动加入集群,集群大小轻松伸缩
Docker Meetup. 杭州
Powerstrip
Docker Meetup. 杭州
与Kubernetes 结合
• 启动socketplane adapter 非常简单!
• 更改kubelet里的docker_endpoint变量指向powerstrip
• 使用kubernetes里的label携带pod的网络信息如它属于哪个VLAN
• 将label信息用于启动容器的额外参数!
Docker Meetup. 杭州
参考链接
• h`p://blog.oddbit.com/2014/08/11/four-‐ways-‐to-‐connect-‐a-‐docker/ • h`ps://clusterhq.com/blog/powerstrip-‐prototype-‐docker-‐extensions-‐
today/ • h`p://wiredcraj.com/blog/mulf-‐host-‐docker-‐network/
Docker Meetup. 杭州
Docker Meetup. 浙江大学 . 杭州