笔记-网络篇

Docker网络:可以在docker run的时候指定

bridge:这是Docker默认的网络驱动,此模式会为每一个容器分配Network Namespace和设置IP等,并将容器连接到一个虚拟网桥上。

如果未指定网络驱动,这默认使用此驱动。

1、安装docker的时候默认会启动一个docker0的虚拟网桥  docker network inspect bridge可以查看容器ip范围以及网关

2、创建容器的时候宿主机会创建虚拟网卡 veth pair ,成对出现,一端容器中eth0,另一端放在宿主机的dcoker0,以veth

为前 缀的名字命名 使用brctl show 查看

3、向外通讯的时候使用-p参数绑定主机的端口,采用NAT模式向外发送报文

NAT:网络地址转换,下一层封装上一层的ip信息进行伪装并且记录ip供报文返回寻找源ip

容器使用虚拟网卡eth0--veth--->docker0(网桥)---->eth0(宿主机的)

host:此网络驱动直接使用宿主机的网络。

none:此驱动不构造网络环境。采用了none 网络驱动,那么就只能使用loopback网络设备,容器只能使用127.0.0.1的本机网络

joined containers:使用某个已经存在的容器的网络命名空间

------------------------------------------------------------------------------------------------------------------------

overlay:此网络驱动可以使多个Docker daemons连接在一起,并能够使用swarm服务之间进行通讯。也可以使用overlay网络进行

swarm服务和容器之间、容器之间进行通讯

macvlan:此网络允许为容器指定一个MAC地址,允许容器作为网络中的物理设备,这样Docker daemon就可以通过MAC地址进行访问的

路由。对于希望直接连接网络网络的遗留应用,这种网络驱动有时可能是最好的选择。

Network plugins:可以安装和使用第三方的网络插件。可以在Docker Store或第三方供应商处获取这些插件

------------------------------------------------------------------------------------------------------------------------

kubernets网络模式

1、容器与容器之间的通信

每一个pod启动都会创建一个pause容器,该容器负责为pod提供统一的网络空间其他容器绑定该容器的网络命名空间,容器间使用

通讯localhost

2、Pod和Pod之间的通信

需要网络插件(cni)解决常用的有flannel(网络分配)、calico(提供网络策略)、目前组合使用

flannel:(不支持容器间网络策略,默认用的vxlan传输机制)一个为k8s提供叠加网络(overlay)的插件

采用L3 Overlay模式设计flannel, 规定宿主机下各个Pod属于同一个子网,不同宿主机下的Pod属于不同的子网

flannel会在每一个宿主机上运行名为flanneld代理,其负责为宿主机预先分配一个子网,并为Pod分配IP地址

使用Kubernetes或etcd来存储网络配置、分配的子网和主机公共IP等信息

数据包则通过VXLAN、UDP或host-gw这些类型的后端机制进行转发

VxLAN:可扩展虚拟局域网,使用内核中的vxlan模块封装报文,推荐使用方式

directrouting模式:vxlan使用隧道网络转发叠加网络的报文势必会造成不少的流量开销,所以设计的该模式,仅

仅在主机跨二层网络时才采取隧道方式转发通讯,其余时候直接采用二层网络转发pod报文,

从而省去隧道首部开销。

宿主机二层直达的时候会采取route模式其他使用vxlan,(集群规模不超过200台)

iptables -nL 查看forword链

ip route show 查看路由规则

UDP:使用普通udp报文封装完成隧道转发,性能低。

host-gw:通过在节点上创建目标地址的路由来完成报文的转发,性能好,但需要主机在同一个二层网络中,大型集群无

法满足

flannel运行过程:

1)设置集群网络

flannel默认使用etcd作为配置和协调中心,首先使用etcd设置集群的整体网络。通过如下的命令能够查询网络配置

信息:

etcdctl ls /coreos.com/network/config (安装etcd工具)

2)设置Node节点上的子网

基于在etcd中设置的网络,flannel为每一个Node分配IP子网。

获取子网列表etcdctl ls /coreos.com/network/subnets

获取子网信息etcdctl ls /coreos.com/network/subnets/{IP网段}

3)在每个Node上启动flannelid

flannel在每个Node上启动了一个flanneld的服务,在flanneld启动后,将从etcd中读取配置信息,并请求获取子网

的租约。所有Node上的flanneld都依赖etcd cluster来做集中配置服务,etcd保证了所有node上flanned所看到的配

