k8s網絡問題以及容器跨宿主機通信原理

【0】資源配置文件

[root@mcwk8s03 mcwtest]# ls
mcwdeploy.yaml
[root@mcwk8s03 mcwtest]# cat mcwdeploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: mcwpythonname: mcwtest-deploy
spec:replicas: 1selector:matchLabels:app: mcwpythontemplate:metadata:labels:app: mcwpythonspec:containers:- command:- sh- -c- echo 123 >>/mcw.txt && cd / && rm -rf /etc/yum.repos.d/* && curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo  && yum install -y python2  && python2 -m SimpleHTTPServer 20000image: centosimagePullPolicy: IfNotPresentname: mcwtestdnsPolicy: "None"dnsConfig:nameservers:- 8.8.8.8- 8.8.4.4searches:#- namespace.svc.cluster.local- my.dns.search.suffixoptions:- name: ndotsvalue: "5"
---
apiVersion: v1
kind: Service
metadata:name: mcwtest-svc
spec:ports:- name: mcwportport: 2024protocol: TCPtargetPort: 20000selector:app: mcwpythontype: NodePort
[root@mcwk8s03 mcwtest]#

[1]查看服務部分通,部分不通

[root@mcwk8s03 mcwtest]# kubectl get svc 
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP   10.2.0.1     <none>        443/TCP          583d
mcwtest-svc   NodePort    10.2.0.155   <none>        2024:41527/TCP   133m
nginx         ClusterIP   None         <none>        80/TCP           413d
[root@mcwk8s03 mcwtest]# curl -I 10.2.0.155
curl: (7) Failed connect to 10.2.0.155:80; Connection timed out
[root@mcwk8s03 mcwtest]# curl -I 10.0.0.33:41527
curl: (7) Failed connect to 10.0.0.33:41527; Connection refused
[root@mcwk8s03 mcwtest]# curl -I 10.0.0.36:41527
curl: (7) Failed connect to 10.0.0.36:41527; Connection timed out
[root@mcwk8s03 mcwtest]# curl -I 10.0.0.35:41527
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.18
Date: Tue, 04 Jun 2024 16:38:18 GMT
Content-type: text/html; charset=ANSI_X3.4-1968
Content-Length: 816[root@mcwk8s03 mcwtest]#

【2】查看,能通的IP,是因為在容器所在的宿主機,因此需要排查容器跨宿主機是否可以通信

[root@mcwk8s03 mcwtest]# kubectl get pod -o wide|grep mcwtest
mcwtest-deploy-6465665557-g9zjd     1/1     Running            0          37m    172.17.98.13   mcwk8s05   <none>           <none>
[root@mcwk8s03 mcwtest]# kubectl get nodes -o wide
NAME       STATUS   ROLES    AGE    VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
mcwk8s05   Ready    <none>   580d   v1.15.12   10.0.0.35     <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://20.10.21
mcwk8s06   Ready    <none>   580d   v1.15.12   10.0.0.36     <none>        CentOS Linux 7 (Core)   3.10.0-693.el7.x86_64   docker://20.10.21
[root@mcwk8s03 mcwtest]#

【3】排查容器是否可以跨宿主機IP,首先這個容器是在這個宿主機上,應該優先排查這個宿主機是否能到其他機器的docker0 IP

[root@mcwk8s03 mcwtest]# ifconfig docker
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.17.83.1  netmask 255.255.255.0  broadcast 172.17.83.255ether 02:42:e9:a4:51:4f  txqueuelen 0  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@mcwk8s03 mcwtest]# [root@mcwk8s05 /]# ifconfig docker
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 172.17.98.1  netmask 255.255.255.0  broadcast 172.17.98.255inet6 fe80::42:18ff:fee1:e8fc  prefixlen 64  scopeid 0x20<link>ether 02:42:18:e1:e8:fc  txqueuelen 0  (Ethernet)RX packets 548174  bytes 215033771 (205.0 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 632239  bytes 885330301 (844.3 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@mcwk8s05 /]# [root@mcwk8s06 ~]# ifconfig docker
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 172.17.9.1  netmask 255.255.255.0  broadcast 172.17.9.255inet6 fe80::42:f0ff:fefa:133e  prefixlen 64  scopeid 0x20<link>ether 02:42:f0:fa:13:3e  txqueuelen 0  (Ethernet)RX packets 229  bytes 31724 (30.9 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 212  bytes 53292 (52.0 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@mcwk8s06 ~]# 可以看到,05宿主機是不通其他機器的docker0的,03 06是互通的
[root@mcwk8s05 /]# ping -c 1 172.17.83.1
PING 172.17.83.1 (172.17.83.1) 56(84) bytes of data.
^C
--- 172.17.83.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms[root@mcwk8s05 /]# ping -c 1 172.17.9.1
PING 172.17.9.1 (172.17.9.1) 56(84) bytes of data.
^C
--- 172.17.9.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms[root@mcwk8s05 /]# [root@mcwk8s06 ~]# ping -c 1 172.17.83.1
PING 172.17.83.1 (172.17.83.1) 56(84) bytes of data.
64 bytes from 172.17.83.1: icmp_seq=1 ttl=64 time=0.246 ms--- 172.17.83.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.246/0.246/0.246/0.000 ms
[root@mcwk8s06 ~]#

【4】可以看到,etcd里面,沒有005宿主機的docker網段的

[root@mcwk8s03 mcwtest]# etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/172.17.9.0-24
/coreos.com/network/subnets/172.17.83.0-24
[root@mcwk8s03 mcwtest]# etcdctl get /coreos.com/network/subnets/172.17.9.0-24
{"PublicIP":"10.0.0.36","BackendType":"vxlan","BackendData":{"VtepMAC":"2a:2c:21:3a:58:21"}}
[root@mcwk8s03 mcwtest]# etcdctl get /coreos.com/network/subnets/172.17.83.0-24
{"PublicIP":"10.0.0.33","BackendType":"vxlan","BackendData":{"VtepMAC":"b2:83:33:7b:fd:37"}}
[root@mcwk8s03 mcwtest]#

【5】重啟005的flannel服務,如果不重啟docker0,那么網絡就會有點問題,docker0不會被分配新的網段IP

[root@mcwk8s05 ~]# systemctl restart flanneld.service 
[root@mcwk8s05 ~]# ifconfig flannel.1
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 172.17.89.0  netmask 255.255.255.255  broadcast 0.0.0.0inet6 fe80::3470:76ff:feea:39b8  prefixlen 64  scopeid 0x20<link>ether 36:70:76:ea:39:b8  txqueuelen 0  (Ethernet)RX packets 1  bytes 40 (40.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 9  bytes 540 (540.0 B)TX errors 0  dropped 8 overruns 0  carrier 0  collisions 0[root@mcwk8s05 ~]# ifconfig docker
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 172.17.98.1  netmask 255.255.255.0  broadcast 172.17.98.255inet6 fe80::42:18ff:fee1:e8fc  prefixlen 64  scopeid 0x20<link>ether 02:42:18:e1:e8:fc  txqueuelen 0  (Ethernet)RX packets 551507  bytes 216568663 (206.5 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 635860  bytes 891305864 (850.0 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@mcwk8s05 ~]# systemctl restart docker
[root@mcwk8s05 ~]# ifconfig docker
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 172.17.89.1  netmask 255.255.255.0  broadcast 172.17.89.255inet6 fe80::42:18ff:fee1:e8fc  prefixlen 64  scopeid 0x20<link>ether 02:42:18:e1:e8:fc  txqueuelen 0  (Ethernet)RX packets 552135  bytes 216658479 (206.6 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 636771  bytes 892057926 (850.7 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@mcwk8s05 ~]#

【6】再次查看,etcd已經有了05節點的這個網段了

[root@mcwk8s03 mcwtest]# etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/172.17.83.0-24
/coreos.com/network/subnets/172.17.9.0-24
/coreos.com/network/subnets/172.17.89.0-24
[root@mcwk8s03 mcwtest]# etcdctl get /coreos.com/network/subnets/172.17.89.0-24
{"PublicIP":"10.0.0.35","BackendType":"vxlan","BackendData":{"VtepMAC":"36:70:76:ea:39:b8"}}
[root@mcwk8s03 mcwtest]#

【7】再次測試,05節點的,可以nodeport訪問到了

[root@mcwk8s03 mcwtest]# kubectl get svc
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP   10.2.0.1     <none>        443/TCP          583d
mcwtest-svc   NodePort    10.2.0.155   <none>        2024:33958/TCP   154m
nginx         ClusterIP   None         <none>        80/TCP           413d
[root@mcwk8s03 mcwtest]# curl -I 10.2.0.155:2024
curl: (7) Failed connect to 10.2.0.155:2024; Connection timed out
[root@mcwk8s03 mcwtest]# curl -I 10.0.0.33:33958
curl: (7) Failed connect to 10.0.0.33:33958; Connection refused
[root@mcwk8s03 mcwtest]# curl -I 10.0.0.35:33958
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.18
Date: Tue, 04 Jun 2024 16:59:03 GMT
Content-type: text/html; charset=ANSI_X3.4-1968
Content-Length: 816[root@mcwk8s03 mcwtest]# curl -I 10.0.0.36:33958
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.18
Date: Tue, 04 Jun 2024 16:59:12 GMT
Content-type: text/html; charset=ANSI_X3.4-1968
Content-Length: 816[root@mcwk8s03 mcwtest]#

【8】03節點不通,可能是03是master,但是它本身好像不作為node,就是個單純的master,所以沒法當做nodeIP去訪問。但是集群IP,無法訪問,是怎么回事呢

[root@mcwk8s03 mcwtest]# kubectl get svc
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP   10.2.0.1     <none>        443/TCP          583d
mcwtest-svc   NodePort    10.2.0.155   <none>        2024:33958/TCP   157m
nginx         ClusterIP   None         <none>        80/TCP           413d
[root@mcwk8s03 mcwtest]# kubectl get nodes
NAME       STATUS   ROLES    AGE    VERSION
mcwk8s05   Ready    <none>   580d   v1.15.12
mcwk8s06   Ready    <none>   580d   v1.15.12
[root@mcwk8s03 mcwtest]#

【9】路由方面,重啟flannel,etcd里面會重新寫入新的網段,并且其他節點也會有這個新的網段的路由,需要重啟該宿主機的docker,給容器重新分配新的IP用吧,應該。

之前03 master只有一個flanel的路由,

[root@mcwk8s03 mcwtest]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.254      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.17.9.0      172.17.9.0      255.255.255.0   UG    0      0        0 flannel.1
172.17.83.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0
[root@mcwk8s03 mcwtest]#05 node重啟之后,03上多出來一個05 node的flannel路由,
[root@mcwk8s03 mcwtest]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.254      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.17.9.0      172.17.9.0      255.255.255.0   UG    0      0        0 flannel.1
172.17.83.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0
172.17.89.0     172.17.89.0     255.255.255.0   UG    0      0        0 flannel.1
[root@mcwk8s03 mcwtest]# 06好的node也是如此
之前:
[root@mcwk8s06 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.254      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.17.9.0      0.0.0.0         255.255.255.0   U     0      0        0 docker0
172.17.83.0     172.17.83.0     255.255.255.0   UG    0      0        0 flannel.1
[root@mcwk8s06 ~]# 
操作之后,多了個路由
[root@mcwk8s06 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.254      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.17.9.0      0.0.0.0         255.255.255.0   U     0      0        0 docker0
172.17.83.0     172.17.83.0     255.255.255.0   UG    0      0        0 flannel.1
172.17.89.0     172.17.89.0     255.255.255.0   UG    0      0        0 flannel.1
[root@mcwk8s06 ~]# 05node之前是有兩個路由,但是都是錯誤的
[root@mcwk8s05 /]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.254      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.17.59.0     172.17.59.0     255.255.255.0   UG    0      0        0 flannel.1
172.17.61.0     172.17.61.0     255.255.255.0   UG    0      0        0 flannel.1
172.17.98.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0
[root@mcwk8s05 /]#05重啟之后,也更新了路由為正確的
[root@mcwk8s05 /]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.254      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.17.9.0      172.17.9.0      255.255.255.0   UG    0      0        0 flannel.1
172.17.83.0     172.17.83.0     255.255.255.0   UG    0      0        0 flannel.1
172.17.89.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0
[root@mcwk8s05 /]#

【10】然后看看集群IP為啥不通,這直接原因應該是沒有ipvs規則。

[root@mcwk8s03 mcwtest]# kubectl get svc
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
kubernetes    ClusterIP   10.2.0.1     <none>        443/TCP          583d
mcwtest-svc   NodePort    10.2.0.155   <none>        2024:33958/TCP   3h3m
nginx         ClusterIP   None         <none>        80/TCP           413d
[root@mcwk8s03 mcwtest]# curl -I 10.2.0.155:2024 
curl: (7) Failed connect to 10.2.0.155:2024; Connection timed out
[root@mcwk8s03 mcwtest]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@mcwk8s03 mcwtest]# systemctl status kube-proxy
Unit kube-proxy.service could not be found.
[root@mcwk8s03 mcwtest]# 其它節點都是有ipvs規則的,有時間確認下,ipvsadm規則是哪個服務創建的,應該是kube-proxy創建的吧,我們的03 master是沒有部署kube-proxy,這樣的話,沒有ipvs規則并且無法在master上訪問集群IP就說的通了。如過是這樣的話,也就是容器集群IP之間的通信,跟ipvs有關,跟apiserver是否掛了沒有直接關系,不影響,有時間驗證
[root@mcwk8s05 /]# ipvsadm -Ln|grep -C 1 10.2.0.155-> 172.17.89.4:9090             Masq    1      0          0         
TCP  10.2.0.155:2024 rr-> 172.17.89.10:20000           Masq    1      0          0         
[root@mcwk8s05 /]# 
[root@mcwk8s05 /]# curl -I 10.2.0.155:2024
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.18
Date: Tue, 04 Jun 2024 17:34:45 GMT
Content-type: text/html; charset=ANSI_X3.4-1968
Content-Length: 816[root@mcwk8s05 /]#

【綜上】

單節點的容器網絡用nodeIP:nodeport等之類的用不了了,可以優先檢查下docker0 網關是不是不通了;如果flannel等網絡服務重啟之后,即使是pod方式部署的網絡插件,也要看下重啟docker服務,讓容器分配新的網段。比如某次flannel oom總是重啟,導致kube001網絡故障;每個機器,好像都有其他節點的flannel.1網卡網段的路由,使用當前機器的flannel.1的網卡接口;并且有當前節點docker0網段的路由,是走的 0.0.0.0網關,走默認路由由上面可以知道,svc里面有個是clusterIP用的端口,clusterIP是用ipvs規則管理,進行數據轉發的;nodeip clusterIP的ipvs規則進行轉發,因為轉發到后端容器IP,當前宿主機有所有node的flannel網段的路由,所有flannel網關以及docker0都正常且對應網段的話,那么就是用這兩個接口實現容器跨宿主機通信的。而至于訪問nodeip:nodeport以及clusterIP:port是怎么知道把流量給到正確的pod的,這里是通過ipvs規則來實現尋找到后端pod的,轉發到pod對應的IP和端口的時候,又根據當前機器有所有網絡插件flannel,也就是每個宿主機單獨網段的路由條目,讓它們知道自己要去走flannel.1接口。而etcd保存有哪個網段是哪個宿主機,有對應宿主機IP,找到宿主機IP了,那么在該機器上轉發到的pod機器,在那個宿主機上就是能用該IP,使用docker0進行通信的,因為單個宿主機上的容器,都是通過docker0進行通信,并且互通的。只有跨宿主機通信容器的時候,才會根據路由,找到flannel.1接口,然后在etcd找到是那個宿主機上的容器,然后找到這個容器,完成通信。flannel網絡插件這樣,其它網絡插件原理類似;ipvs網絡代理模式是這個作用,iptables網絡代理模式作用類似。

文章轉載自:馬昌偉

原文鏈接:https://www.cnblogs.com/machangwei-8/p/18236417

體驗地址:引邁 - JNPF快速開發平臺_低代碼開發平臺_零代碼開發平臺_流程設計器_表單引擎_工作流引擎_軟件架構

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23928.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux進程間通信之管道

進程間通信介紹&#xff1a; 進程間通信的概念&#xff1a; 進程間通信簡稱IPC&#xff08;Interprocess communication&#xff09;&#xff0c;進程間通信就是在不同進程之間傳播或交換信息。 進程間通信的目的&#xff1a; 數據傳輸&#xff1a; 一個進程需要將它的數據…

開源WebGIS全流程常用技術棧

1 數據生產 1.1 uDig uDig&#xff08;http://udig.refractions.net/&#xff09;是一個基于Java開源的桌面應用框架&#xff0c;它構建在Eclipse RCP和GeoTools&#xff08;一個開源的Java GIS包)上。可以進行shp格式地圖文件的編輯和查看&#xff1b;是一個開源空間數據查看…

?在哪些場景下,使用SOCKS5代理會特別有用?(socks5代理ip)?

SOCKS5代理作為網絡協議轉換的利器&#xff0c;其獨特功能在眾多實際場景中展現出了極大的價值。以下是幾個特定場景&#xff0c;其中SOCKS5代理的使用將變得尤為重要&#xff1a; 一、網絡安全與隱私訪問 1.高級滲透測試&#xff1a;在網絡安全領域&#xff0c;滲透測試人員…

Java 異常處理 - 自定義異常

在Java中&#xff0c;自定義異常是一種創建新異常類的方式&#xff0c;這些異常類繼承自Throwable類或其子類Exception&#xff08;或RuntimeException&#xff0c;如果它是運行時異常的話&#xff09;。自定義異常通常用于描述特定于應用程序的錯誤情況&#xff0c;以便為調用…

MS21112S單通道 LVDS 差分線路接收器

MS21112S 是一款單通道低壓差分信號 (LVDS) 線 路接收器。在輸入共模電壓范圍內&#xff0c;差分接收器可以 將 100mV 的差分輸入電壓轉換成有效的邏輯輸出。 該芯片可應用于 100Ω 的受控阻抗介質上&#xff0c;進行點對 點基帶數據傳輸。傳輸介質可以是印刷電路板、…

配音方面目前可以用AIGC替代嗎?( 計育韜老師高校公益巡講答疑實錄2024)

這是計育韜老師第 8 次開展面向全國高校的新媒體技術公益巡講活動了。而在每場講座尾聲&#xff0c;互動答疑環節往往反映了高校師生當前最普遍的運營困境&#xff0c;特此計老師在現場即興答疑之外&#xff0c;會盡量選擇有較高價值的提問進行文字答疑梳理。 *本輪巡講主題除了…

360誤刪掉的文件怎么恢復?3種文件找回辦法!

360是一款電腦安全輔助軟件&#xff0c;可以用它來清理垃圾、查殺病毒、修復系統等。然而&#xff0c;有時文件可能會被360誤認為是垃圾而自動清理&#xff0c;造成重要文件丟失&#xff0c;那么360刪掉的文件怎么恢復&#xff1f;下面&#xff0c;讓我們一起來看看如何恢復文件…

三維點云擬合平面推導及源代碼C++

1、背景介紹 實際中,很多人工構造物是由平面結構構造而成,如下圖所示,為一典型的由多個平面組成的人工構筑物。因此,根據離散點擬合成平面,獲取擬合平面方程,是點云數據處理中非常常見的數據處理操作。 2、平面擬合參數推導 基于若離散點,估算平面方程過程如下: 3、程序…

電子設計教學新篇章:SmartEDA引領學校教學升級風潮

在數字化時代的浪潮中&#xff0c;電子設計教學領域正迎來一場革命性的變革。SmartEDA&#xff0c;作為電子設計課程的新寵&#xff0c;以其高效、智能的特性&#xff0c;正成為學校教學升級的重要推手。它不僅極大地提升了電子設計的效率&#xff0c;還為學生們帶來了更為深入…

ChatGPT-4o提示詞的九大酷炫用法,你知道幾個?

ChatGPT-4o提示詞的九大酷炫用法&#xff0c;你知道幾個&#xff1f;&#x1f680; 博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典…

xstream運用,JAVA對象轉xml,xml轉JAVA對象

目錄 xstream 優點&#xff1a; 缺點&#xff1a; XStream的應用場景 用到的依賴 代碼實現 xml標簽對應的實體類 Header Package Request Response TradeInfo 工具類 XmlUtils 執行結果 xstream XStream是一個Java類庫&#xff0c;主要用于將對象序列化為XML&#xf…

OV通配符ssl證書是什么

通配符https證書的產品比較豐富&#xff0c;為了方便區分&#xff0c;可以按照驗證方式將通配符https證書分為DV基礎型通配符https證書和OV企業型通配符https證書兩種。其中OV通配符https證書申請條件高&#xff0c;審核也比較嚴格&#xff0c;相比于DV基礎型通配符https證書&a…

IPv4 和 IPv6 是什么意思?它們之間的區別都有哪些?

什么是 IPv4 和 IPv6 什么是 IPv4 和 IPv6 呢&#xff1f;下面我們就來了解一下。 IPv4 就是互聯網協議第 4 版&#xff0c;是目前廣泛使用的網絡協議版本。它由互聯網工程任務組&#xff08;IETF&#xff09;在 1981 年開發完成。IPv4 使用 32 位地址&#xff0c;允許大約 4…

推薦系統三十六式學習筆記:原理篇.近鄰推薦07|人以群分,你是什么人就看到什么世界

目錄 協同過濾基于用戶的協同過濾背后的思想原理實踐1、構造矩陣2、相似度計算3、推薦計算4、一些改進 應用場景&#xff1a;總結 談及推薦系統&#xff0c;不得不說大名鼎鼎的協同過濾。協同過濾的重點在于協同&#xff0c;所謂協同&#xff0c;也就是群體互幫互助&#xff0c…

初級軟件測試快速入門

文章目錄 初級軟件測試-測試用例、缺陷報告的認識與使用軟件測試簡介測試分類模型質量模型測試模型 用例編寫的八大要素用例設計方法缺陷 初級軟件測試-測試用例、缺陷報告的認識與使用 軟件測試簡介 什么是軟件測試&#xff1f; 使用技術手段驗證軟件是否滿足需求 主流技能 …

關于 Vue.js 中`transition`組件使用:頁面切換動畫和標簽移動動畫都是要用到的

一、引言 在 Vue.js 中&#xff0c;transition組件提供了一種簡單而強大的方式來實現頁面過渡效果。它可以讓元素在狀態改變時&#xff0c;如進入或離開視圖時&#xff0c;以平滑的動畫方式進行過渡。通過transition&#xff0c;我們可以為應用增添更加生動和吸引人的用戶體驗…

Linux文件編碼格式為unknown 8bit

file -i 1.txt顯示文件編碼為unknown 8bit, 說明這個文件的編碼格式因為一些不明原因無法識別了。 可以嘗試用其他編輯器打開&#xff0c;來看一下編輯器最終是用什么編碼格式打開的。 vim :set filecodingnotepad 直接打開文件&#xff0c;右下角會顯示文件編碼 假設文件編…

《數學學習與研究》雜志是什么級別?知網收錄嗎?評職認可嗎?

《數學學習與研究》雜志是什么級別&#xff1f;知網收錄嗎&#xff1f;評職認可嗎&#xff1f; 《數學學習與研究》是由東北師范大學主管&#xff0c;吉林省數學會與東北師范大學出版社聯合主辦的省級優秀數學類期刊雜志。該雜志為半月刊&#xff0c;國際標準刊號為 ISSN1007-…

圖解通用網絡IO底層原理、Socket、epoll、用戶態內核態······

LInux 操作系統中斷 什么是系統中斷 這個沒啥可說的&#xff0c;大家都知道&#xff1b; CPU 在執行任務途中接收到中斷請求&#xff0c;需要保存現場后去處理中斷請求&#xff01;保存現場稱為中斷處理程序&#xff01;處理中斷請求也就是喚醒對應的任務進程來持有CPU進行需要…