使用树莓派搭建k8s集群(arm64架构,附安装脚本)(代码片段)

NaclChan NaclChan     2023-04-17     466

关键词:

为了能够更好的学习K8S,王道还是得自己动手

在虚拟机上玩K8S,没啥感觉。决定挑战自己,然后买了6个树莓派,在真实的硬件上从零开始搭建部署K8S。以下内容在自己的树莓派集群上经过充分验证,没毛病。成品如下图:

树莓派供电用的是带POE功能的交换机,每一个树莓派都配备了POE HAT(可淘宝搜索,100左右一只) 

废话不多说,直接上干货

1. 各树莓派节点的规划设计:

2. 各节点基本情况:

3. 首先选择一个节点当做load balance,我这里选择的是piW3节点。这个节点后续还会承担harbor镜像库、nfs服务器等职责,为搭建CICD做准备。说白了,piW3就是个集中存储区

#切换root用户,在每一个节点安装之前,手动切换为su用户
#sudo su - 

#首先设置echo输出的各种颜色和格式
COLOR_START='echo -e \\033[35;49m'
COLOR_END='\\033[0m'

$COLOR_START"安装Nginx"$COLOR_END
apt install nginx -y

cd /etc/nginx
$COLOR_START"配置Nginx"$COLOR_END
nano nginx.conf

stream 
    include stream.conf;


$COLOR_START"增加新内容,这三台的IP就是我们的三台master的IP,端口都设置了6443"$COLOR_END
nano stream.conf
upstream k8s-apiserver 
    server 192.168.3.101:6443;
    server 192.168.3.102:6443;
    server 192.168.3.103:6443;



$COLOR_START"检查Nginx"$COLOR_END
nginx -t

$COLOR_START"重启Nginx"$COLOR_END
systemctl restart nginx

$COLOR_START"删除文件夹,防止Nginx报错"$COLOR_END
cd sites-enabled
rm -rf default

$COLOR_START"重启Nginx"$COLOR_END
systemctl restart nginx

$COLOR_START"查看Nginx运行状态"$COLOR_END
ps -ef | grep nginx 

4. 在主控节点上部署K8S,我这里选择的是piM1。piM1在集群中除了承担主节点的职责以外,还安装了NAT,方便进行外网穿梭。在外面的时候,也能方便的访问集群。NAT我选的是花生壳,自己申请了域名(NAT教程网上很多,自行搜索)

#切换root用户,在每一个节点安装之前,手动切换为su用户
#sudo su - 

#首先设置echo输出的各种颜色和格式
COLOR_START='echo -e \\033[35;49m'
COLOR_END='\\033[0m'

$COLOR_START"更新软件源,全部切换为阿里云"$COLOR_END
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse 
EOF

$COLOR_START"检查更新及安装更新"$COLOR_END
apt update
apt upgrade -y

$COLOR_START"安装语言包"$COLOR_END
apt-get install language-pack-en
apt-get install language-pack-zh-hans

$COLOR_START"设置HOST的模板文件"$COLOR_END
cat >> /etc/cloud/templates/hosts.debian.tmpl <<EOF
192.168.3.101 piM1
192.168.3.102 piM2
192.168.3.103 piM3
192.168.3.111 piW1
192.168.3.112 piW2
192.168.3.113 piW3
EOF

$COLOR_START"关闭SWAP"$COLOR_END
swapoff -a
sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab

$COLOR_START"添加加载的内核模块"$COLOR_END
tee /etc/modules-load.d/containerd.conf<<EOF
overlay
br_netfilter
EOF

$COLOR_START"加载内核模块"$COLOR_END
modprobe overlay
modprobe br_netfilter

$COLOR_START"设置并应用内核参数"$COLOR_END
tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

$COLOR_START"curl gnupg2 software-properties-common apt-transport-https ca-certificates"$COLOR_END
apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

$COLOR_START"安装GPG证书"$COLOR_END
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |  apt-key add -

