WSL2 搭建 Rancher 开发环境
@author Fu Kai
@since 20211128
Step Preview
一、 安装 WSL2
二、 安装 Rancher-2.5.x
三、 配置容器镜像源
四、 添加主机静态路由
五、helloworld 案例
Preview
一、安装 WSL2
不多说
service docker start
二、安装 Rancher-2.5.x
安装 docker-compose
这里给出我的 docker-compose
version: "3"
services:
rancher:
hostname: rancher
image: rancher/rancher:v2.5.11
container_name: rancher-2.5.11
privileged: true
environment:
- TZ=Asia/Shanghai
volumes:
- /usr/local/rancher/rancher-data:/var/lib/rancher
ports:
- "8080:80"
- "8443:443"
networks:
caseor_bridge:
ipv4_address: 172.172.172.14
networks:
caseor_bridge:
driver: bridge
ipam:
config:
- subnet: 172.172.0.0/16
- 使用 2.5.11 版本,2.6.x 版本比较新,UI 改动较大,截止 20211101 实测存在一些 bug
- 持久化
/var/lib/rancher
目录到本机/usr/local/rancher/rancher-data
- 端口映射
8080:80
,8443:443
为的是以后保证端口不与rancher/agent
端口冲突 - 自定义网段为
172.172.0.0/16
网段,固定 rancher 的 ip 为172.172.172.14
启动要耗费一些时间,需要耐心
三、配置容器镜像源
Docker 中安装 Rancher 默认使用的 K3s,K3s 是 K8s 的精简版,底层不是用 docker 而是用的 containerd,配置容器镜像源会和 docker 不同。
进入 rancher 容器
docker exec -it rancher-2.5.11 /bin/bash
vi /etc/rancher/k3s/registries.yaml
mirrors:
"docker.io":
endpoint:
- "https://registry.docker-cn.com"
配置自己的阿里云 docker 镜像或者其它国内镜像
exit
退出 rancher 容器
docker restart rancher-2.5.11
重启 rancher 容器
四、添加主机静态路由
默认情况下每次重启 WSL2 系统都会给 WSL2 重新分配 IP 地址,截止 20211128,WSL2 还不能固定 IP
现在有效的做法可以通过建立网络适配器固定 WSL2 的 IP
新建.bat 文件,写入下面两行后以管理员
执行
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.153.129/24 broadcast 192.168.153.255 dev eth0 label eth0:1
netsh interface ip add address "vEthernet (WSL)" 192.168.153.128 255.255.255.0
其中 Ubuntu-20.04 是通过 cmd wsl --list
命令获得(发行版 Unbutu 升级后可能就不是 20.04 了)
主机 cmd 执行ipconfig /all
执行后会在本机虚拟网卡vEthernet (WSL)
中增加一个固定 IP192.168.153.128
WSL2 执行ifconfig
在 WSL2 中新增一块虚拟网卡eth0:1
拥有固定 IP192.168.153.129
上图 IP172.25.32.1
不断变化,目前没办法固定,固定的是自定义的192.168.153.128
主机 →WSL2: ping 192.168.153.129
WSL2→ 主机: ping 192.168.153.128
如上配置好后就可以通过 192.168.153.129 访问 WSL2 容器,如果 WSL2 中启动了一个映射 3306 端口的容器,则通过192.168.153.129:3306
就可以直接访问到
但访问 Rancher 部署的应用就会有问题
五、rancher/hello-world 案例
部署好后helloworld0
生成了随机端口31928
鼠标悬浮在端口号上,发现跳转的 URI 是172.172.172.14:31928
WSL2 中访问容器
使用 Docker 部署的 Rancher 会使用 iptables 直接做端口的映射,即在 run 容器的时候不使用-p 指定端口映射也没关系,iptables 会直接映射这些端口
即,此例中helloworld0
映射31928
端口,我通过172.172.172.14:31928
可以在 WSL2 环境直接访问到这个helloworld0
说明使用 Rancher 部署的helloworld0
没有问题
主机直接访问容器[1]
在 WSL2 中访问没问题了,那主机访问有没有问题呢?
这里会涉及到网络的知识,172.172.172.14
与192.168.153.129
属于 WSL2 的不同网段,访问192.168.153.129
并不能访问到172.172.172.14
,属于跨网段,这时需要添加静态路由表自定义路由
首先
在 WSL2 中执行命令iptables -P FORWARD ACCEPT
(临时,重启后失效) 允许路由转发
(永久暂不知道如何配置)
然后
在主机管理员 cmd 执行sc start RemoteAccess
然后执行route add -P 172.172.0.0 mask 255.255.0.0 192.168.153.129
主机访问172.172.0.0
这个网段的内容,指定下一跳为192.168.153.129
,再到 WSL2 中找到172.172.172.14
ping 172.172.172.14 可以 ping 通
最后从网页访问可以访问到 rancher-helloworld 页面
参考
[1] wsl2 中 docker 内部网络的端口转发. https://www.yht7.com/news/96591