加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

加深理解 Kubernetes 容器网络

发布时间:2022-05-04 11:17:27 所属栏目:系统 来源:互联网
导读:在容器网络接入进来需要满足如下基本原则: Pod无论运行在任何节点都可以互相直接通信,而不需要借助NAT地址转换实现。 Node与Pod可以互相通信,在不限制的前提下,Pod可以访问任意网络。 Pod拥有独立的网络栈,Pod看到自己的地址和外部看见的地址应该是一样
  在容器网络接入进来需要满足如下基本原则:
 
  Pod无论运行在任何节点都可以互相直接通信,而不需要借助NAT地址转换实现。
  Node与Pod可以互相通信,在不限制的前提下,Pod可以访问任意网络。
  Pod拥有独立的网络栈,Pod看到自己的地址和外部看见的地址应该是一样的,并且同个Pod内所有的容器共享同个网络栈。

  一个Linux容器的网络栈是被隔离在它自己的Network Namespace中,Network Namespace包括了:网卡(Network Interface),回环设备(Lookback Device),路由表(Routing Table)和iptables规则,对于服务进程来讲这些就构建了它发起请求和相应的基本环境。而要实现一个容器网络,离不开以下Linux网络功能:
 
  网络命名空间:将独立的网络协议栈隔离到不同的命令空间中,彼此间无法通信
  Veth Pair:Veth设备对的引入是为了实现在不同网络命名空间的通信,总是以两张虚拟网卡(veth peer)的形式成对出现的。并且,从其中一端发出的数据,总是能在另外一端收到
  Iptables/Netfilter:Netfilter负责在内核中执行各种挂接的规则(过滤、修改、丢弃等),运行在内核中;Iptables模式是在用户模式下运行的进程,负责协助维护内核中Netfilter的各种规则表;通过二者的配合来实现整个Linux网络协议栈中灵活的数据包处理机制
  网桥:网桥是一个二层网络虚拟设备,类似交换机,主要功能是通过学习而来的Mac地址将数据帧转发到网桥的不同端口上
  路由: Linux系统包含一个完整的路由功能,当IP层在处理数据发送或转发的时候,会使用路由表来决定发往哪里
  基于以上的基础,同宿主机的容器时间如何通信呢?
 
  我们可以简单把他们理解成两台主机,主机之间通过网线连接起来,如果要多台主机通信,我们通过交换机就可以实现彼此互通,在Linux中,我们可以通过网桥来转发数据。
 
  在容器中,以上的实现是通过docker0网桥,凡是连接到docker0的容器,就可以通过它来进行通信。要想容器能够连接到docker0网桥,我们也需要类似网线的虚拟设备Veth Pair来把容器连接到网桥上。
 
  可以看到其中有一张eth0的网卡,它就是veth peer其中的一端的虚拟网卡。然后通过route -n 查看容器中的路由表,eth0也正是默认路由出口。所有对172.17.0.0/16网段的请求都会从eth0出去。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读