• blackpiglet
    2018-11-11
    思考题:为什么 Kubernetes 项目不自己实现容器网络,而是要通过 CNI 做一个如此简单的假设呢?

    解答:没有亲历 Kubernetes 网络标准化的这个阶段,以下内容都是基于猜测,大家见笑了。
    最开始我觉得这就是为了提供更多的便利选择,有了 CNI,那么只要符合规则,什么插件都可以用,用户的自由度更高,这是 Google 和 Kubernetes 开放性的体现。但转念一想,如果 Kubernetes 一开始就有官方的解决方案,恐怕也不会有什么不妥,感觉要理解的更深,得追溯到 Kubernetes 创建之初的外部环境和 Google 的开源策略了。Github 上最早的 Kubernetes 版本是 0.4,其中的网络部分,最开始官方的实现方式就是 GCE 执行 salt 脚本创建 bridge,其他环境的推荐的方案是 Flannel 和 OVS。
    所以我猜测:
    首先给 Kubernetes 发展的时间是不多的(Docker 已经大红大紫了,再不赶紧就一统天下了),给开发团队的时间只够专心实现编排这种最核心的功能,网络功能恰好盟友 CoreOS 的 Flannel 可以拿过来用,所以也可以认为 Flannel 就是最初 Kubernetes 的官方网络插件。Kubernetes 发展起来之后,Flannel 在有些情况下就不够用了,15 年左右社区里 Calico 和 Weave 冒了出来,基本解决了网络问题,Kubernetes 就更不需要自己花精力来做这件事了,所以推出了 CNI,来做网络插件的标准化。我觉得假如社区里网络一直没有好的解决方案的话,Kubernetes 肯定还是会亲自上阵的。
    其次,Google 开源项目毕竟也不是做慈善,什么都做的面面俱到,那要消耗更多的成本,当然是越多的外部资源为我所用越好了。感觉推出核心功能,吸引开发者过来做贡献的搞法,也算是巨头们开源的一种套路吧。
    展开

    作者回复: 分析的很不错

     1
     51
  • 阿棠
    2018-11-21
    前几章都很好理解,一到网络这块,就蒙了,没耐心看下去了
    
     9
  • Dale
    2018-11-09
    我认为是在大规模的集群环境中,网络方案是最复杂的,针对不同的的环境和场景,网络需要灵活配置。k8s集群里只关心最终网络可以连通,而不需要在内部去实现各种复杂的网络模块,使用CNI可以方便灵活地自定义网络插件,网络可以独立。
    
     6
  • 叫我天才好了
    2019-12-04
    思考题,高内聚,低耦合?
    
     1
  • 单朋荣
    2019-06-14
    其实本章难点在于实现网络方案对应的CNI插件,即配置Infra容器的网络栈,并连到网桥上。整体流程是:kubelet创建Pod->创建Infra容器->调用SetUpPod()方法,该方法需要为CNI准备参数,然后调用CNI插件(flannel)为Infra配置网络;其中参数来源于1、dockershim设置的一组CNI环境变量;2、dockershim从CNI配置文件里(有flanneld启动后生成,类型为configmap)加载到的、默认插件的配置信息(network configuration),这里对CNI插件的调用,实际是network configuration进行补充。参数准备好后,调用Flannel CNI->调用CNI bridge(所需参数即为上面:设置的CNI环境变量和补充的network configuation)来执行具体的操作流程。
    
     1
  • 毛玉明
    2019-01-11
    k8s里可以不使用cni直接使用docker0的网桥吗,看了下目前公司的集群没有找到cni0的这个设备
    
     1
  • LÉON
    2018-12-20
    一直在苦苦自学,在容器的存储还有网络一直困扰。一直在拜读不拜听 受益匪浅 继续努力
     1
     1
  • 燕岭听涛
    2018-11-23
    老师,您好,咨询一个问题:flannel经常出现 no ip address available in range,出现后就只能重置节点。这个是什么原因造成的,为什么pod删除后不回收ip地址?或者还有别的解决办法吗?希望能收到您的回复。

    作者回复: 给个大点的range啊,还有看看ipam用的是啥配置?

    
     1
  • DJH
    2018-11-09
    "实际上,对于 Weave、Calico 这样的网络方案来说,它们的 DaemonSet 只需要挂载宿主机的 /opt/cni/bin/,就可以实现插件可执行文件的安装了。"这个是用hostpath类型的卷实现吗?

    作者回复: 对

    
     1
  • Tim Zhang
    2018-11-09
    上一章节不是说介绍flannel的hostgw模式吗?

    作者回复: 不要急

    
     1
  • 巴西
    2020-01-03
    网络篇确实难度上来了,需要多看几遍
    
    
  • Geek_81c7c9
    2019-12-23
    老师你好,请问在CNI方案出现之前,有其它的容器固定IP方案吗?
    
    
  • 徐海浪
    2019-12-03
    kubeadm initiative --pod-network-cidr=10.244.0.0/16可以成功创建k8s集群,换一下地址则不行(如10.12.0.0/16),不知道为啥😂
    
    
  • Geek_54edc1
    2019-11-19
    因为现实中的容器网络太多样、太复杂,为了解耦、可扩展性,设计了CNI接口,这个接口实现了共同的功能:为infra容器的network namespace配置网络栈
    
    
  • 拉欧
    2019-11-17
    为了效率吧,cni网桥完全复用了linux的网络栈,如果自己弄容器网络,肯定又要增加内核调用
    
    
  • 昀溪
    2019-05-10
    CNI bridge插件会通过Infra容器的Network Namespace文件,进入网络名称空间,然后创建一对Veth Pair设备。

    那我的环境是使用的docker0网桥,没有使用CNI插件。那这个Veth Pair设备是谁创建的呢?我是不是可以这么理解,如果Infra这个容器是POD的第一个容器,那么docker就会为Infra这个容器分配地址,通过docker的CNM模型的某些机制来完成为Infra这个容器创建虚拟网卡对的工作,使用的IP地址就是从docker0网桥的bip中获得的。而POD的容器共享Infra的网络应该是K8S的一种机制可网络插件没有关系。是这个意思么
    
    
  • Booty Monster
    2019-02-28
    service 如果是iptables 做实际转发的确有这个问题,我们遇到过的:1 使用headless svc,2 使用ipvs
    
    
  • 居然是飞哥
    2018-11-21
    如果分配的子网是10.244.0.0/16,那么这个集群里node节点最大的数目不是只能到254台?
    
    
  • freeman
    2018-11-20
    老师,能介绍下ipvlan吗。
    
    
  • IOVE.-Minn
    2018-11-15
    老师,在实际使用过程中,遇到一个问题。k8s版本1.12.2,kube-proxy开启了ipvs后,部署最新的ingress-controller服务(daemenset部署,开启了hostnetwork: true)的时候,会报错监控检查失败。而去掉之后,是没有问题的。排除官方不推荐使用hostnetwork这种方式,是有什么原因引起的呢?测试过增加健康检查的时间和镜像的版本,都不能解决。
    
    
我们在线,来聊聊吧