$COLOR_START"写入软件源信息并更新"$COLOR_END
add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update

$COLOR_START"安装containerd"$COLOR_END
apt install -y containerd.io

$COLOR_START"生成containetd的配置文件"$COLOR_END
#结果数据全部丢弃(重定向到空文件),2>&1代表错误信息输出到标准输出上
containerd config default | tee /etc/containerd/config.toml >/dev/null 2>&1

$COLOR_START"修改cgroup Driver为systemd"$COLOR_END
sed -i 's/SystemdCgroup \\= false/SystemdCgroup \\= true/g' /etc/containerd/config.toml

$COLOR_START"将镜像源设置为阿里云 google_containers 镜像源"$COLOR_END
sed -i 's/k8s.gcr.io/registry.aliyuncs.com\\/google_containers/g' /etc/containerd/config.toml

$COLOR_START"containerd重启及服务永久启动"$COLOR_END
systemctl restart containerd
systemctl enable containerd

$COLOR_START"添加apt-key"$COLOR_END
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

$COLOR_START"添加Kubernetes的apt源为阿里云的源并更新"$COLOR_END
#将xenial修改为了jammy,jammy的版本还不成熟,又改回了xenial
apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt update

$COLOR_START"安装kubelet kubeadm kubectl"$COLOR_END
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
kubeadm version

$COLOR_START"开启路由功能"$COLOR_END
sysctl -w net.ipv4.ip_forward=1

$COLOR_START"初始化kubernetes,指定版本号为最新版1.25.2,192.168.3.113为k8s-lb-nginx负载均衡机器的IP"$COLOR_END
kubeadm init \\
--kubernetes-version=v1.25.2  \\
--image-repository registry.aliyuncs.com/google_containers --v=5 \\
--control-plane-endpoint "192.168.3.113:6443" \\
--upload-certs \\
--service-cidr=10.96.0.0/12 \\
--pod-network-cidr=10.244.0.0/16

$COLOR_START"设置K8S"$COLOR_END
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

$COLOR_START"导出K8S设置"$COLOR_END
export KUBECONFIG=/etc/kubernetes/admin.conf

$COLOR_START"查看K8S安装信息"$COLOR_END
kubectl cluster-info
kubectl get nodes

reboot

$COLOR_START"所有节点全部安装完毕后,再进行验证"$COLOR_END
kubectl create deployment demoapp --image=registry.cn-hangzhou.aliyuncs.com/raymond9/demoapp:v1.0 --replicas=3

5. 在另外两个次主控节点上部署K8S,我选择了piM2,piM3作为次主控节点。脚本如下

#切换root用户,在每一个节点安装之前,手动切换为su用户
#sudo su - 

#首先设置echo输出的各种颜色和格式
COLOR_START='echo -e \\033[35;49m'
COLOR_END='\\033[0m'

$COLOR_START"更新软件源,全部切换为阿里云"$COLOR_END
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse 
EOF

$COLOR_START"检查更新及安装更新"$COLOR_END
apt update
apt upgrade -y

$COLOR_START"安装语言包"$COLOR_END
apt-get install language-pack-en
apt-get install language-pack-zh-hans

$COLOR_START"设置HOST的模板文件"$COLOR_END
cat >> /etc/cloud/templates/hosts.debian.tmpl <<EOF
192.168.3.101 piM1
192.168.3.102 piM2
192.168.3.103 piM3
192.168.3.111 piW1
192.168.3.112 piW2
192.168.3.113 piW3
EOF

$COLOR_START"关闭SWAP"$COLOR_END
swapoff -a
sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab

$COLOR_START"添加加载的内核模块"$COLOR_END
tee /etc/modules-load.d/containerd.conf<<EOF
overlay
br_netfilter
EOF

$COLOR_START"加载内核模块"$COLOR_END
modprobe overlay
modprobe br_netfilter

$COLOR_START"设置并应用内核参数"$COLOR_END
tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

