036.集群网络-K8S网络模型及Linux基础网络
一 Kubernetes网络模型概述
1.1 Kubernetes网络模型
- 主要区别是后者的动态端口映射会引入端口管理的复杂性,而且访问者看到的IP地址和端口与服务提供者实际绑定的不同(因为NAT的缘故,它们都被映射成新的地址或端口了),这也会引起应用配置的复杂化。
- 同时,标准的DNS等名字解析服务也不适用了,甚至服务注册和发现机制都比较复杂,因为在端口映射情况下,服务自身很难知道自己对外暴露的真实的服务IP和端口,外部应用也无法通过服务所在容器的私有IP地址和端口来访问服务。
- 所有容器都可以在不用NAT的方式下同别的容器通信。
- 所有节点都可以在不用NAT的方式下同所有容器通信,反之亦然。
- 容器的地址和别人看到的地址是同一个地址。
二 Docker网络基础
2.1 网络命名空间
- 网络命名空间的实现


|
资源
|
含义
|
|
uts_ns
|
UTS为Unix Timessharing System的简称,包含内存名称、脚本、版本、底层体系结构等信息。
|
|
ipc_ns
|
所有与进程通信(IPC)有关的信心。
|
|
nmt_ns
|
当前装载的文件系统。
|
|
pid_ns
|
有关进程ID的信息。
|
|
user_ns
|
资源配额的信息。
|
|
net_ns
|
网络信息。
|
- 网络命名空间操作
1 [root@k8smaster01 ~]# ip netns add mytestns #创建命名空间
2 [root@k8smaster01 ~]# ip netns exec mytestns <command> #进入命名空间bash
3 [root@k8smaster01 ~]# ip netns exec mytestns bash #进入命名空间bash
4 [root@k8smaster01 ~]# exit #退出命名空间
5 [root@k8smaster01 ~]# ip link set <device> netns mytestns #转移设备
2.2 Veth设备对

- veth pair操作
1 [root@k8smaster01 ~]# ip link add veth0 type veth peer name veth1 #创建veth设备对
2 [root@k8smaster01 ~]# ip link show | grep veth #当前查看veth
3 [root@k8smaster01 ~]# ip netns add ns0
4 [root@k8smaster01 ~]# ip netns add ns1 #创建命名空间
5 [root@k8smaster01 ~]# ip link set veth0 netns ns0
6 [root@k8smaster01 ~]# ip link set veth1 netns ns1 #veth移入命名空间
7 [root@k8smaster01 ~]# ip netns exec ns0 ip link show #进入命名空间查看veth
8 [root@k8smaster01 ~]# ip netns exec ns0 ip addr add local 192.168.10.1/24 dev veth0
9 [root@k8smaster01 ~]# ip netns exec ns1 ip addr add local 192.168.10.2/24 dev veth1 #设置对应的IP
10 [root@k8smaster01 ~]# ip netns exec ns0 ifconfig veth0 up
11 [root@k8smaster01 ~]# ip netns exec ns1 ifconfig veth1 up #开启设备
12 [root@k8smaster01 ~]# ip netns exec ns0 ping 192.168.10.2 #连通性测试

1 [root@k8smaster01 ~]# ip netns exec ns0 ethtool -S veth0
2 NIC statistics:
3 peer_ifindex: 9
4 [root@k8smaster01 ~]# ip netns exec ns1 ip link | grep 9
2.3 网桥
- Linux网桥的实现

- 网桥的常用操作命令


