2.3 | kubernetes: Linux 常用网络命令的使用

ifconfigifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是重启后会失效。-a:显示所有网络设备-s:显示简要信息iproutebrctl

ifconfig

ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是重启后会失效。

命令概览

  • -a:显示所有网络设备
  • -s:显示简要信息
  • <interface> <operation> <parameters>:操作对应网卡
  • up:启用网卡
  • down:关闭网卡
  • txqueuelen <NN>:设置网卡传输队列长度
  • mtu <NN>:设置网卡最大传输单元
  • add <address>[/<prefixlen>]:设置网卡地址
  • del <address>[/<prefixlen>]:删除网卡地址
  • netmask <address>:设置子网掩码
  • tunnel <address>:网卡建立到 address 的隧道
  • hw <HW> <address>:设置网卡 MAC 地址

输出信息示例

$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.214.5  netmask 255.255.255.0  broadcast 172.16.214.255
        inet6 fe80::fd8f:e0f5:1f03:57ac  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ee:fe:e0  txqueuelen 1000  (Ethernet)
        RX packets 76848  bytes 54358432 (54.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72546  bytes 52701758 (52.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ ifconfig -s ens33
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33     1500    76956      0      0 0         72673      0      0      0 BMRU

字段解析

  • ens33:网卡名称,例 lo 为 loopback 的名称
  • flags:
  • 4163 = 0x1043 = 0x1000 + 0x40 + 0x2 + 0x1
  • UP 0x1
  • RUNNING 0x40
  • BROADCAST 0x2
  • MULTICAST 0x1000
  • IPv4
  • inet IPv4 地址
  • netmask 子网掩码
  • broadcast 广播地址
  • IPv6
  • inet6 IPv6 地址
  • prefixlen
  • scopeid
  • ether:网卡硬件地址,即 MAC 地址
  • txqueuelen:传输数据的缓冲区的储存长度
  • RX & TX 共有字段
  • packets 数据包数
  • bytes 总数据量
  • errors 数据包发生错误的数量
  • dropped 数据包由于有问题而遭丢弃的数量
  • overruns
  • RX:数据包接收情况(由启动到目前为止)
  • frame
  • TX:数据包传送情况(由启动到目前为止)
  • collisions 数据包碰撞的情况。太多次,表示网络状况不好
  • carrier
示例

route

route 命令可以显示或设置 Linux 内核中的路由表,主要是静态路由。

对于局域网中的 Linux 主机,要想访问 Internet,需要将局域网的网关 IP 地址设置为这个主机的默认路由。

在命令行中通过 route 命令添加的路由在网卡重启或机器重启后失效。可以在 /etc/rc.local 中添加 route 命令来保证路由设置永久有效。

通过 route 命令查看 Linux 内核的路由表(等同于 netstat -r):

# feivxs @ k8s-node-3 in ~ [18:00:22]
$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 ens33
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 ens33
172.16.214.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.0.0     172.16.214.2    255.255.255.255 UGH   0      0        0 tunl0
192.168.0.0     172.16.214.2    255.255.255.0   UG    0      0        0 tunl0
192.168.1.0     -               255.255.255.0   !     0      -        0 -
192.168.2.0     -               255.255.255.0   !     0      -        0 -
192.168.3.0     -               255.255.255.0   !     0      -        0 -
192.168.76.128  0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.76.137  0.0.0.0         255.255.255.255 UH    0      0        0 calie2066d21eda
192.168.76.138  0.0.0.0         255.255.255.255 UH    0      0        0 cali3ef2c7cdd89
192.168.76.139  0.0.0.0         255.255.255.255 UH    0      0        0 calic440f455693
192.168.109.64  172.16.214.3    255.255.255.192 UG    0      0        0 tunl0
192.168.140.64  172.16.214.4    255.255.255.192 UG    0      0        0 tunl0
192.168.235.192 172.16.214.2    255.255.255.192 UG    0      0        0 tunl0

字段含义

含义
Destination 目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是 10.139.128.1)
Gateway 网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关
Genmask Destination 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0
Flags 标记,含义参考表格后面的解释
Metric 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在Linux内核中使用。)
Ref 路由项引用次数 (不在Linux内核中使用。)
Use 此路由项被路由软件查找的次数
Iface 网卡名字,例如 eth0

Flags 含义:

  • U 路由是活动的
  • H 目标是个主机
  • G 需要经过网关
  • R 恢复动态路由产生的表项
  • D 由路由的后台程序动态地安装
  • M 由路由的后台程序修改
  • ! 拒绝路由

Linux 内核的路由种类

  1. 主机路由

路由表中指向单个 IP 地址或主机名的路由记录,其 Flags 字段为 H。下面示例中,对于 10.0.0.10 这个主机,通过网关 10.139.128.1 网关路由:

