Shell脚本切换家庭和随身wifi网络配置
文章目录
- 脚本1:Master节点静态IP配置脚本 (192.168.31.100 / 192.168.0.100)
- 脚本2:Node1节点静态IP配置脚本 (192.168.31.101 / 192.168.0.101)
- 脚本3:Node2节点静态IP配置脚本 (192.168.31.102 / 192.168.0.102)
背景:之前我在家里的网络环境下搭建了一套 K8S的1个Master,2个Node节点的集群环境。后来笔记本带到在公司连上随身wifi后,k8s集群环境崩了。一看网络接口,发现ens33网卡已经没有ip了。这是家里的网络(192.168.31.x)和随身wifi的网络(192.168.0.x)的网段不一样导致的。
接下来我们就写三个脚本来切换三个主机的网络配置,
脚本1:Master节点静态IP配置脚本 (192.168.31.100 / 192.168.0.100)
/usr/local/bin/setup-master-ip.sh
#!/bin/bash# K8s Master节点静态IP配置脚本
# 使用方法: sudo ./setup-master-ip.sh [home|work]set -eecho "======================================"
echo "K8s Master节点静态IP配置脚本"
echo "======================================"# 检测网络接口
INTERFACE=$(ip link show | grep -E "ens[0-9]+|eth[0-9]+" | grep -v "lo:" | head -1 | awk -F: '{print $2}' | tr -d ' ')
if [ -z "$INTERFACE" ]; thenINTERFACE="ens33"echo "未检测到网络接口,使用默认接口: $INTERFACE"
elseecho "检测到网络接口: $INTERFACE"
fi# 获取当前IP信息
CURRENT_IP=$(ip addr show $INTERFACE | grep "inet " | awk '{print $2}' | head -1)
echo "当前IP: $CURRENT_IP"# 选择网络环境
if [ "$1" == "home" ]; thenNETWORK="home"
elif [ "$1" == "work" ]; thenNETWORK="work"
elseecho "请选择网络环境:"echo "1) 家庭网络 (192.168.31.x)"echo "2) 随身WiFi网络 (192.168.0.x)"read -p "请输入选择 [1/2]: " choicecase $choice in1) NETWORK="home" ;;2) NETWORK="work" ;;*) echo "无效选择,退出脚本"; exit 1 ;;esac
fi# 配置参数
case $NETWORK in"home")IP_ADDRESS="192.168.31.100/24"GATEWAY="192.168.31.1"NETWORK_NAME="家庭网络";;"work")IP_ADDRESS="192.168.0.100/24"GATEWAY="192.168.0.1"NETWORK_NAME="随身WiFi网络";;
esacecho "配置为: $NETWORK_NAME"
echo "IP地址: $IP_ADDRESS"
echo "网关: $GATEWAY"# 备份原有配置
BACKUP_FILE="/etc/netplan/01-netcfg.yaml.backup.$(date +%Y%m%d_%H%M%S)"
if [ -f "/etc/netplan/01-netcfg.yaml" ]; thencp /etc/netplan/01-netcfg.yaml $BACKUP_FILEecho "已备份原有配置: $BACKUP_FILE"
fi# 创建netplan配置
cat > /etc/netplan/01-netcfg.yaml << EOF
network:version: 2renderer: networkdethernets:$INTERFACE:dhcp4: noaddresses: [$IP_ADDRESS]gateway4: $GATEWAYnameservers:addresses: [223.5.5.5, 8.8.8.8, 114.114.114.114]
EOFecho "Netplan配置已生成"# 应用配置
echo "应用网络配置..."
netplan apply# 等待网络稳定
sleep 3# 验证网络配置
echo "验证网络配置..."
NEW_IP=$(ip addr show $INTERFACE | grep "inet " | awk '{print $2}' | head -1)
GATEWAY_CHECK=$(ip route | grep default | awk '{print $3}' | head -1)echo "======================================"
echo "配置完成!"
echo "网络接口: $INTERFACE"
echo "配置IP: $NEW_IP"
echo "网关: $GATEWAY_CHECK"
echo "======================================"# 测试网络连通性
echo "测试网络连通性..."
if ping -c 2 -W 1 $GATEWAY &> /dev/null; thenecho "✅ 网关连接成功"
elseecho "❌ 网关连接失败"
fiif ping -c 2 -W 1 223.5.5.5 &> /dev/null; thenecho "✅ 外网连接成功"
elseecho "❌ 外网连接失败"
fiecho "Master节点静态IP配置完成!"
echo "K8s集群节点IP:"
echo " Master: $IP_ADDRESS"
echo " Node1: ${IP_ADDRESS%.*}.101"
echo " Node2: ${IP_ADDRESS%.*}.102"
脚本2:Node1节点静态IP配置脚本 (192.168.31.101 / 192.168.0.101)
vim /usr/local/bin/setup-node1-ip.sh
#!/bin/bash# K8s Node1节点静态IP配置脚本
# 使用方法: sudo ./setup-node1-ip.sh [home|work]set -eecho "======================================"
echo "K8s Node1节点静态IP配置脚本"
echo "======================================"# 检测网络接口
INTERFACE=$(ip link show | grep -E "ens[0-9]+|eth[0-9]+" | grep -v "lo:" | head -1 | awk -F: '{print $2}' | tr -d ' ')
if [ -z "$INTERFACE" ]; thenINTERFACE="ens33"echo "未检测到网络接口,使用默认接口: $INTERFACE"
elseecho "检测到网络接口: $INTERFACE"
fi# 获取当前IP信息
CURRENT_IP=$(ip addr show $INTERFACE | grep "inet " | awk '{print $2}' | head -1)
echo "当前IP: $CURRENT_IP"# 选择网络环境
if [ "$1" == "home" ]; thenNETWORK="home"
elif [ "$1" == "work" ]; thenNETWORK="work"
elseecho "请选择网络环境:"echo "1) 家庭网络 (192.168.31.x)"echo "2) 随身WiFi网络 (192.168.0.x)"read -p "请输入选择 [1/2]: " choicecase $choice in1) NETWORK="home" ;;2) NETWORK="work" ;;*) echo "无效选择,退出脚本"; exit 1 ;;esac
fi# 配置参数
case $NETWORK in"home")IP_ADDRESS="192.168.31.101/24"GATEWAY="192.168.31.1"NETWORK_NAME="家庭网络";;"work")IP_ADDRESS="192.168.0.101/24"GATEWAY="192.168.0.1"NETWORK_NAME="随身WiFi网络";;
esacecho "配置为: $NETWORK_NAME"
echo "IP地址: $IP_ADDRESS"
echo "网关: $GATEWAY"# 备份原有配置
BACKUP_FILE="/etc/netplan/01-netcfg.yaml.backup.$(date +%Y%m%d_%H%M%S)"
if [ -f "/etc/netplan/01-netcfg.yaml" ]; thencp /etc/netplan/01-netcfg.yaml $BACKUP_FILEecho "已备份原有配置: $BACKUP_FILE"
fi# 创建netplan配置
cat > /etc/netplan/01-netcfg.yaml << EOF
network:version: 2renderer: networkdethernets:$INTERFACE:dhcp4: noaddresses: [$IP_ADDRESS]gateway4: $GATEWAYnameservers:addresses: [223.5.5.5, 8.8.8.8, 114.114.114.114]
EOFecho "Netplan配置已生成"# 应用配置
echo "应用网络配置..."
netplan apply# 等待网络稳定
sleep 3# 验证网络配置
echo "验证网络配置..."
NEW_IP=$(ip addr show $INTERFACE | grep "inet " | awk '{print $2}' | head -1)
GATEWAY_CHECK=$(ip route | grep default | awk '{print $3}' | head -1)echo "======================================"
echo "配置完成!"
echo "网络接口: $INTERFACE"
echo "配置IP: $NEW_IP"
echo "网关: $GATEWAY_CHECK"
echo "======================================"# 测试网络连通性
echo "测试网络连通性..."
if ping -c 2 -W 1 $GATEWAY &> /dev/null; thenecho "✅ 网关连接成功"
elseecho "❌ 网关连接失败"
fiif ping -c 2 -W 1 223.5.5.5 &> /dev/null; thenecho "✅ 外网连接成功"
elseecho "❌ 外网连接失败"
fi# 测试与Master节点的连接
MASTER_IP="${IP_ADDRESS%.*}.100"
if ping -c 2 -W 1 $MASTER_IP &> /dev/null; thenecho "✅ Master节点连接成功 ($MASTER_IP)"
elseecho "⚠️ Master节点连接失败 ($MASTER_IP)"
fiecho "Node1节点静态IP配置完成!"
echo "K8s集群节点IP:"
echo " Master: $MASTER_IP"
echo " Node1: $IP_ADDRESS"
echo " Node2: ${IP_ADDRESS%.*}.102"
脚本3:Node2节点静态IP配置脚本 (192.168.31.102 / 192.168.0.102)
vim /usr/local/bin/setup-node2-ip.sh
#!/bin/bash# K8s Node2节点静态IP配置脚本
# 使用方法: sudo ./setup-node2-ip.sh [home|work]set -eecho "======================================"
echo "K8s Node2节点静态IP配置脚本"
echo "======================================"# 检测网络接口
INTERFACE=$(ip link show | grep -E "ens[0-9]+|eth[0-9]+" | grep -v "lo:" | head -1 | awk -F: '{print $2}' | tr -d ' ')
if [ -z "$INTERFACE" ]; thenINTERFACE="ens33"echo "未检测到网络接口,使用默认接口: $INTERFACE"
elseecho "检测到网络接口: $INTERFACE"
fi# 获取当前IP信息
CURRENT_IP=$(ip addr show $INTERFACE | grep "inet " | awk '{print $2}' | head -1)
echo "当前IP: $CURRENT_IP"# 选择网络环境
if [ "$1" == "home" ]; thenNETWORK="home"
elif [ "$1" == "work" ]; thenNETWORK="work"
elseecho "请选择网络环境:"echo "1) 家庭网络 (192.168.31.x)"echo "2) 随身WiFi网络 (192.168.0.x)"read -p "请输入选择 [1/2]: " choicecase $choice in1) NETWORK="home" ;;2) NETWORK="work" ;;*) echo "无效选择,退出脚本"; exit 1 ;;esac
fi# 配置参数
case $NETWORK in"home")IP_ADDRESS="192.168.31.102/24"GATEWAY="192.168.31.1"NETWORK_NAME="家庭网络";;"work")IP_ADDRESS="192.168.0.102/24"GATEWAY="192.168.0.1"NETWORK_NAME="随身WiFi网络";;
esacecho "配置为: $NETWORK_NAME"
echo "IP地址: $IP_ADDRESS"
echo "网关: $GATEWAY"# 备份原有配置
BACKUP_FILE="/etc/netplan/01-netcfg.yaml.backup.$(date +%Y%m%d_%H%M%S)"
if [ -f "/etc/netplan/01-netcfg.yaml" ]; thencp /etc/netplan/01-netcfg.yaml $BACKUP_FILEecho "已备份原有配置: $BACKUP_FILE"
fi# 创建netplan配置
cat > /etc/netplan/01-netcfg.yaml << EOF
network:version: 2renderer: networkdethernets:$INTERFACE:dhcp4: noaddresses: [$IP_ADDRESS]gateway4: $GATEWAYnameservers:addresses: [223.5.5.5, 8.8.8.8, 114.114.114.114]
EOFecho "Netplan配置已生成"# 应用配置
echo "应用网络配置..."
netplan apply# 等待网络稳定
sleep 3# 验证网络配置
echo "验证网络配置..."
NEW_IP=$(ip addr show $INTERFACE | grep "inet " | awk '{print $2}' | head -1)
GATEWAY_CHECK=$(ip route | grep default | awk '{print $3}' | head -1)echo "======================================"
echo "配置完成!"
echo "网络接口: $INTERFACE"
echo "配置IP: $NEW_IP"
echo "网关: $GATEWAY_CHECK"
echo "======================================"# 测试网络连通性
echo "测试网络连通性..."
if ping -c 2 -W 1 $GATEWAY &> /dev/null; thenecho "✅ 网关连接成功"
elseecho "❌ 网关连接失败"
fiif ping -c 2 -W 1 223.5.5.5 &> /dev/null; thenecho "✅ 外网连接成功"
elseecho "❌ 外网连接失败"
fi# 测试与Master节点的连接
MASTER_IP="${IP_ADDRESS%.*}.100"
if ping -c 2 -W 1 $MASTER_IP &> /dev/null; thenecho "✅ Master节点连接成功 ($MASTER_IP)"
elseecho "⚠️ Master节点连接失败 ($MASTER_IP)"
fiecho "Node2节点静态IP配置完成!"
echo "K8s集群节点IP:"
echo " Master: $MASTER_IP"
echo " Node1: ${IP_ADDRESS%.*}.101"
echo " Node2: $IP_ADDRESS"
给脚本添加执行权限
sudo chmod +x /usr/local/bin/setup-master-ip.sh
sudo chmod +x /usr/local/bin/setup-node1-ip.sh
sudo chmod +x /usr/local/bin/setup-node2-ip.sh
集群IP分配表
节点 家庭网络IP 随身WiFi网络IP
Master 192.168.31.100 192.168.0.100
Node1 192.168.31.101 192.168.0.101
Node2 192.168.31.102 192.168.0.102
使用方法
在对应节点上执行:
# Master节点
sudo setup-master-ip.sh# Node1节点
sudo setup-node1-ip.sh# Node2节点
sudo setup-node2-ip.sh
或者直接指定网络:
# 配置为随身WiFi网络
sudo setup-master-ip.sh work
sudo setup-node1-ip.sh work
sudo setup-node2-ip.sh work# 配置为家庭网络
sudo setup-master-ip.sh home
sudo setup-node1-ip.sh home
sudo setup-node2-ip.sh home
这些脚本现在按照你的IP分配:Master=100, Node1=101, Node2=102,并且会自动测试节点间的网络连通性。
