gaoke 发表于 2018-9-16 07:40:13

kubernetes网络模型分析

  以kubernetes的helloworld为例,分析kubernetes的网络模型
  kubernetes版本:1.3.7
  
  拓扑:
  kube-apiserver
  192.168.1.200
  node1
  192.168.1.202
  docker0:10.0.1.1/24
  node2
  192.168.1.203
  docker0: 10.1.2.1/24
  不同node上的容器之间的链路,已用quagga打通
  helloworld

  

  
  
  kubernetes网络模型的简单描述:
  1. pod之间通过service进行相互访问
  ①service的ip地址为与之关联的所有pod的公共虚拟ip
  ②所有pod可以通过访问service的ip地址,自动调度到service关联的任意一个pod上
  
  2. 外部client访问pod
  ①通过配置service的nodePort,在所有node上映射一个指定端口
  ②外部client可以通过访问任意一个node的指定端口,自动调度到service关联的任意一个pod上
  以上的两大功能是由kube-proxy修改iptables的nat表的规则来实现的
  查看iptables信息:
  iptables -t nat -L -n   
  //查看每个node节点的nat表的信息,kube-proxy根据从kube-apiserver上获取的service以及pod信息,修改nat表的规则。因此每个node节点上看到的nat表的信息相同
  

  
  查找30001端口相关规则

  
  查找frontend的serviceip的相关规则(10.254.73.7)

  结论:
  无论是外部客户端通过noded节点的30001访问php-frontend还是pod通过service的虚拟ip访问php-frontend,最终都会被转移到相同的自定义链上。
  查看这个自定义链

  

  

  
  
  关于动态调度的实现方法

  
  
  总结:

[*]  一个service会引用一个自定义链用于维护与之关联的pod
[*]  无论是通过service定义的nodePort还是service的ip地址访问service,相应的数据包都会传递到维护pod的自定义链上,最终使用DNAT修改目标地址为被访问容器的ip地址,并结合iptables的statistic模块中的random模式,实现各个容器的负载均衡

页: [1]
查看完整版本: kubernetes网络模型分析