[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.10       10.139.128.1    255.255.255.255 UGH   0      0        0 eth0
  1. 网络路由

主机可以到达的网络。下面示例中,对于 10.0.0.0/24 这个网络,通过网关 10.139.128.1 网关路由:

[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        10.139.128.1    255.255.255.0   UG    0      0        0 eth0
  1. 默认路由

当目标主机的 IP 地址或网络不在路由表中时,数据包就被发送到默认路由(默认网关)上。默认路由的 Destination 是 default 或 0.0.0.0。

[root@VM_139_74_centos ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0

命令选项

  • -A:设置地址类型
  • -C:打印 Linux 内核的路由缓存
  • -v:显示详细信息
  • -n:不执行 DNS 反向查找,直接显示数字形式的 IP 地址
  • -e:netstat 格式显示路由表
  • -net:到一个网络的路由表
  • -host:到一个主机的路由表

命令参数

  • add:增加路由记录
  • del:删除路由记录
  • target:目的网络或目的主机
  • gw:设置默认网关
  • mss:设置TCP的最大区块长度(MSS),单位MB
  • window:指定通过路由表的TCP连接的TCP窗口大小
  • dev:路由记录所表示的网络接口

ip

ip 几乎可以替代 routeifconfig 命令,输出内容也比较类似。

  • ip address/ip a
# feivxs @ k8s-node-3 in ~ [21:21:23] C:255
$ ip -s -h address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ee:fe:e0 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 172.16.214.5/24 brd 172.16.214.255 scope global dynamic noprefixroute ens33
       valid_lft 53810sec preferred_lft 53810sec
    inet6 fe80::fd8f:e0f5:1f03:57ac/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast
    80.0M      138k     0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    113M       149k     0       0       0       0

字段与 ifconfig 基本类似。

  • ip route/ip r
$ ip route
default via 172.16.214.1 dev ens33 proto dhcp metric 100
169.254.0.0/16 dev ens33 scope link metric 1000
172.16.214.0/24 dev ens33 proto kernel scope link src 172.16.214.5 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.0.0 via 172.16.214.2 dev tunl0 proto bird onlink
192.168.0.0/24 via 172.16.214.2 dev tunl0 proto bird onlink
unreachable 192.168.1.0/24 proto bird
unreachable 192.168.2.0/24 proto bird
unreachable 192.168.3.0/24 proto bird
blackhole 192.168.76.128/26 proto bird
192.168.76.137 dev calie2066d21eda scope link
192.168.76.138 dev cali3ef2c7cdd89 scope link
192.168.76.139 dev calic440f455693 scope link
192.168.109.64/26 via 172.16.214.3 dev tunl0 proto bird onlink
192.168.140.64/26 via 172.16.214.4 dev tunl0 proto bird onlink
192.168.235.192/26 via 172.16.214.2 dev tunl0 proto bird onlink
  • proto:路由协定
  • redirect 路由是由ICMP重定向加入的
  • kernel 路由是由内核在自动配置期间加入的
  • boot 路由是启动过程中加入的,如果一个路由监控程序将要启动,这些路由都会被清除;
  • static 为了覆盖动态路由,由系统管理员手工添加的路由。路由监控程序也会优先考虑这类路由,甚至可能通告给其对端;
  • ra 路由是通过路由发现协议加入的 (Router Discovery Protocol)
  • scope:路由的范围
  • link 与本设备有关的直接连接

brctl

Reference

Read more

容器镜像(4):镜像的常用工具箱

容器镜像(4):镜像的常用工具箱

前几篇在讲多架构镜像时已经用过 skopeo 和 crane 做镜像复制,这篇系统整理这两个工具的完整能力,同时介绍几个日常操作镜像时同样好用的工具。 一、skopeo:不依赖 Daemon 的镜像瑞士军刀 skopeo 的核心价值是绕过 Docker daemon,直接与 Registry API 交互。上一篇用它做镜像复制和离线传输,但它的能力远不止于此。 1.1 安装 # Ubuntu / Debian sudo apt install -y skopeo skopeo --version # skopeo version 1.15.1 1.2 inspect:免拉取检查镜像元数据 docker inspect 需要先把镜像拉到本地,skopeo inspect 直接向 Registry

容器镜像(3):多架构镜像构建

容器镜像(3):多架构镜像构建

一、什么是多架构镜像 1.1 OCI Image Index 上一篇介绍了单平台镜像的结构:一个 Manifest 指向 Config 和若干 Layer blob。多架构镜像在此之上多了一层——OCI Image Index(也叫 Manifest List),是一个轻量的索引文件,把多个单平台 Manifest 组织在一起: $ docker manifest inspect golang:1.22-alpine { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests&

容器镜像(2):containerd 视角下的镜像

容器镜像(2):containerd 视角下的镜像

一、为什么需要了解 containerd 如果你只用 docker run 跑容器,从来不关心底层,那可以不了解 containerd。但如果你在用 Kubernetes,或者想真正理解"容器运行时"是什么,containerd 是绕不开的。 事实上,当你执行 docker run 的时候,containerd 早就在后台悄悄工作了——Docker 从 1.11 版本开始,就把核心运行时剥离出来交给 containerd 负责。 1.1 Docker 的架构演变 早期的 Docker(1.10 及之前)是一个"大一统"的单体程序:一个 dockerd