$COLOR_START"curl gnupg2 software-properties-common apt-transport-https ca-certificates"$COLOR_END
apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

$COLOR_START"安装GPG证书"$COLOR_END
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |  apt-key add -

$COLOR_START"写入软件源信息并更新"$COLOR_END
add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update

$COLOR_START"安装containerd"$COLOR_END
apt install -y containerd.io

$COLOR_START"生成containetd的配置文件"$COLOR_END
#结果数据全部丢弃(重定向到空文件),2>&1代表错误信息输出到标准输出上
containerd config default | tee /etc/containerd/config.toml >/dev/null 2>&1

$COLOR_START"修改cgroup Driver为systemd"$COLOR_END
sed -i 's/SystemdCgroup \\= false/SystemdCgroup \\= true/g' /etc/containerd/config.toml

$COLOR_START"将镜像源设置为阿里云 google_containers 镜像源"$COLOR_END
sed -i 's/k8s.gcr.io/registry.aliyuncs.com\\/google_containers/g' /etc/containerd/config.toml

$COLOR_START"containerd重启及服务永久启动"$COLOR_END
systemctl restart containerd
systemctl enable containerd

$COLOR_START"添加apt-key"$COLOR_END
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

$COLOR_START"添加Kubernetes的apt源为阿里云的源并更新"$COLOR_END
#将xenial修改为了jammy,jammy的版本还不成熟,又改回了xenial
apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt update

$COLOR_START"安装kubelet kubeadm kubectl"$COLOR_END
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
kubeadm version

$COLOR_START"开启路由功能"$COLOR_END
sysctl -w net.ipv4.ip_forward=1

$COLOR_START"加入K8S主节点"$COLOR_END
#在piM1部署完毕后,会给出token的值,下面的这一大串,改成你自己的token就OK了
  kubeadm join 192.168.3.113:6443 --token 3sg1n6.fmfhugf6vvkmlamm \\
        --discovery-token-ca-cert-hash sha256:6fc40306eec524a911a38983228bd2ec6e969a590da1a99827153279aaff7cf3 \\
        --control-plane --certificate-key a9f3c1bb90e3cddd5c27d6669b76d8f6d06130851cd0430453187aeecb2aaa67

$COLOR_START"修改K8S配置"$COLOR_END
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

reboot

 6. 在所有的node节点上部署K8S,我选择的是piW1,piW2,piW3。脚本如下:

#切换root用户,在每一个节点安装之前,手动切换为su用户
#sudo su - 

#首先设置echo输出的各种颜色和格式
COLOR_START='echo -e \\033[35;49m'
COLOR_END='\\033[0m'

$COLOR_START"更新软件源,全部切换为阿里云"$COLOR_END
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse 
EOF

$COLOR_START"检查更新及安装更新"$COLOR_END
apt update
apt upgrade -y

$COLOR_START"安装语言包"$COLOR_END
apt-get install language-pack-en
apt-get install language-pack-zh-hans

$COLOR_START"设置HOST的模板文件"$COLOR_END
cat >> /etc/cloud/templates/hosts.debian.tmpl <<EOF
192.168.3.101 piM1
192.168.3.102 piM2
192.168.3.103 piM3
192.168.3.111 piW1
192.168.3.112 piW2
192.168.3.113 piW3
EOF

$COLOR_START"关闭SWAP"$COLOR_END
swapoff -a
sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab

$COLOR_START"添加加载的内核模块"$COLOR_END
tee /etc/modules-load.d/containerd.conf<<EOF
overlay
br_netfilter
EOF

$COLOR_START"加载内核模块"$COLOR_END
modprobe overlay
modprobe br_netfilter

$COLOR_START"设置并应用内核参数"$COLOR_END
tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

$COLOR_START"curl gnupg2 software-properties-common apt-transport-https ca-certificates"$COLOR_END
apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

$COLOR_START"安装GPG证书"$COLOR_END
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |  apt-key add -