1 [root@k8smaster01 ~]# ip link add tap1 type veth peer name tap1_peer
2 [root@k8smaster01 ~]# ip link add tap2 type veth peer name tap2_peer
3 [root@k8smaster01 ~]# ip link add tap3 type veth peer name tap3_peer
4 [root@k8smaster01 ~]# ip link add tap4 type veth peer name tap4_peer
5 #创建veth pair
6 [root@k8smaster01 ~]# ip netns add ns1
7 [root@k8smaster01 ~]# ip netns add ns2
8 [root@k8smaster01 ~]# ip netns add ns3
9 [root@k8smaster01 ~]# ip netns add ns4
10 #创建namespace
11 [root@k8smaster01 ~]# ip link set tap1 netns ns1
12 [root@k8smaster01 ~]# ip link set tap2 netns ns2
13 [root@k8smaster01 ~]# ip link set tap3 netns ns3
14 [root@k8smaster01 ~]# ip link set tap4 netns ns4
15 #tap和namespace关联
16 [root@k8smaster01 ~]# brctl addbr br1 #创建桥
17 [root@k8smaster01 ~]# brctl addif br1 tap1_peer
18 [root@k8smaster01 ~]# brctl addif br1 tap2_peer
19 [root@k8smaster01 ~]# brctl addif br1 tap3_peer
20 [root@k8smaster01 ~]# brctl addif br1 tap4_peer
21 #把相应的tap添加至bright中
22 [root@k8smaster01 ~]# ip netns exec ns1 ip addr add local 192.168.20.1/24 dev tap1
23 [root@k8smaster01 ~]# ip netns exec ns2 ip addr add local 192.168.20.2/24 dev tap2
24 [root@k8smaster01 ~]# ip netns exec ns3 ip addr add local 192.168.20.3/24 dev tap3
25 [root@k8smaster01 ~]# ip netns exec ns4 ip addr add local 192.168.20.4/24 dev tap4
26 #配置相应IP地址
27 [root@k8smaster01 ~]# ip link set br1 up
28 [root@k8smaster01 ~]# ip link set tap1_peer up
29 [root@k8smaster01 ~]# ip link set tap2_peer up
30 [root@k8smaster01 ~]# ip link set tap3_peer up
31 [root@k8smaster01 ~]# ip link set tap4_peer up
32 [root@k8smaster01 ~]# ip netns exec ns1 ip link set tap1 up
33 [root@k8smaster01 ~]# ip netns exec ns2 ip link set tap2 up
34 [root@k8smaster01 ~]# ip netns exec ns3 ip link set tap3 up
35 [root@k8smaster01 ~]# ip netns exec ns4 ip link set tap4 up
36 #将bright和tap设置为up
37 [root@k8smaster01 ~]# ip netns exec ns1 ping 192.168.20.2 #互ping

2.4 iptables和Netfilter
- iptables规则
- filter:实现防火墙功能;
- nat:实现NAT功能;
- mangle:实现流量整形。
- iptables-save: 按照命令的方式打印iptables的内容。
- iptables-vnL: 以另一种格式显示Netfilter表的内容。
- Netfilter规则


- PREROUTING:报文进入网络接口尚未进入路由之前的时刻;
- INPUT:路由判断是本机接收的报文,准备从内核空间进入到用户空间的时刻;
- FORWARD:路由判断不是本机接收的报文,需要路由转发,路由转发的那个时刻;
- OUTPUT:本机报文需要发出去 经过路由判断选择好端口以后,准备发送的那一刻 ;
- POSTROUTING:FORWARD/OUTPUT 已经完成,报文即将出网络接口的那一刻 。
|
表名
|
时刻点
|
|
mangle
|
PREROUTING, INPUT, FORWARD, OUTPUT
|
|
nat
|
PREROUTING, OUTPUT, POSTROUTING
|
|
filter
|
INPUT, FORWARD, OUTPUT
|
2.5 路由
- 目的IP地址:此字段表示目标的IP地址。这个IP地址可以是某主机的地址,也可以是一个网络地址。如果这个条目包含的是一个主机地址,那么它的主机ID将被标记为非零;如果这个条目包含的是一个网络地址,那么它的主机ID将被标记为零。
- 下一跳路由器的IP地址:若并非最终目的的路由器,则该条目给出的下一个路由器的地址用来转发在相应接口接收到的IP数据报文。
- 标志:这个字段提供了另一组重要信息,例如,目的IP地址是一个主机地址还是一个网络地址。此外,从标志中可以得知下一个路由器是一个真实路由器还是一个直接相连的接口。
- 网络接口规范:为一些数据报文的网络接口规范,该规范将与报文一起被转发。
- 路由表的创建

