版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的发展和演进中,这必然对客户对云原生网络的可观测性带来了极高的门槛和挑战。鸟瞰容器网络,整个容器网络可以分为三个部分:Pod网段,Service网段和Node网段。这三个网络要实现互联互通和访问控制,那么实现的技术原理是什么?整个链路又是什么,限制又是什么呢?Flannel,Terway有啥区别?不同模式下网络性能如何?这些,需要客户在下搭建容器之前,就要依据自己的业务场景进行选择,而搭建完毕后,相关的架构又是无法转变,所以客户需要对每种架构特点要有也可能是其他ECS,这些在不同模式下,数据链转发模式是不同的,从业务侧表现结果也是不一样的。为了提高云原生网络的可观测性,同时便于客户和前后线同学增加对业务链路的可读性,ACK产研和GTS-AES联合共建,合网络数据面可观测性系列,帮助客户和前后线同学了解云原生网络架构体系,简化对云原生网络的可观测性的门槛,优化客户运维和售后同学处理疑难问题的体验,提高云原生网络的链路的稳定性。 6 29 29 154 190 294 一、容器网络内核原理1.概述●传输层完成处理后,内核会将真正的报文数据提取出来并交给socket子系统,2.netfilter框架#defineNF_IP_LOCAL_IN1●数据包经过入向的路由选择后,确认是由本机的传输层进行处理的,会进入到//priority定义了回调函数的优先级,通过每个hook时机都会有多个{{{{{}caseNF_ACCEPT:caseNF_DROP:caseNF_QUEUE:*nonconventionalverdicts.}}conntrack在内核中也是通过注册在netfilter上的hook函数进行工作的,此外,conntrack机制还依赖于按照cpu的数量来为每一个cpu分配一块用于存放conntrack{{{{{{{{{{##查看ipvsconnection信息,在出节点是,ipvsconnection是独立并且优先于conntrack机制的选择,即流量会优先匹配到ipvs的规则,如果没有命中,才会进入管理,通常cni插件会采用iptables队policy未放行的流量进行屏蔽操作,实现3.tc子系统LinuxTrafficControl(TC)子系统是Li●Qdisc是queueingdiscipline的简写,与我们理解的网卡的队列(queue)不同,qdisc是sk_buff报文进行{}}}{}}}}送条件的数据包进行出队动作,也就是调用网卡的操作方法进行数据的发送,以{intband=prio2band[skb->priority&TC_PRIO_Mstructpfifo_fast_priv*p//获取通道列表的head}}{structpfifo_fast_priv*pqdisc->q.qlen--;}}Cgroup子系统是容器技术的基础,通常我们对cgroup的理解都在于cgroup通过mkdirmkdir/sys/fs/cgroup/net_cl种配置网卡和对应的优先级数值,使对应的cgroup中管理的进程创建出来的socket{}{}{}4.eBPF技术●提供了高效的jit,eBPF的代码在内核中会被编●通过各种开发框架进行初步的检查,然后通过bpf()系统调用进行加载,在这个过●kprobe,kretprobe,fentry,此外,eBPF在容器网络中也扮演着越来越关键的角色,包括二、全景剖析阿里云容器网络数据链路1.Flannel模式架构设计node3:ap-southeast-.180(该节无后端pod)ap-southeast-.180:2.TerwayENI模式架构设计eni-t4naaozjxiehvmg2lwfo。3.TerwayENIIP模式架构设计●同主机上的容器通信直接通过主机上的路由到同一个主机上别的容器对应的veth●容器和其所在的宿主机之间的通信直接通过连接到宿主机namespace的vethcn-hongkong.9节点上存在nginx-●●协议栈;cn-hongkong.cn-hongkong.9cn-hongkong.9cn-hongkong.cn-hongkong.9cn-hongkong.cn-hongkong.10.0.3.4.TerwayIPVLAN+EBPF模式架构设计个IP(2和8)都属于同一个MAC地址00:16:3e:01:b7:bd和00:为00:16:3e:04:08:3a的ENI网卡。客户端的centos-6c48766848-znkl8网络命名空间内eth0抓包,抓包地址是目的个IP(2和8)都属于同一个MAC地址00:16:3e:04:08:3a,说明这两个IP属于不同ENI,进而可以推断出为00:16:3e:04:08:3a的ENI网卡。/document_detail/97467.html#section-krj-kqf-14s/document_detail/55206.htm/document_detail/197320.htm/document_detail/113090.html#p-lim-520-w07●●●●●5.TerwayENI-Trunking模式架构设计、7。0。7。5。7。0。●●●●7。5。●●●●这三个网卡的安全组的配置都会影响数据链路7。5。7。0。7。0。●●6.ASMIstio模式架构设计图:服务网格示例图Istio数据面示意图●将原来集成在同一个ECS上的服务拆分成不同的模块,这些模块之间调用涉及跨则会设置将符合条件的入方向流量避免转发到15006端口,直接转/document_detail/464794.html。https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol程/usr/local/bin/envoy。其中/etc/istio/proxy/envoy-rev.json是envoy初始化的dynamic_resourcesstatic_resources我们在这里还是以官方例子来举例。访问http://<gatewayIP>/productpage,{"upstream_host":"10.0.1{"upstream_host":"30:49586","downstream_local_address":"1uster.local","path":"/details/0","protocol":"HTTP/1.1","ual_address":"30:50026","method":"GET","userSafari/537.36","route_name":"default","request_a7-af11-8491df9ab4f8","start_time":"2023-01-31T14:2eam_transport_failure_reason":null,"upstream_service_onse_flags":"-","bytes_received":0,"authority_for":uthority":"details:9080","requested_server_name":null,"isstatus":null,"trace_id":"9712c9f3da936a8c927_code":200,"x_forwarded_for":null,"bytes_sent":178}{"x_forwarded_for":null{"x_forwarded_for":nullhod":"GET","response_flags":"-","route_name":"default","i_status":null,"requested_server_name":"outbound_.9080_._.details.istio-inject.svc.cluster.local","bytes_received":c2-435f-94a7-af11-8491df9ab4f8","response_code":200,"upstream_host":"27:9080","trace_id":"9712c9f3nstream_remote_address":"30:50026","protocol":"tes_sent":178,"upstream_transport_failure_reason":nocal_address":"27:9080","upstream_local_address":":46225","authority":"details:9080","authoritySafari/537.36"}●"start_time":"2023-01-31T14●"upstream_transport_failure_reason":null;●"authority_for":"details●"requested_server_name":null;https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usageupstream_local_address相对应。apiVersion:apiVersion:networkingcreationTimestamp:'20uid:63f715c9-b253-4fbb-8351-5-reviews.istio-inj其中在reviewsvs的定义了集群内访问reviews.istio-inject.svc.cluster.local是的apiVersion:apiVersion:networkingcreationTimestamp:'20uid:fdbdfcea-1fcd-453e-96fb-cmaxRequestsPerConnectionconsecutive5xxErrors:7感兴趣的同学可以自行研究下,下文会针对此config_dump信息中的cluster,kubectlkubectlexec-nistio-injectp务动作,而是根据"use_origihttps://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#MeshConfi只有被注册到服务网格集群内的serviceentry才可以被成功转发从配置上可以看到filter中并没有特殊的志敏筛选条件,说明接受任何流量,其中刚知道是哪个service?是如何判断如果目的端口未9080可能有小伙伴很奇怪productpage不直接调用ratings服务,所有的配置信息都下发到被注入的envoy里面,这样https://istio.io/latest/docs/reference/config/networking/sidecar/{{"version_info":"2023-01-30T06:25:21Z/19","@type":"/envoy.config.route.v3.RouteConfiguration",{{"cluster":"PassthroughCluster",}{"name":"details.istio-inject.svc.cluster.local:9080","details.istio-inject.svc.cluster.local","details.istio-inject.svc.cluster.local:9080","details","details:9080","details.istio-inject.svc","details.istio-inject.svc:9080","details.istio-inject","details.istio-inject:9080","25",{"retry_on":"connect-failure,refused-stream,unavaius-codes","num_retries":2,{"name":"envoy.retry_host_predicates.previous_hosts","@type":"/envoy.extensions.retry.host.previous"/envoy.extensions.retry.host.previousreviousHostsPredicate"}}"host_selection_retry_max_attempts":"5",]"max_stream_duration":"0s","grpc_timeout_header_max":"0}"operation":"details.istio-inject.svc.cluster.local:9080/}{"name":"istio-ingressgateway.istio-system.svc.cluster.local:9080","istio-ingressgateway.istio-system.svc.cluster.local","istio-ingressgateway.istio-system.svc.cluster.local:9080","istio-ingressgateway.istio-system","istio-ingressgateway.istio-system:9080","istio-ingressgateway.istio-system.svc","istio-ingressgateway.istio-system.svc:9080","50",{"cluster":"retry_on":"connect-failure,refused-stream,unavaiusus-codes","num_retries":2,{"name":"envoy.retry_host_predicates.previous_hosts","@type":"/envoy.extensions.retry.host.previousreviousHostsPredicate"}}"host_selection_retry_max_attempts":"5",]"max_stream_duration":"0s","grpc_timeout_header_max":"0}"operation":"istio-ingressgateway.istio-system.svc.cluster.local:9080/}{"name":"productpage.istio-inject.svc.cluster.local:9080","productpage.istio-inject.svc.cluster.local","productpage.istio-inject.svc.cluster.local:9080","productpage","productpage:9080","productpage.istio-inject.svc","productpage.istio-inject.svc:9080","productpage.istio-inject","productpage.istio-inject:9080","26",{"ratings.istio-inject.svc.cluster.local","ratings.istio-inject.svc.cluster.local","ratings.istio-inject.svc.cluster.local:9080","ratings","ratings:9080","cluster":"retry_on":"connect-failure,refused-stream,unavaius-codes","num_retries":2,{"name":"envoy.retry_host_predicates.previous_hosts","@type":"/envoy.extensions.retry.host.previousreviousHostsPredicate"}}"host_selection_retry_max_attempts":"5",]"max_stream_duration":"0s","grpc_timeout_header_max":"0}"operation":"productpage.istio-inject.svc.cluster.local:9080/}{"name":"ratings.istio-inject.svc.cluster.local:9080","ratings.istio-inject.svc","ratings.istio-inject.svc","ratings.istio-inject.svc:9080","ratings.istio-inject","ratings.istio-inject:9080","72",{"retry_on":"connect-failure,refused-stream,unavaius-codes","num_retries":2,{"name":"envoy.retry_host_predicates.previous_hosts","@type":"/envoy.extensions.retry.host.previousreviousHostsPredicate"}}"host_selection_retry_max_attempts":"5",]"max_stream_duration":"0s","grpc_timeout_header_max":"0}"operation":"ratings.istio-inject.svc.cluster.local:9080/}{"name":"reviews.istio-inject.svc.cluster.local:9080","reviews.istio-inject.svc.cluster.local","reviews.istio-inject.svc.cluster.local:9080","reviews","reviews:9080","reviews.istio-inject.svc","reviews.istio-inject.svc:9080","reviews.istio-inject","reviews.istio-inject:9080","13",{{{{}"retry_on":"connect-failure,refused-stream,unavaius-codes","num_retries":2,{"name":"envoy.retry_host_predicates.previous_hosts","@type":"/envoy.extensions.retry.host.previousreviousHostsPredicate"}}"host_selection_retry_max_attempts":"5",]"max_stream_duration":"0s","grpc_timeout_header_max":"0}"config":"/apis/networking.istio.io/v1alpha3/namespaces/istio-injecservice/reviews"}}"operation":"reviews:9080/}}"last_updated":"2023-01-30T06:25:21.804-inject.svc.cluster.local"和"outbound|9080|v3|reviews.istio-inject.svc.cluster.loc"connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes"这里我们就以"outboundl9080lv1lrevie/document_detail/313187.htmlproductv1-797d845774-dndmk.istio-inject--portproductv1-797d845774-dndmk.istio-inject--nameNOTE:Thisoutputonlycontain9080istio-ingressgateway.istio-sproductv1-797d84577reviews.istio-injecreviews.istio-injec-reviews.istio-injecreviews.istio-injecreviews.istio-inject.svc.cluster.localreviews.istio-inject.svc.cluster.local9080v3productv1-797d845774-dndm相关的网格服务资源配置上,感兴趣的小伙伴可以参考ASM官方文档。三、容器网络常见观测工具及特点1.常见网络排查工具##下载远程服务器渲染后的html文件到本地curl-othatpage.htmlhttcurlhttp://[2001:1890:1112:curl在问题排查过程中主要的作用是用于定界问题的边界,通常如果curl可以正常访lsof命令用于查找套接字监听相关的进程,通常我们也可以依赖ss命#查看当前存在的网络连接信息,这里不会显示具体的地址端口信息,但是会有句柄相关的信息❯ipnetnsexeccni-d7108c65-eb71-3294ipnetnsexeccni-d7108c65-eb71-3294-2bip命令能够让我们在排查问题时较快的掌握排查的网元的状态信息,尤其是在容器场sar工具是一个sysstat工具集提供的功能强大的性能2.NetExporter技术原理YesYesYesYes异常事件的现Yes内核网络高阶YesYes1.Prometheus+Grafana配置Kubernetes可以根据annotation来获取应用自主暴露监控指标的服务。应用添加prometheus.io/app-metrics:'true'获知对应的en--"--storage.tsdb.retention.time=24h"securityContext:#指定运行的用户为args:-"--config.file=/etc/prometheus/pr-"--web.enable-admin-api"-mountPath:"/etc/prometheus"name:prometheus-config#定义的prometeus.yaapiVersion:rbac.author--apiVersion:rbac.author__meta_kubernetes_pod_annotation_prometheus_io_port]adminuserandadminpassword.登录Grafana的对外暴露端口,我们需要设置采集源,设置Grafana的数据源来自的配置相关的服务发现和Grafana大ACKNetExporter支持输出到务发现功能自动获取到所有正常提供服务的ACKNetExporter实例,您可以通过在__meta_kubernetes_pod_annotation_prometheus_io_port]对于使用Grafana进行可视化图形显示的配置,可以参照上述的指标格式,对指标的{{namespace}}/{{pod}}/{{node/acs/inspector:Namespace=kube-systemPod=kube-proxy-workerNode=iZbp1jesgumdx66l8ym8#{"time":"2023-02-03T09:01:03.402118044Z","level":"INFO","source":"/#{"time":"2023-02-03T09:01:03.402118044Z","level":"INFO","source":"/go/src/net-exporter/cmd/watch.go:63","msg":"TCPRESET_Pdport=44226state:TCP_OTHER"}3.典型问题排查指南inspector_pod_udpsndbuferrorsUDP协议通过网络层方法发送时出现报错的次数inspector_pod_udpincsumerrorsUDP接收报文时出现CSUM校验错误的次数inspector_pod_udpnoports网络层调用__udp4_lib_rcv收包时找不到对应端inspector_pod_udpinerrorsUDP接收报文时出现错误的次数inspector_pod_udpoutdatagramsUDP协议通过网络层方法成功发送报文的数量inspector_pod_udprcvbuferrorsUDP在将应用层协议数据拷贝到Socket接收队列时由于队列不足导致的报错次数inspector_pod_tcpextlinspector_pod_tcppassiveopensinspector_pod_tcpretraninspector_pod_conntrackinvalinspector_pod_tcpsummarytcpestaTCP连接的发送队列中存在的数TCP连接的接收队列中存在的数inspector_pod_tcpexttcp报错时计数,说明重传无法正常inspector_pod_tcpexttcpabortontimeout由于keepalive/windowprobe/重传的调用超过上限发送Reset时会更新此计数inspector_pod_tcpexttcpabortonlingerFIN_WAIT2的连接时发送Reset的次数inspector_pod_tcpexttcpabortonclose状态机之外的原因关闭TCP连接时,仍有数据没有读取而发送Reset报文,则会进行指标计数inspector_pod_tcpexttcpabortonmemory在需要分配tw_sock/tcp_sock等逻辑中有由于tcp_check_oom出发内存不足而发送Reset结束连接的次数inspector_pod_tcpexttcpabortondata*由于Linger/Linger2选项开启而通过Reset进行连接的快速回收时发送Reset的计数inspector_pod_tcpexttcpackskippedsynrecv在SYN_RECV状态的Sock不回复ACK的次数inspector_pod_tcpexttcpackskippedpaws由于PAWS机制触发校正,但是OOW限速限制了ACK报文发送的次数inspector_pod_tcpestabresets单个Pod内异常关闭TCP连接的次数,这里仅仅从结果层面统计inspector_pod_tcpoutrsts单个Pod内TCP发送的Reset报文TCP_SEND_RST发送了TCPReset报文,排除下方两个常见场景,其余发送Reset报文均会出发此事件TCP_SEND_RST_NOSock由于本地没有Sock而发送了TCPReset报文TCP_SEND_RST_ACTIVEReset报文TCP_RCV_RST_SYN在握手阶段收到了Reset报文TCP_RCV_RST_ESTAB在连接已建立状态下收到Reset报文TCP_RCV_RST_TW在挥手阶段收到了Reset报文●内核的有状态机制引发的延迟,如Conntrainspector_node_netsoftirqshed从软中断发起到ksoftirqd进程开始执行之间的耗时分布inspector_node_netsoftirq从ksoftirqd开始执行软中断内容到执行完成进入offcpu状态的耗时分布inspector_pod_ioioreadsyscall进程进行文件系统读操作,如read,pread的次数inspector_pod_ioiowritesyscall进程进行文件系统写操作,如write,pwrite的次数inspector_pod_ioioreadbytes进程从文件系统,通常是块设备中读取的Bytes数量inspector_pod_ioiowritebyres进程向文件系统进行写入的Bytes数量inspector_node_virtsendcmdlat网卡操作虚拟化调用的耗时分布inspector_pod_tcpexttcptimeoutsCA状态并未进入recovery/loss/disorder时触发,当SYN报文未得到回复时进行重传会计数inspector_pod_tcpsummarytcpestablishedconn当前存在的ESTABLISHED状态的TCP连接数量inspector_pod_tcpsummarytcptimewaitconn当前存在的TIMEWAIT状态的TCP连接数量inspector_pod_tcpsummarytcptxqueue当前处ESTABLISHED状态的TCP连接的发送队列中存在的数据包的Bytes总数inspector_pod_tcpsummarytcprxqueue当前处ESTABLISHED状态的TCP连接的接收队列中存在的数据包的Bytes总数inspector_pod_softnetprocessed单个Pod内所有CPU处理的从网卡放入CPU的Backlog的报文数量inspector_pod_softnettimesqueeze单个Pod内所有CPU处理的单次收包没有全部获取或者出现超时的次数五、典型问题华山论剑1.某客户nginxingress偶发性出现4xxor5xx增长,结合sock分配数的变化,此时应该有ing。服务端第收到第三次握手的合法报文时,会查找icsk_accept_queue中的request_sock的队列,request_sock是一个轻量级的用于记录一个连接回话信息的inet_connection_sock来说,会专门分配一个成员队列来存放所有处于连接状态的{}{}{}尽管在不同内核版本中有实现上的差异,但是对于request_sock队列,内核采用inet_csk_reqsk_queue_is_full进行判断,判断的方式就是获取reques{}}<}}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳体育学院《中国民间音乐概述》2025-2026学年期末试卷
- 朔州陶瓷职业技术学院《口腔材料学》2025-2026学年期末试卷
- 上海应用技术大学《商法》2025-2026学年期末试卷
- 上海健康医学院《高分子化学》2025-2026学年期末试卷
- 苏州大学《幼儿社会教育与活动指导》2025-2026学年期末试卷
- 上海外国语大学贤达经济人文学院《人体运动基础》2025-2026学年期末试卷
- 沈阳建筑大学《中国近代文学史》2025-2026学年期末试卷
- 上海东海职业技术学院《临床麻醉学》2025-2026学年期末试卷
- 电力法律顾问合同审核考试题目及答案
- 贸易数据申报师岗前安全知识竞赛考核试卷含答案
- 2025年重庆市辅警(协警)招聘考试题库及答案
- 新质生产力下企业人力资源管理的挑战与应对
- 科技创新在中小企业发展中的应用研究
- 2025小学英语介词用法专题训练
- 国有企业资产管理流程与制度汇编
- LNG气化站设备保养手册
- 煤矸石铺地面施工方案
- 2025年苏州文化职测题库及答案(可下载)
- 压力储罐设计计算书
- 2025年疾病预防控制中心招聘考试笔试试题(含答案)
- 快速检测培训课件
评论
0/150
提交评论