虚拟机三个路由器之间连通

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟机三个路由器之间连通相关的知识,希望对你有一定的参考价值。

要实现三个路由器之间的连通性,您需要进行如下配置:
1. 在每个虚拟机中安装并启动一个路由器。例如,您可以在每个虚拟机中安装Quagga、FRRouting等路由协议软件,并根据需求配置每个路由器的IP地址和路由表信息。
2. 将每个虚拟机的网络接口(NIC)都设置为桥接模式,以便虚拟机可以直接和物理网络中的其他设备通信。
3. 将每个虚拟机的虚拟网卡(vNIC)分配到不同的虚拟子网,并将每个虚拟子网与一个路由器的NIC连接在同一个网络上。
4. 在每个路由器中配置静态路由或使用路由协议(如OSPF、BGP等)来互相学习和转发其它路由器的路由信息。
这样,您就可以在虚拟机中实现路由器之间的连通性了。如果您使用的是主流虚拟化平台如VMware、VirtualBox等,通常可以在虚拟机管理工具中方便地进行上述配置。
参考技术A 要将三个虚拟机的路由器之间连接起来,可以使用以下步骤:

1. 在每个虚拟机中创建一个网络适配器并指定相同的虚拟网络。

2. 在每个虚拟机的操作系统中配置网络适配器的IP地址和子网掩码。确保它们在同一网络段内。

3. 在每个虚拟机的路由器中,为每个网络适配器配置不同的IP地址,并将它们设置为网关。

4. 在每个路由器中,为每个网络适配器添加相应的路由规则,以便将数据包正确转发到目标地址。

5. 通过ping命令测试每个虚拟机的路由器之间是否能够相互连通。如果不能,检查网络配置是否正确或尝试排除其他问题。

请注意,三个虚拟机之间的连接可能会涉及到其他安全性和网络配置方面的问题,在实际操作中需要根据具体情况进行详细调整和测试。
参考技术B 1 可以实现三个虚拟机路由器之间的连通。

2 假设三个虚拟机路由器的IP地址分别为A、B、C,A和B之间、B和C之间都能够相互ping通。
则需要在A和C之间建立一条路由,使A能够通过B到达C。
具体实现方法为在B上添加一条静态路由,将A的IP地址作为目的地IP地址,C所在的子网地址作为下一跳IP地址。
同理,在C上也需要添加一条静态路由,将A所在的子网地址作为目的地IP地址,B所在的IP地址作为下一跳IP地址。

3 实现虚拟机路由器之间的连通可以通过搭建虚拟网络实现,也可以通过在主机上安装虚拟机软件,在虚拟机上搭建虚拟网络实现。
实现方法比较灵活,可以根据具体需求进行调整。
参考技术C 要让虚拟机三个路由器之间连通,需要先配置虚拟机上的网络,以及设置虚拟机上的IP地址,其次,在路由器上设置相应的静态路由,让路由器知道如何将数据包转发到正确的地址。最后,在路由器上配置路由协议,比如RIP、OSPF等,以便路由器之间的连通。此外,还要检查路由器之间的连接和网络是否正常,以及网络上的服务是否可以正常使用。

虚拟机centos安装k8s 1.22

0. 虚拟机

虚拟机只需要关注两项:

  • 硬件资源:建议最低2内核+2G,避免在安装k8s时告警

  • 网络连通性:

    • 能联通外网

    • 虚拟机之间可以互联互通

    • 主机与虚拟机之间可以互联互通

我使用的是Mac+VMware Fusion V11.1.0,保证网络连通性做了3步:

  • 在centos中使用静态IP

  • 虚拟机的网络调整为桥接模式

  • 关闭VMWare默认的DHCP

1. 主节点安装CetnOS并设置

省略centos安装过程,我安装的是CentOS-7-x86_64-Minimal-2009

  • 安装时仅设置了时区为上海
  • 以下操作都基于Bash
  • 以下操作都使用root用户
  1. 设置静态IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #这里要改
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=cda6fb79-d025-4f63-8224-8e2694303e8f
DEVICE=ens33
ONBOOT=yes #这里要改
# 后面全是加的,需要按实际情况修改
IPADDR=192.168.0.90
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=223.5.5.5
DNS2=114.114.114.114

配置完ip重启后就可以通过外部的命令行进行ssh连接访问了,无需使用虚拟机自带的窗口

  1. 安装常用软件
