searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

k8s网络模型介绍

2023-09-22 08:00:03
8
0

1、基本概念

容器:Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用 NameSpace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。

Pod:Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器,一对多的关系。

Service:Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。

Namespace:Namespace是Linux提供的一种对于系统全局资源的隔离机制;从进程的视角来看,同一个namespace中的进程看到的是该namespace自己独立的一份全局资源,这些资源的变化只在本namespace中可见,对其他namespace没有影响。容器就是采用namespace机制实现了对网络,进程空间等的隔离。不同的Container(在K8S中是以Pod为单位)属于不同namespace,实现了Container或Pod之间的资源互相隔离,互不影响。
Network namespace允许你在Linux中创建相互隔离的网络视图,每个网络名字空间都有自己独立的网络配置,包括:网卡、回环设备、网络栈;网络设备、路由表、IPTables规则。

2、k8s网络模型

kubernetes网络模型设计的目的是给pod、service等提供一个简单、一致的网络视图和使用体验,对他们屏蔽了宿主机环境的网络拓扑的同时,也屏蔽了网络模型上实现的细节;

同时要求每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的、扁平的网络空间中;

如何对扁平的网络进行理解:

  • 所有的 Pod 可以与任何其他 Pod 直接通信,无需使用 NAT 映射(network address translation);
  • 所有节点可以与所有 Pod 直接通信,无需使用 NAT 映射;
  • Pod 内部获取到的 IP 地址与其他 Pod 或节点与其通信时的 IP 地址是同一个;

k8s的网络组成有:

  • 集群内:同一个pod上不同容器的通信、pod间通信,pod和服务(service)之间的通信,
  • 集群外:外部和service服务间的通信

接下来具体分析k8s对集群内网络模型的解决方案

同一个pod上不同容器的通信

Kubernetes创建Pod时,首先会创建一个infra容器,为Pod指派一个唯一的IP地址。然后,以infra的网络命名空间为基础,创建同一个Pod内的其它容器;因此,同一个Pod内的所有容器就会共享同一个网络命名空间,在同一个Pod之间的容器可以直接使用localhost进行通信。

pod间通信

使用两个虚拟接口组成的veth对可以使不同的网络命名空间连接起来,这些虚拟接口分布在多个网络命名空间上,这里通过veth对让pod1的eth0和veth0、pod2的eth0和veth1关联起来;

再通过网桥把veth0和veth1组成为一个以太网,从而让pod1和pod2相互通信。

0条评论
0 / 1000
朱****媚
1文章数
0粉丝数
朱****媚
1 文章 | 0 粉丝
朱****媚
1文章数
0粉丝数
朱****媚
1 文章 | 0 粉丝
原创

k8s网络模型介绍

2023-09-22 08:00:03
8
0

1、基本概念

容器:Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用 NameSpace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。

Pod:Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器,一对多的关系。

Service:Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。

Namespace:Namespace是Linux提供的一种对于系统全局资源的隔离机制;从进程的视角来看,同一个namespace中的进程看到的是该namespace自己独立的一份全局资源,这些资源的变化只在本namespace中可见,对其他namespace没有影响。容器就是采用namespace机制实现了对网络,进程空间等的隔离。不同的Container(在K8S中是以Pod为单位)属于不同namespace,实现了Container或Pod之间的资源互相隔离,互不影响。
Network namespace允许你在Linux中创建相互隔离的网络视图,每个网络名字空间都有自己独立的网络配置,包括:网卡、回环设备、网络栈;网络设备、路由表、IPTables规则。

2、k8s网络模型

kubernetes网络模型设计的目的是给pod、service等提供一个简单、一致的网络视图和使用体验,对他们屏蔽了宿主机环境的网络拓扑的同时,也屏蔽了网络模型上实现的细节;

同时要求每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的、扁平的网络空间中;

如何对扁平的网络进行理解:

  • 所有的 Pod 可以与任何其他 Pod 直接通信,无需使用 NAT 映射(network address translation);
  • 所有节点可以与所有 Pod 直接通信,无需使用 NAT 映射;
  • Pod 内部获取到的 IP 地址与其他 Pod 或节点与其通信时的 IP 地址是同一个;

k8s的网络组成有:

  • 集群内:同一个pod上不同容器的通信、pod间通信,pod和服务(service)之间的通信,
  • 集群外:外部和service服务间的通信

接下来具体分析k8s对集群内网络模型的解决方案

同一个pod上不同容器的通信

Kubernetes创建Pod时,首先会创建一个infra容器,为Pod指派一个唯一的IP地址。然后,以infra的网络命名空间为基础,创建同一个Pod内的其它容器;因此,同一个Pod内的所有容器就会共享同一个网络命名空间,在同一个Pod之间的容器可以直接使用localhost进行通信。

pod间通信

使用两个虚拟接口组成的veth对可以使不同的网络命名空间连接起来,这些虚拟接口分布在多个网络命名空间上,这里通过veth对让pod1的eth0和veth0、pod2的eth0和veth1关联起来;

再通过网桥把veth0和veth1组成为一个以太网,从而让pod1和pod2相互通信。

文章来自个人专栏
k8s网络模型介绍
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0