跳至主要內容
Kubernetes和Docker网络原理(一)

Kubernetes和Docker网络原理(一)

Docker 网络实现

平时在进行Kubernetes开发和运维的时候,接触到的最多的概念就是Docker和Kubernetes的网络概念了,尤其是Kubernetes各种各样的IP、Port,有时候会混淆,因此有必要对Docker和Kubernetes的底层网络实现进行学习。这篇文章就先针对Docker的网络实现进行一下分析介绍。

Docker的网络基础

Docker的网络实现主要利用到的还是Linux网络相关的技术,如Network Namespace、Veth设备对、网桥、iptables、路由。


J.F.Gaufrid大约 8 分钟LinuxDockerKubernetes
Kubernetes和Docker网络原理(三)

Kubernetes和Docker网络原理(三)

Service通信

kube-proxy运行机制

为了支持集群的水平扩展、高可用性,Kubernetes抽象出了Service的概念。Service是对一组Pod的抽象,它会根据访问策略(如如负载均衡策略)来访问这组Pod。Kubernetes在创建服务时会为服务分配一个虚拟的IP地址,客户端通过访问这个虚拟的IP地址来访问服务,服务则负责将请求转发到后端的Pod上。起到一个类似于反向代理的作用,但是它和普通的反向代理还是有一些不同:首先,它的Service的IP地址,也就是所谓的ClusterIP是虚拟的,想从外面访问还需要一些技巧;其次,它的部署和启停是由Kubernetes统一自动管理的。


J.F.Gaufrid大约 4 分钟LinuxDockerKubernetes
Kubernetes和Docker网络原理(二)

Kubernetes和Docker网络原理(二)

Kubernetes Pod 间通信

之前文章中主要关于Docker的网络实现进行了介绍和探讨,对于Docker网络而言,其最大的局限性在于跨主机的容器通信方案上存在空白,而Kubernetes作为适合大规模分布式集群的容器编排平台,其在网络实现层面上主要解决的问题就包括了如下几点:

  • 容器间通信
  • Pod间通信
  • Pod与Service通信
  • 集群内外通信

这篇博文主要针对Kubernetes的容器间通信和Pod间通信进行介绍和探讨,之后再通过单独一篇文章去探讨Pod与Service的通信,也就是kube-proxy工作原理和Service机制相关。


J.F.Gaufrid大约 7 分钟LinuxDockerKubernetes
Kubernets 架构

Kubernets 架构

Kubernetes 主要核心组件

  • etcd 保存了整个集群的状态;
  • kube-apiserver 供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • kube-controller-manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • kube-scheduler 负责资源的调度,按照预定的调度策略将pod调度到相应的机器上;
  • kubelet 负责容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI),默认的容器运行时为Docker
  • kube-proxy 负责为Service提供cluster内部的容器服务发现和负载均衡

J.F.Gaufrid小于 1 分钟Linux容器化Kubernetes