yum install -y nano wget git tree
  1. 配置系统
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i \'s/^SELINUX=.*/SELINUX=disabled/\' /etc/selinux/config
setenforce 0
# 永久关闭swap
swapoff -a
sed -i \'/ swap / s/^\\(.*\\)$/#\\1/g\' /etc/fstab
  1. 联网对时
yum install ntpdate -y
ntpdate ntp1.aliyun.com
  1. 设置桥接参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
  1. 修改host(需按实际情况修改)
# 修改自己的hostname
hostnamectl set-hostname master
# 添加host
cat >> /etc/hosts  << EOF
192.168.0.90  master
192.168.0.91  node01
192.168.0.92  node02
EOF

修改完建议重启
7. 配置docker

# 安装docker
wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
# 设置docker相关参数
mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
# 设置为服务并开启服务
systemctl start docker & systemctl enable docker
  1. 安装k8s
# 关闭不需要的服务
systemctl stop postfix && systemctl disable postfix
# 安装k8s全家桶
cat > /etc/yum.repos.d/kubernetes.repo <<EOF 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubeadm-1.22.2 kubelet-1.22.2 kubectl-1.22.2
# 添加环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile

2. 复制虚拟机

因为虚拟机可以方便的复制,因此从节点可以直接复制主节点的镜像.

在本例中复制两个从节点,并做好以下配置:

  • 修改ip为每个从节点的IP,需与host文件对应
  • 修改hostname为每个从节点的hostname,需与host文件对应

修改完重启后可以在主从节点中ping其他的两个节点的ip和hostname,此时应该都能通.

3. 主节点初始化k8s

  1. 主节点初始化k8s,如果虚拟机资源较少,可以设置忽略cpu和内存报警

apiserver-advertise-address要填主节点的ip

kubeadm init \\
--apiserver-advertise-address=192.168.0.90 \\
--image-repository registry.aliyuncs.com/google_containers \\
--kubernetes-version v1.22.2 \\
--service-cidr=10.1.0.0/16 \\
--pod-network-cidr=10.244.0.0/16 \\
--ignore-preflight-errors=NumCPU \\
--ignore-preflight-errors=Mem
  1. 拿生成的语句在各个节点执行

  2. 每个节点将kubelet设置为服务:

systemctl enable kubelet
  1. 主节点安装flannel
kubectl apply -f https://gitee.com/mirrors/flannel/raw/master/Documentation/kube-flannel.yml

此时可以执行kubectl get pods -n kube-system查看各个组件的状态

需要等一会,dns和flannel才会ready

全部ready后此时可以重启主节点试一试,应该重启后也没有问题

4. 安装其他辅助组件

  1. 主节点安装kubectl自动补全并自动启用
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
  1. 主节点安装kubectx&kubens

需要git

git clone https://gitee.com/joyko/kubectx /opt/kubectx
ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
ln -s /opt/kubectx/kubens /usr/local/bin/kubens
  1. 主节点安装helm3
wget https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz
tar -xzvf helm-v3.7.0-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin
rm -rf linux-amd64  helm-v3.7.0-linux-amd64.tar.gz
  1. 主节点安装docker-registry
docker run -d --restart always \\
       --name docker_registry -p 5000:5000 \\
       -v `pwd`/images:/var/lib/registry \\
       registry:2

每个节点修改/etc/docker/daemon.json,添加如下一条

{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries": ["master:5000"]
}

修改完后重启docker

systemctl daemon-reload 
systemctl restart docker

试验一下,推送一个镜像,在其他节点上能否下载

# 与上面配置的insecure-registries要一致
docker tag XXXX master:5000/XXX
docker push master:5000/XXX
# 在其他节点
docker pull master:5000/XXX

如何删除上传到docker_registry中的镜像?

  1. 删除`pwd`/images/docker/registry/v2/repositories/需要删除的镜像
  2. 执行垃圾回收api:docker exec docker_registry bin/registry garbage-collect /etc/docker/registry/config.yml
  3. 重启容器docker_registry

以上是关于虚拟机三个路由器之间连通的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机centos安装k8s 1.22

vmware虚拟机不能访问外网,该如何设置

关于开发板虚拟机之间ping通和tftp下载镜像问题解决记录

oracle virtualbox 虚拟机网络

VMWare虚拟机连接方式

如何配置IP地址及网段,如何测试网络连通,如何通过NUC路径访问