k8s网络模型
- 每个POD都会分配一个集群内唯一的POD IP
- pod不需要nat能够与其他节点上的任意pod通信
- 节点agents诸如kubelet、system daemon可以与该节点上的任意pod通信
- 同一个POD的多个容器共享pod ip和mac地址,可以通过localhost+端口通信
- 使用service暴露pods服务供集群内访问,默认使用ClusterIP模式;如果对集群外访问可以使用ingress、nodeport service或者cloud云厂商提供的LB服务接入到service。
- POD内访问外部服务,可以配置service+endpoint为外部接入地址的方式,这样引入service中间层。不使用中间层service,直接访问外部域名或者服务端地址也是可以,因为pod内有自己的dns解析,默认使用集群coredns,如果不通可以fallback到node的dns。
集群网络
- The network plugin is configured to assign IP addresses to Pods.
- The kube-apiserver is configured to assign IP addresses to Services.
- The kubelet or the cloud-controller-manager is configured to assign IP addresses to Nodes.
网络插件
在Kubernetes中,网络插件也称为容器网络接口(Container Network Interface,CNI)插件,用于实现容器之间的通信和网络连接。以下是一些常见的Kubernetes网络插件:
1. Flannel:Flannel是一个流行的CNI插件,它使用虚拟网络覆盖技术(overlay network)来连接不同节点上的容器。Flannel支持多种后端驱动,如VXLAN、UDP、Host-GW等。
2. Calico:Calico是一个开源的网络和安全解决方案,它使用BGP协议来实现容器之间的路由。Calico支持灵活的网络策略和安全规则,可用于大规模部署。
3. Weave Net:Weave Net是一个轻量级的CNI插件,通过创建虚拟网络设备和网络代理来连接不同节点上的容器。Weave Net支持overlay模式和直连模式,具有灵活性。
4. Cilium:Cilium是面向Kubernetes的高性能网络和安全解决方案,利用eBPF(Extended Berkeley Packet Filter)技术来提供快速的容器间通信和网络策略实施。
5. Canal:Canal是一个综合性的CNI插件,结合了Calico和Flannel的功能。它可以使用Flannel提供overlay网络,同时使用Calico的网络策略和安全性功能。
6. Antrea:Antrea是一个基于Open vSwitch的CNI插件,专为Kubernetes网络和安全性而设计。它提供了高性能的网络连接和网络策略功能。
7. kube-router:kube-router是一个开源的CNI插件,它结合了网络和服务代理功能。它支持BGP和IPIP协议,并具有负载均衡的特性.
这些是Kubernetes网络插件中的一些常见选项,每个插件都有其特定的优势和适用场景。选择合适的网络插件取决于你的需求、网络拓扑和性能要求等因素。
同时,Kubernetes社区也在不断发展和推出新的网络插件,以满足不断变化的需求。
常见问题
1、应用定义了liveness http pod探针,但是因为网络插件挂掉,导致探测失败,进而应用pod被kubelet频繁重启
解决方法,查看网络插件是否正常运行,如果没有,则需要启动,否则就会出现上述现象。