6
这个楼主还没有留下简介。
当前还没有回复,欢迎成为第一个参与讨论的人。
前几篇用 CLI 和 ZAC 创建了网络、Echo 服务和客户端身份。这篇再走一步:给一台 Linux 主机安装 OpenZiti Tunneler,让普通 HTTP 客户端通过一个 Ziti 服务名访问现有应用,不改应用代码。
本文使用上一篇的本地 Quickstart 网络,并假设 Quickstart 的 Edge Router 已启用 tunneler 功能。客户端 Tunneler 与 Quickstart 运行在同一台 Ubuntu 主机上。Linux Tunneler 会配置主机的 DNS 和路由,因此本机用户和进程都能使用获准的服务;建议在实验用主机上操作。官方 Linux Tunneler 文档对此有说明。
在 Ubuntu 终端中创建一个测试网页:
bashmkdir -p "$HOME/ziti-web-demo"
printf 'Hello from an existing HTTP service\n' > "$HOME/ziti-web-demo/index.html"
cd "$HOME/ziti-web-demo"
启动 Python 自带的 HTTP 服务:
bashpython3 -m http.server 8000 --bind 127.0.0.1
保持这个终端运行。服务现在监听在 127.0.0.1:8000。
在 Ubuntu 主机上下载并检查官方安装脚本,再运行它:
bashcurl -sSLf https://get.openziti.io/tun/scripts/install-ubuntu.bash \ -o install-ubuntu.bash less install-ubuntu.bash bash install-ubuntu.bash
启动 Tunneler 服务:
bashsudo systemctl enable --now ziti-edge-tunnel.service
sudo systemctl status ziti-edge-tunnel.service
安装包会将 Tunneler 配置为 systemd 服务,并为它设置所需权限。官方 Debian/Ubuntu 安装指南提供了安装和注册身份的说明。
本教程按带 systemd 和系统 DNS 集成的 Ubuntu 主机编写。不同 WSL2 环境的 systemd 或 DNS 配置可能不同;如果服务启动或解析 Ziti 域名失败,建议先在标准 Ubuntu 主机或虚拟机上完成练习。
在 Quickstart 的管理终端中恢复环境并登录:
bashsource "$HOME/.ziti/quickstart/$(hostname -s)/$(hostname -s).env"
zitiLogin
ZITI="${ZITI_BIN_DIR-}/ziti"
创建一个专供这台主机 Tunneler 使用的身份:
bash"$ZITI" edge create identity local-web-client \
-a 'local-web-client' \
-o local-web-client.jwt
把生成的 local-web-client.jwt 文件放到运行 Tunneler 的 Ubuntu 主机上,然后注册身份:
bashsudo ziti-edge-tunnel add \
--jwt "$(< ./local-web-client.jwt)" \
--identity local-web-client
这个身份与前几篇创建的 SDK 客户端身份分开使用。JWT 是一次性注册令牌,不要公开分享。
查看 Edge Router 名称:
bash"$ZITI" edge list edge-routers
再查看身份列表:
bash"$ZITI" edge list identities
记下与本地 Edge Router 对应的身份名称。以下示例用 ROUTER_NAME 表示 Edge Router 名称,用 HOST_ID 表示它关联的身份名称。请替换成列表里的实际值:
bashROUTER_NAME="替换为本地EdgeRouter名称"
HOST_ID="替换为Router关联的Identity名称"
Quickstart 的 Edge Router 如果启用了 tunneler,可以承担服务端的流量转发。官方的创建第一个服务教程也说明了如何查找与 Router 关联的身份。
创建 intercept.v1 配置。它告诉客户端 Tunneler:访问 hello.ziti:80 时,应通过 OpenZiti 访问对应服务。
bash"$ZITI" edge create config local-web-intercept intercept.v1 \
'{"protocols":["tcp"],"addresses":["hello.ziti"],"portRanges":[{"low":80,"high":80}]}'
创建 host.v1 配置。它告诉服务端:将流量转发到本机的 127.0.0.1:8000。
bash"$ZITI" edge create config local-web-host host.v1 \
'{"protocol":"tcp","address":"127.0.0.1","port":8000}'
创建 Service,并关联这两个配置:
bash"$ZITI" edge create service local-web \
--configs local-web-intercept,local-web-host
intercept.v1 描述客户端要拦截的目标地址和端口;host.v1 描述服务端实际连接的地址和端口。官方配置类型文档介绍了这两类配置。
允许客户端身份通过 Dial 策略访问 local-web:
bash"$ZITI" edge create service-policy local-web-dial Dial \
--service-roles '@local-web' \
--identity-roles '@local-web-client'
允许 Router 关联的身份通过 Bind 策略提供服务:
bash"$ZITI" edge create service-policy local-web-bind Bind \
--service-roles '@local-web' \
--identity-roles "@$HOST_ID"
分别允许客户端和 Router 关联身份使用本地 Edge Router:
bash"$ZITI" edge create edge-router-policy local-web-client-router \
--edge-router-roles "@$ROUTER_NAME" \
--identity-roles '@local-web-client'
"$ZITI" edge create edge-router-policy local-web-host-router \
--edge-router-roles "@$ROUTER_NAME" \
--identity-roles "@$HOST_ID"
最后,允许 local-web 服务使用这台 Edge Router:
bash"$ZITI" edge create service-edge-router-policy local-web-router \
--edge-router-roles "@$ROUTER_NAME" \
--service-roles '@local-web'
先检查授权是否齐全:
bash"$ZITI" edge policy-advisor identities -q local-web-client local-web
然后在运行 Tunneler 的 Ubuntu 主机上访问服务:
bashcurl http://hello.ziti
如果返回:
textHello from an existing HTTP service
说明普通 HTTP 请求已经通过 Tunneler 和 OpenZiti 网络抵达本地服务。
这次用 intercept.v1 定义客户端接管的地址,用 host.v1 指定实际服务位置,再通过 Dial、Bind 和 Router 策略控制访问。HTTP 服务本身仍监听在本机端口上;客户端使用 hello.ziti 这个服务名访问它。
更多操作可参考官方 Linux Tunneler 指南和创建第一个服务教程。