置是一致 的。同时每个node上的flanned监听etcd上的数据变化,实时感知集群中node的变化。flanneld一旦获取

子网租约、配置后端后,会将一些信息写入/run/flannel/subnet.env文件

cat /var/run/flannel/subnet.env

4)创建虚拟网卡

在Node节点上,会创建一个名为flannel.1的虚拟网卡 ip addr show flannel.1

5)创建Docker网桥

并为容器配置名为docker0的网桥,实际是通过修改Docker的启动参数–bip来实现的。通过这种方式,为每个节点

的Docker0网桥设置在整个集群范围内唯一的网段,从保证创建出来的Pod的IP地址是唯一。

ip addr show docker0

6)修改路由表

flannel会对路由表进行修改,从而能够实现容器跨主机的通信

数据传递过程:container源--->docker0网桥(本机)--->flannel.1虚拟网卡(本机)--->宿主机eth0网卡--->目标主机

eth0网卡--->flannel.1虚拟网卡(目标)--->docker0网桥(目标)--->container目标

ip route查看路由规则

calico:bgp协议方式 ipip(三层隧道)提供网络策略

通过定义NetworkPolicy资源来进行

networkpolicy,定义时候ingress和egress 如果定义了生效又没有定义规则则执行默认(都拒绝)

拒绝所有出入站规则,放行本地namesapce的通信,其他的单独定义。

3、Pod和service之间的通信

通过iptables规则中得到serviceip代理的其中一个pod的ip进行通讯

------------------------------------------------------------------------------------------------------------------------

service

service:service为一组pod提供一个统一的代理服务ip解决了podip经常变化的问题,并且提供负载均衡。

service负载均衡策略设置:

service可以通过servicename解析需要强依赖coredns组件

kube-proxy:监听集群中的对 api-server 中的 service & endpoint 进行 watch ,一旦检测到更新则往 iptables 里全量推送

新的转发规则

mode参数:控制使用iptables或者ipvs

iptables和ipvs

ipvs:IPVS为大型集群提供了更好的可扩展性和性能。

IPVS支持比iptables更复杂的负载平衡算法(最小负载,最少连接,位置,加权等)。

IPVS支持服务器健康检查和连接重试等

service有四种类型

ExternalName:用来做集群外部服务引用的,需要externalIPs参数等

ClusterIP:通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的 ServiceType

NodePort:通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务

LoadBalancer:使用云提供商的负载局衡器,可以向外部暴露服务

------------------------------------------------------------------------------------------------------------------------

Ingress

Service虽然解决了服务发现和负载均衡的问题,但它在使用上还是有一些限制

只支持4层负载均衡,没有7层功能

对外访问时,NodePort类型需要在外部搭建额外的负载均衡,而LoadBalancer要求kubernetes必须跑在支持的cloud provider上

ingress controller

ngress controller通过与kubernetes API交互,动态的去感知集群中Ingress规则变化,然后读取它,按照它自己的模板生成一

段nginx配置,再写到nginx Pod中,最后reload以下

ingress:

就是一段nginx负载的配置文件

三种常用的模式

1:ingress-controller service

2:Traefik 微云应用而生无需重启操作

3:Envoy(服务网格目前习惯使用的 查看)

------------------------------------------------------------------------------------------------------------------------

网络策略:networkpolicy

------------------------------------------------------------------------------------------------------------------------

虚拟机设置静态ip

编辑ifcfg-eno16777736文件

#static assignment

NM_CONTROLLED=no #表示该接口将通过该配置文件进行设置,而不是通过网络管理器进行管理

ONBOOT=yes #开机启动

BOOTPROTO=static #静态IP

IPADDR=192.168.1.122 #本机地址

NETMASK=255.255.255.0 #子网掩码

GATEWAY=192.168.1.1 #默认网关

------------------------------------------------------------------------------------------------------------------------

隧道网络:

二层虚拟化网络:只识别MAC地址,不识IP地址

三层虚拟化网络:不但识别MAC地址,还能把MAC帧中的IP地址

core-dns:提供域名解析服务

flannel:负责集群的网络分配

calico:负责集群的网络策略

NAT:网络地址转换

macvlan:网卡虚拟化方案,它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一个变多个,同时要求物理

网卡打开混杂模式。

vxlan:虚拟可扩展局域网,是一种 overlay 网络技术

Overlay网络:一种网络架构上叠加的虚拟化技术模式,叠加网络

MTU值:数据链路层提供租后的mtu值,用来保证vxlan报文的顺利传输,

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容