$COLOR_START"写入软件源信息并更新"$COLOR_END
add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update

$COLOR_START"安装containerd"$COLOR_END
apt install -y containerd.io

$COLOR_START"生成containetd的配置文件"$COLOR_END
#结果数据全部丢弃(重定向到空文件),2>&1代表错误信息输出到标准输出上
containerd config default | tee /etc/containerd/config.toml >/dev/null 2>&1

$COLOR_START"修改cgroup Driver为systemd"$COLOR_END
sed -i 's/SystemdCgroup \\= false/SystemdCgroup \\= true/g' /etc/containerd/config.toml

$COLOR_START"将镜像源设置为阿里云 google_containers 镜像源"$COLOR_END
sed -i 's/k8s.gcr.io/registry.aliyuncs.com\\/google_containers/g' /etc/containerd/config.toml

$COLOR_START"containerd重启及服务永久启动"$COLOR_END
systemctl restart containerd
systemctl enable containerd

$COLOR_START"添加apt-key"$COLOR_END
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

$COLOR_START"添加Kubernetes的apt源为阿里云的源并更新"$COLOR_END
#将xenial修改为了jammy,jammy的版本还不成熟,又改回了xenial
apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt update

$COLOR_START"安装kubelet kubeadm kubectl"$COLOR_END
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
kubeadm version

$COLOR_START"开启路由功能"$COLOR_END
sysctl -w net.ipv4.ip_forward=1

$COLOR_START"加入K8S节点"$COLOR_END
#替换成自己主控节点的token就可以了
kubeadm join 192.168.3.113:6443 --token 3sg1n6.fmfhugf6vvkmlamm \\
        --discovery-token-ca-cert-hash sha256:6fc40306eec524a911a38983228bd2ec6e969a590da1a99827153279aaff7cf3

reboot

7. 部署集群CNI

现在执行命令kubectl get node -A显示节点状态为NotReady,因为网络还没准备好。

在主控节点上部署CNI网络插件

#安装calico网络插件
kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"

8. 验证部署结果

从零到壹搭建一个商城架构--k8s集群安装(代码片段)

如果想了解其他内容,请点击这里查看目录1、kubeadmkubeadm是官方推出的一个用于快速部署kubernetes集群的工具这个工具能通过两条指令完成一个kubernetes集群的部署:#创建一个Mster节点kubeadminit#将一个Node节点加入到当前集群中kubead... 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

...用性能测试一、K8s高可用集群架构原理Kubernetes的存储层使用的是Etcd。Etcd是CoreOS开源的一个高可用强一致性的分布 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

...用性能测试一、K8s高可用集群架构原理Kubernetes的存储层使用的是Etcd。Etcd是CoreOS开源的一个高可用强一致性的分布式存储服务&#x 查看详情

[k8s]elk架构设计-k8s集群里搭建

...于集群管理,没有数据,没有HTTPAPIClient节点-用于客户端使用,无数据,使用HTTPAPIData节点-旨在存储和索引数据,没有HTTPAPI分为管理区存储区读写区定制镜像-es0.我把镜像推到了dockerhub:lanny/quay.io_pires_docker-elasticse 查看详情

树莓派3b+_32位linux系统arm架构安装jdk

...夹的权限 然后配上环境变量,就可以啦,最好重启下树莓派,重启之后java-version javac   结 查看详情

树莓派安装node.js

...rm架构,node.js上并没有提供arm架构的二进制包下载。试过使用apt包管理安装和直接node.js源代码编译安装(编译了四五个小时。。。),都没有成功,报非法指令错误,预计还是编译的处理器架构错误导致的。只是,google上有些... 查看详情

使用kind搭建本地k8s集群(代码片段)

介绍Kind是KubernetesInDocker的缩写,是使用Docker容器部署Kubernetes的工具。也是官方推荐的搭建本地集群的工具。安装Kind$curl-Lo./kindhttps://github.com/kubernetes-sigs/kind/releases/download/v0.5.1/kind-$(uname)-amd64$chmod+x./kind$sudomv./kind/usr/bin/安... 查看详情

