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 ...
随机推荐
- 关于安装了Vue-devtools插件但在浏览器控制台不显示的解决方案
Google浏览器中开发调试的时候,右上角出现vue的图标,但是在开发者工具中没有出现vue调试(已在扩展程序中安装 Vue Devtools) 控制台却没有. 错误原因: 没显示调试工具的原因是用了 ...
- 【转载】python3安装scrapy之windows32位爬坑
python3安装scrapy之windows32位爬坑 原创 2016年11月06日 01:38:08 标签: scrapy / windows / python / 开源框架 / 网络爬虫 早 ...
- MySQL增、删、改、查基础操作(C++)
系统平台:Centos7 MySQL版本:5.7.19 连接MySQL数据库 MySQL::MySQL(string host, string user, string passwd, string ...
- 【年度开源、工具合集】牛津计划,DMTK,Graph Engine…提高你的工作效率!
本篇合集包括以下三个部分的内容: 1.微软亚洲研究院过去一年的所有开源合集,如分布式机器学习工具包DMTK等. 2.利用微软研究院的技术提高工作效率的工具合集,如让没有机器学习背景的开发人员也能开发出 ...
- MySQL 的 RowNum 实现(排行榜计算用户排名)
1. 计算用户排名最高效的方法 例如:通过用户分享个数排名,那么自己的排名就是:比自己分享数多的用户个数 + 1 ' and `count` > '自己分享个数' 缺点:当多个用户分享个数相同的 ...
- java反序列化-ysoserial-调试分析总结篇(2)
前言: 这篇主要分析commonCollections2,调用链如下图所示: 调用链分析: 分析环境:jdk1.8.0 反序列化的入口点为src.zip!/java/util/PriorityQueu ...
- Spring Boot2.x 动态数据源配置
原文链接: Spring Boot2.x 动态数据源配置 基于 Spring Boot 2.x.Spring Data JPA.druid.mysql 的动态数据源配置Demo,适合用于数据库的读写分 ...
- C++走向远洋——36(数组做数据成员,工资)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:salarly.cpp * 作者:常轩 * 微信公众号:Worl ...
- 记一个 Base64 有关的 Bug
本文原计划写两部分内容,第一是记录最近遇到的与 Base64 有关的 Bug,第二是 Base64 编码的原理详解.结果写了一半发现,诶?不复杂的一个事儿怎么也要讲这么长?不利于阅读和理解啊(其实是今 ...
- 小白学 Python 数据分析(10):Pandas (九)数据运算
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
