【摘要】 上次我发了“几个容器网络相关问题的分析和解决总结”后,有的童鞋已经能照猫画虎地解决容器网络问题了,我心甚慰。前几天我又不务正业地帮忙分析解决了几个影响版本发布的网络问题。其中一个还比较复杂,我记录下来备忘。

目录

7. 主机防火墙iptables、跨节点通信Overlay网络flannel和主机安全组Security Group多种因素导致的网络不通 - iptables&flannel&security group 
8. ping稳定概率丢包 - route

上次我发了“几个容器网络相关问题的分析和解决总结”后,有的童鞋已经能照猫画虎地解决容器网络问题了,我心甚慰。

前几天我又不务正业地帮忙分析解决了几个影响版本发布的网络问题。其中一个还比较复杂,我记录下来备忘。

7. 主机防火墙iptables、跨节点通信Overlay网络flannel和主机安全组Security Group多种因素导致的网络不通 - iptables&flannel&security group

问题现象:

某类生产环境,要开放K8s原生API。其中有一项功能是从K8s api Server代理(Proxy)流量到后端Pods。因为K8s Master到K8s Node的网络不通,导致版本发不出去。 
跨节点通信使用Flannel,backend是VXLAN。据说backend是UDP的时候可以通信。

分析排查:

整个排障过程如下图所示,这是一个由主机防火墙iptables、跨节点通信Overlay网络flannel和主机安全组Security Group多种因素导致的网络不通的问题。比较复杂和典型。

首先,根据“几个容器网络相关问题的分析和解决总结”中的“6. K8s Master主机上ping不通Node节点上的docker0和容器,但在Node上可以ping通 - iptables”,移除K8s Master上的主机防火墙的INPUT和FORWARD链上对icmp的限制reject-with icmp-host-prohibited,还是不通。(注:此乃网络不通原因之一)

在K8s Master上查看路由,发现这个网络环境和其它的不一样,多了一个网络172.16.0.0/24,而且使用了eth0。如下:

# route -n 
Kernel IP routing table 
Destination Gateway Genmask Flags Metric Ref Use Iface 
0.0.0.0 172.16.0.1 0.0.0.0 UG 100 0 0 eth0 
169.254.169.254 172.16.0.2 255.255.255.255 UGH 100 0 0 eth0 
172.16.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 flannel.1 
172.18.100.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0 
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1

经询问172.16.0.0/24网络是deploy-mgr连接K8s Master的网络。因此排查重点放在此网络不一致上。尝试更改此默认路由到gw 192.168.0.1和eth1(flannel的通信网络),结果导致K8s Master不可访问。通过VNC连接上恢复。

使用journalctl -u flanneld查看flannel的日志,发现如下异常:

Using 172.16.0.4 as external interface 
Using 172.16.0.4 as external endpoint

因为缺省flannel的出口网络会使用default路由的接口,而default路由的接口不在flannel的向外通信的网络上,因此肯定这个是错误的。(注:此乃网络不通原因之二)

--public-ip="": 
IP accessible by other nodes for inter-host communication. Defaults to the IP of the interface being used for communication. 
--iface="": 
interface to use (IP or name) for inter-host communication. Defaults to the interface for the default route on the machine.

按照以上描述,修改/etc/default/flanneld中flannel的启动参数如下(-iface和-public-ip),并重启flanneld服务:

FLANNEL_OPTS="-etcd-endpoints=https://192.168.0.15:4003 
-iface=eth1 -public-ip=192.168.0.15 
-etcd-cafile=/var/paas/srv/kubernetes/ca.crt 
-etcd-certfile=/var/paas/srv/kubernetes/kubecfg.crt 
-etcd-keyfile=/var/paas/srv/kubernetes/kubecfg.key"

这块感谢丁姝洁童鞋一起头脑风暴。

查看flannel参数启动正常后,验证K8s Master到K8s Node网络还是不通!

问题解决:

百思不得其姐,几近黔驴技穷。

随后要求再次确认K8s Master上的安全组对UDP协议的8472端口的出方向和入方向是打开的,并要求设置此规则。(注:此乃网络不通原因之三)

Port (number): UDP port to use for sending encapsulated packets. Defaults to kernel default, currently 8472

注意:RFC的VXLAN协议默认端口是4789,但是flannel默认使用8472

如下打开后,网络通了!

我再次得到的教训是对诸如“我在别的地方也是这么配的,但是正常的”、“两个节点之间的通信我已经全部开放了”之类的说法要赔持怀疑态度,一定要亲自查看和确保。

8. ping稳定概率丢包 - route

问题现象:

某环境两台主机之间ping的时候稳定概率丢包50%。

图示如下:

分析排查:

怀疑是多(两)网卡和路由问题导致的一半ping包丢失。查看路由如下:

Destination Gateway Genmask Flags Metric Ref Use Iface 
0.0.0.0 10.175.100.1 0.0.0.0 UG 0 0 0 eth2 
0.0.0.0 9.91.17.59 0.0.0.0 UG 0 0 0 eth0 
9.91.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 
9.91.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 
10.175.100.0 0.0.0.0 255.255.252.0 U 0 0 0 eth2 
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0