ubuntu18.04使用qemu搭建arm64架构虚拟机(方法一)(代码片段)

...f1a;VMware中安装的Ubuntu18.04虚拟机1.安装qemu-system-aarch64直接使用apt命令安装sudoaptinstall-yqemu-system-arm会默认安装到/usr/bin/目录下我安装的qemu版本是2.112.下载UEFI固件BIOS运行在16位模式,寻址空间小,运行慢等,所以现在X86... 查看详情

kubernetes概述和kubeadm方式集群搭建(代码片段)

...程序K8S是谷歌在2014年用go语言开发的容器化集群管理系统使用K8S进行容器化应用部署使用K8S有利于应用扩展K8S目标实施让部署容器化应用简洁和高效k8s的功能1.弹性伸缩2.自动装箱,自动修复3.服务发现4.滚动更新5.版本回退6.... 查看详情

部署k8s集群+ceph存储出现依赖性缺失的故障案例(最小化系统arm架构)(代码片段)

...最小化安装的系统(以redhat系为例)报障案例1故障:k8s集群拉起来了,ceph也起来了,但是在安装docker镜像仓库的时候,发现仓库一直处于pending的状态,重启也无法解决问题。```html/xml排障过程:首先是通过Kubectldescribepod-nnamespac... 查看详情

linux企业运维——k8s高可用集群架构搭建详解(代码片段)

...用性能测试一、K8s高可用集群架构原理Kubernetes的存储层使用的是Etcd。Etcd是CoreOS开源的一个高可用强一致性的分布式存储服务,Kubernetes使用Etcd作为数据存储后端,把需要记录的pod、rc、service等资源信息存储在Etcd中。Kuber... 查看详情

用树莓派3b+做一个智能音箱(代码片段)

项目地址目录1.安装Docker安装Docker的官方文档 DockerEngine在x86_64(或amd64)armhf、和arm64架构上受支持  查看详情

手把手从零开始搭建k8s集群超详细教程(代码片段)

...服务器4.docker容器化环境安装5.kubeadm、kubectl、kubelet安装2.使用kubeadm引导集群1.下载k8s所需的镜像2.添加k8s中主节点的域 查看详情

手把手从零开始搭建k8s集群超详细教程(代码片段)

...服务器4.docker容器化环境安装5.kubeadm、kubectl、kubelet安装2.使用kubeadm引导集群1.下载k8s所需的镜像2.添加k8s中主节点的域 查看详情

kubernetes系列03—kubeadm安装部署k8s集群

...p;1.2K8S搭建安装示意图 1.3安装kubernetes方法1.3.1方法1:使用kubeadm安装kubernetes(本文演示的就是此方法) 优点:你只要安装kubeadm即可;kubeadm会帮你自动部署安装K8S集群;如:初始化K8S集群、配置各个插件的证书认证、部... 查看详情

云原生kubernetes部署k8s集群架构(admin部署)(代码片段)

...流的方式有kubeadm、minikube、二进制包minikube:一个用于快速搭建单节点kubenetes的工具kubeadm:一个用于快速搭建kubenetes集群的工具二进制包:从官网下载每个组件的二进制包,一次去安装,此方式对于理解kubernetes组件更有... 查看详情

rust交叉编译树莓派程序(代码片段)

rust交叉编译树莓派程序使用rust写树莓派程序时,如果直接在树莓派上进行编译,速度非常慢,如果是zero那更加是慢到受不了。因此最好是能通过开发机编译完后,直接放到树莓派上运行。由于开发机上的cpu架构、操作系统和目... 查看详情

使用二进制方式搭建k8s集群(亲测有效)

安装要求在开始之前,部署Kubernetes集群机器需要满足以下几个条件:一台或多台机器,操作系统CentOS7.x-86_64(个人选择CentOS7.2)硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以访问外网... 查看详情