Kubernetes(有时称为 K8s)是一个开源平台,用于管理和自动化跨机器集群的应用程序容器的部署、调度、监控、维护和操作。由 Google 开发的 Kubernetes 联网允许管理员跨私有、公共和 混合云 基础架构移动工作负载。开发人员使用 Kubernetes 将软件应用程序与其所需的基础设施打包并快速部署新版本。
Kubernetes 网络允许 Kubernetes 组件 相互通信以及与其他应用程序通信。Kubernetes 平台与其他网络平台不同,因为它基于扁平的网络结构,无需将主机端口映射到容器端口。Kubernetes 平台提供了一种运行分布式系统的方法,在应用程序之间共享机器而无需动态分配端口。
什么是 Kubernetes Pod 网络?
一个 Kubernetes Pod 网络连接了几个相互关联的组件:
- Pods: Kubernetes Pods 的灵感来自自然界中的豆荚(豌豆荚或鲸鱼荚)。Pod 是一组容器,它们共享来自同一节点的网络和存储资源。它们由 API 服务器创建并由控制器放置。每个 Pod 都分配有一个 IP 地址,Pod 中的所有容器共享相同的存储、IP 地址和端口空间(网络命名空间)。
- 容器:Kubernetes 容器就像一个 虚拟机 ,在多个应用程序之间共享其操作系统 (OS)。它有自己的文件系统、CPU、内存和进程空间。容器总是在 Pod 中创建,一个 Pod 中可以创建多个容器。Pod 中的容器都一起移动,一起调度,一起终止。Pod 可以跨云移动。容器可以通过容器网络连接到其他容器、主机和外部网络。
- 节点:Pod 始终在工作节点内运行。节点是运行容器化应用程序的机器。Kubernetes 将这些节点分组到集群中。
- 主节点:每个节点集群将至少有一个管理工作节点的主节点。master 可以与集群中的每个节点通信,也可以直接与任何单个 Pod 通信。
网络在 Kubernetes 中是如何工作的?
Kubernetes 平台中的不同组件(Pod、容器、节点、应用程序)使用不同的网络方式进行通信。有容器到容器的通信、Pod 到 Pod 的通信、Pod 到服务的通信和外部到服务的通信。
Pod 到 Pod 的通信是 Kubernetes 的基础。Pod 按照网络插件设置的网络策略相互通信,与其他 Pod 通信而无需在它们之间显式创建链接或将容器端口映射到主机端口。由于 Pod 共享相同的网络命名空间并拥有自己的 IP 地址,因此它们可以使用 localhost 找到所有节点上的所有其他 Pod 并与之通信,而无需使用网络地址转换 (NAT)。
Kubernetes 网络的挑战之一是解决内部(东西向)流量和外部(南北向)流量如何交互,因为内部网络与外部网络是隔离的。但是,在节点之间流动的流量也可以在节点和外部物理机或虚拟机之间流动。将外部流量引入 Kubernetes 集群有几种不同的方法:
- LoadBalancer:LoadBalancer 是将服务从外部连接到 Internet 的标准方式。在这种情况下,网络负载均衡器将所有外部流量转发到服务。每个服务都有自己的 IP 地址。
- ClusterIP:ClusterIP 是用于内部通信的默认 Kubernetes 服务。但是,外部流量可以通过代理访问默认的 Kubernetes ClusterIP 服务。这对于调试服务或显示内部仪表板很有用。
- NodePort:NodePort 在节点或虚拟机上打开端口,流量从端口转发到服务。它最常用于并非总是可用的服务,例如演示应用程序。
- Ingress:Ingress 充当路由器或控制器,通过负载均衡器将流量路由到服务。如果您想使用相同的 IP 地址来公开多个服务,这很有用。
Kubernetes 网络的另一个重要方面是 容器网络 接口,或 CNI。CNI 跨节点连接 Pod,充当网络命名空间和网络插件或网络提供者和 Kubernetes 网络之间的接口。有许多不同的 CNI 提供程序和插件可供选择,它们具有不同的特性和功能集。CNI 插件能够在配置和销毁 Pod 时动态配置网络和资源。他们在创建和删除容器时提供和管理 IP 地址。Kubernetes 是 Kubernetes 的默认网络提供商,但 Flannel、Calico、Canal 和 Weave Net 等 CNI 插件提供了额外的功能。
如何实现 Kubernetes 网络?
网络管理员可以通过多种不同的方式实现 Kubernetes 网络模型。Gartner 在其 2019 年数据中心网络魔力象限报告中将以下 Kubernetes 网络示例视为“有远见的” :
- Big Switch Networks 的 Big Cloud Fabric:一种在私有云环境中运行 Kubernetes 的云原生网络架构。
- Cumulus NetQ:一种基于遥测的结构验证系统,可提供容器部署的可见性。
- Dell EMC:一个支持传统应用程序和云原生环境的云平台,并集成了对 Kubernetes 和容器的支持。
- VMware NSX-T:网络虚拟化和安全平台,为多云或多管理程序环境虚拟化网络,包括本机容器网络。