K8s网络不通Calico网络不通flannel网络不通

简介: K8s网络不通Calico网络不通flannel网络不通

1.网络不通的因素

Pod 内的路由丢失

Host 路由丢失iptables 规则问题

IPVS 规则问题

IP 冲突

Pod 网卡停止工作

ARP 表错误

Core DNS 解析问题

流量转发表问题

2.一般问题排查

1.Pod A 到 Host A,即 Pod 到当前主机不通

2.Host A 到 Host B,即 Pod 跨节点访问主机不通

3.Host B 到 Pod B,即 Pod 跨节点访问 Pod 不通,也可能是 Pod B 到 Host B 不通

4.PodA 到 PodB 即 pod 和 pod 网络不通。

3.在Pod中(ip a)查看网卡信息是否正常

[root@node1 ~]# kubectl exec -it busybox -n default /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
/ #
/ #
/ #
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:62:3d:1c brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.138/24 brd 192.168.31.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::bc28:8e16:aea8:c62e/64 scope link
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue qlen 1000
    link/ether 52:54:00:62:2a:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 qlen 1000
    link/ether 52:54:00:62:2a:94 brd ff:ff:ff:ff:ff:ff
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
    link/ether 02:42:24:8b:af:61 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

4. 使用 (ip r) 查看路由是否正常

/ # ip r
default via 192.168.31.1 dev ens33  metric 100
10.244.0.0/24 via 10.244.0.0 dev flannel.1 onlink
10.244.1.0/24 dev cni0 scope link  src 10.244.1.1
172.17.0.0/16 dev docker0 scope link  src 172.17.0.1
192.168.31.0/24 dev ens33 scope link  src 192.168.31.138  metric 100
192.168.122.0/24 dev virbr0 scope link  src 192.168.122.1

5.在主机上用命令 (arp -a | grep PodIP )查看 arp 表是否异常。检查是否丢失、存在多条、Mac 地址与 pod 中看到的 Mac 不一致。

[root@node1 ~]#  arp -a | grep 10
? (10.244.1.48) at 9e:f6:c5:d4:47:0b [ether] on cni0
? (10.244.1.51) at da:03:c2:99:07:5f [ether] on cni0
? (10.244.1.53) at 82:0c:32:fc:74:71 [ether] on cni0
? (10.244.1.54) at da:9b:f5:dd:1a:d6 [ether] on cni0
? (10.244.1.36) at <incomplete> on cni0
? (10.244.1.42) at <incomplete> on cni0
? (10.244.1.45) at de:97:bd:2f:ec:e6 [ether] on cni0
? (10.244.0.0) at 7a:a2:12:5d:dd:6f [ether] PERM on flannel.1
? (10.244.1.46) at da:1e:b8:6e:d5:e9 [ether] on cni0

6.在主机上查看网卡是否存在

[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:62:3d:1c brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.138/24 brd 192.168.31.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever

7.pod中与主机中的路由是否存在

/ # ip r
default via 192.168.31.1 dev ens33  metric 100
10.244.0.0/24 via 10.244.0.0 dev flannel.1 onlink
10.244.1.0/24 dev cni0 scope link  src 10.244.1.1
172.17.0.0/16 dev docker0 scope link  src 172.17.0.1
192.168.31.0/24 dev ens33 scope link  src 192.168.31.138  metric 100
192.168.122.0/24 dev virbr0 scope link  src 192.168.122.1
/ # ip r get 192.168.31.138
local 192.168.31.138 dev lo  src 192.168.31.138

8.在 Host A 上,执行命令 ip r get PodB IP,检查 Host A 是否有到 Pod B 的路由。

9.主机上到Pod 是否有到Pod的路由

[root@node1 ~]#  ip r get 10.244.1.51
10.244.1.51 dev cni0 src 10.244.1.1
    cache
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
4月前
|
Kubernetes 数据安全/隐私保护 容器
K8s中Flannel网络插件安装提示forbidden无权限的解决方法
总的来说,解决“forbidden无权限”的问题,需要从权限和配置两个方面来考虑。只有当用户或者服务账户有足够的权限,且Flannel的配置文件设置正确,才能成功地安装Flannel。希望这个解答能够帮助你解决问题。
222 13
|
6月前
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
219 12
|
9月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
297 2
|
11月前
|
Kubernetes 网络协议 网络安全
k8s中网络连接问题
【10月更文挑战第3天】
725 7
|
11月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
3088 2
|
存储 Kubernetes 网络协议
Kubernetes网络分析之Flannel
Flannel是cereos开源的CNI网络插件,flannel支持多种网络模式,在实际的生产环境中,最常用的还是vxlan模式,本文将介绍其工作原理,并通过源码解析实现过程。
|
存储 Kubernetes 网络协议
Kubernetes网络分析之Flannel
Flannel是CoreOS开源的CNI网络插件,下图flannel官网提供的一个数据包经过封包、传输以及拆包的示意图,从这个图片里面里面可以看出两台机器的docker0分别处于不同的段:10.1.20.1/24 和 10.1.15.1/24 ,如果从Web App Frontend1 pod(10.1.15.2)去连接另一台主机上的Backend Service2 pod(10.1.20.3),网络包从宿主机192.168.0.100发往192.168.0.200,内层容器的数据包被封装到宿主机的UDP里面,并且在外层包装了宿主机的IP和mac地址。
3379 0
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
167 9
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。

推荐镜像

更多