- 路由表的查看

036.集群网络-K8S网络模型及Linux基础网络的更多相关文章
- Linux学习笔记(9)linux网络管理与配置之一——Linux基础网络命令与学习大纲(0)
大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配置DNS客户端 4.配置名称解析顺序 5.配置路由与默认网关 6.双网卡绑定 [1] ping [2]net ...
- Linux基础网络配置
目录 Linux基础网络配置 参考 IP配置 Route配置 DNS指向 ss命令 *网络排查工具 Linux基础网络配置
- 038.集群网络-K8S网络实现
一 Kubernetes网络实现 1.1 Kubernetes网络优势 在实际的业务场景中,业务组件之间的关系十分复杂,微服务的理念更是让应用部署的粒度更加细小和灵活.为了支持业务应用组件的通信,Ku ...
- 040.集群网络-CNI网络模型
一 CNM网络模型 1.1 网络模型 生产环境中,跨主机容器间的网络互通已经成为基本要求,更高的要求包括容器固定IP地址.一个容器多个IP地址.多个子网隔离.ACL控制策略.与SDN集成等.目前主流的 ...
- 041.Kubernetes集群网络-K8S网络策略
一 Kubernetes网络策略 1.1 策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定 ...
- Linux 基础网络设置
一.查看以及测试网络 查看及测试网络配置是管理Linux网络服务的第一步,本节将学习Linux系统中的网络查看以及测试命令.其中讲解的大多数命令以普通用户权限就可以完成操作,但是普通用户在执行&quo ...
- Linux基础: 网络命令和进程管理
netstat lsof ps pstree pkill/kill (了解jenkins git,排查环境) 查询服务器之间是否有链接(netstat -an) 某个服务是否启动(了解服务对应的 ...
- Linux基础网络设置
查看Linux网络参数 ifconfig—-查看网络接口 > [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C ...
- Linux基础网络搭建实验
一.实验目标 利用3台虚拟机,搭建vmnet2和vmnet3两个host-only网络,实现两个网络的互联 二.实验环境 内网 外网 网关 IP 192.168.0.10/24 202.3.4.1 ...
随机推荐
- Python爬虫实战之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...
- HashMap的四种遍历!
HashMap的四种遍历 import java.util.Collection; import java.util.HashMap; import java.util.Map; import jav ...
- 为啥java要使用 set ()和get()方法---封装
封装性:属性封装,方法封装,类封装,组件封装等 例如:如果属性没有封装,那么在本类对象之外创建对象后,可以直接访问属性 private关键字,只能在本类中访问,想要在外部访问私有属性,我们需要提供公有 ...
- 使用document.domain+iframe跨域实例
首先我们假设主页面地址为:http://www.js8.in/mywork/crossdomain/index.html,我们要加载的内容是位于work.2fool.cn域名下的helloworld. ...
- Memcached笔记——(二)XMemcached&Spring集成
今天研究Memcached的Java的Client,使用XMemcached 1.3.5,做个简单的测试,并介绍如何与Spring集成. 相关链接: Memcached笔记--(一)安装&常规 ...
- NoneBot+酷Q,打造QQ机器人
NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功 ...
- [PyTorch入门]之从示例中学习PyTorch
Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...
- OSX编译安装Python3及虚拟开发环境Virtualenv
0X00.前言 因为工作原因,最近主要做Python开发,刚好电脑系统重装之后所有的东西都需要重新配置.此文主要记录OSX下通过源码编译安装Python3以及安装虚拟开发环境Virtualenv. 0 ...
- 基础又重要的浮动(float)
浮动 浮动的概念 什么是浮动,他在css中占据什么样的位置 网页布局的核心,就是用CSS来摆放盒子位置.如何把盒子摆放到合适的位置? 在css中有三种方式来定位位置 普通文档标准流方式 (默认方式) ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(六)Electron打包,同时构建客户端和web端
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