很明显地可以看出前4条路由明显不对,default有两条路由且出口完全不一样,到9.91.0.0/24有两条路由且出口完全不一样。

问题解决:

删掉错误的路由,ping就正常了。

来源:华为云社区  作者:乔雷

几个容器网络相关问题的分析和解决总结(续1)相关推荐

  1. 几个容器网络相关问题的分析和解决总结

    [摘要] 网络/容器网络因为其本身的复杂性,以及很多侧重软件开发的童鞋并不熟悉网络,导致和网络/容器网络相关问题的定位.分析和解决都比较困难,很多时 候有无从下手之感.我对最近.再加上以前参与处理了的 ...

  2. 容器网络连接被重置?这篇文章教你如何去定位及分析

    前段时间公司的安卓打包服务出现问题,现象是在上传 360 服务器进行加固的时候,非常大概率会卡在上传阶段,长时间重试最后失败.我对这个情况进行了一些排查分析,解决了这个问题,写了这篇长文复盘了排查的经 ...

  3. 端口扫描分析(一)常用的网络相关命令

    发信人: Heway (陶陶), 信区: Internet_program 标  题: 端口扫描分析(一)常用的网络相关命令 发信站: 飘渺水云间 (Sun Mar 19 14:47:35 2000) ...

  4. Kubernetes容器网络及网络模型

    1.Docker 网络模型 在讨论Kubernetes网络之前,让我们先来看一下Docker网络.Docker采用插件化的网络模式,默认提供bridge.host.none.overlay.macla ...

  5. 云原生系列「三」容器网络

    Docker的网络实现 标准的Docker支持以下4类网络模式. ◎ host模式:使用--net=host指定. ◎ container模式:使用--net=container:NAME_or_ID ...

  6. 使用 ebpf 深入分析容器网络 dup 包问题

    | 导语 我们日常工作中都会遇到内核网络相关问题,包括网络不通.丢包.重传.性能问题等等,排查和解决非常困难,而容器更加重了这种复杂度,涉及2.3层转发,iptable,ipvs,namespace等 ...

  7. 一文理解 K8s 容器网络虚拟化

    简介:本文需要读者熟悉 Ethernet(以太网)的基本原理和 Linux 系统的基本网络命令,以及 TCP/IP 协议族并了解传统的网络模型和协议包的流转原理.文中涉及到 Linux 内核的具体实现 ...

  8. 【Kubernetes】k8s网络概念和实操详细说明【calico网络】【含docker不同容器网络互通配置,k8s网络互通配置】【1】

    文章目录 calico网络之间通信配置[docker容器互通流程配置] calico网络原理分析 一.Calico基本介绍 二.Calico结构组成 三.Calico 工作原理 四.Calico网络方 ...

  9. Kubernetes容器网络(一):Flannel网络原理

    前言 本文主要分享Flannel如何解决跨主机容器之间通信问题的,如果你对主机内容器之间通信流程还不了解,建议先看下这篇文章:Docker网络原理 1.前置网络知识 1).tun/tap设备 tun/ ...

最新文章

  1. cad版本在线转换_CAD版本转换中将图纸转换为AutoCAD2018版本的方法
  2. 华农软件工程实验报告_华南农业大学15年软件工程复习提纲
  3. Linux 驱动面试题总结
  4. 微服务与单体架构:IT变革中企业及个体如何自处?
  5. 画春天的景色计算机教案,大班绘画春天来了教案
  6. Android 学习笔记【基础扫盲篇】
  7. aws lambda_AWS Lambda –无服务器编程
  8. [已解决]Tomcat启动报 java.net.BindException: Address already in use: JVM_Bind
  9. Debian下Oracle10g的安装
  10. 简单html,用CSS设计一个留言板
  11. [小说]魔王冢(22)启程
  12. 转正述职报告怎么写?五年经验PM告诉你……
  13. 入驻shopee平台后,选择哪一个站点作为首站?
  14. Java使用Spire.Doc实现Word转换Pdf
  15. 移动硬盘上装linux系统 Ubuntu
  16. 【Python】全局变量(含义、使用要求、代码调试步骤)
  17. Python+爬虫技术获取斗鱼直播图片(整理)
  18. 华硕笔记本台式机专用系统 GHOSTXPSP3 v2012.12
  19. thinkpad怎么把计算机设置到桌面,联想ThinkPad笔记本Fn键关闭与启用方法
  20. 石头扫地机器人卡顿_80后手残党动手修理石头扫地机器人激光头卡死故障

热门文章

  1. presto 使用 部署_部署PrestoDB on Cassandra
  2. mybatis plus 格式话_作为阿里的面试官,我有话想说
  3. mysql 更改一行_mysql怎么修改数据表里一行数据?
  4. 假设有python程序文件_《Python程序设计》题库
  5. html字体代码大全_HTML基础笔记(一)
  6. Luogu P2066 机器分配(dp)
  7. pycharm professional2019.1破解过程
  8. [Leetcode] Populating next right pointer in each node ii 填充每个节点的右指针
  9. Tomcat主页404错误
  10. zoj3715 Kindergarten Election