3
这个楼主还没有留下简介。
当前还没有回复,欢迎成为第一个参与讨论的人。
第 17 篇使用 Docker Compose 部署了 OpenZiti。本篇继续使用其中的示例应用 web-test-blue,将它配置成一个 OpenZiti 服务,再从 Docker 宿主机通过 blue-web.ziti 访问。
本文适用于上篇下载的完整 Compose 示例。其中,web-test-blue 和 ziti-private-blue 位于同一个 Docker 网络;后者启用了 tunneler 功能,可以承载 Web 服务。官方 Compose Quickstart介绍了这个示例网络。
textUbuntu 宿主机上的客户端 Tunneler → OpenZiti 网络 → ziti-private-blue → web-test-blue:8000
在第 17 篇的 Compose 目录中执行:
bashcd ~/openziti-docker-lab
docker compose ps
确认 ziti-private-blue 和 web-test-blue 正在运行,再从 Router 容器检查后端:
bashdocker compose exec ziti-private-blue \
curl -fsS http://web-test-blue:8000
如果返回包含 Hello World 的页面,说明 Router 容器可以直接访问 Web 容器。这一步检查的是 Docker 网络连通性;接下来还要创建 Ziti 服务并验证端到端访问。
进入 Controller 容器:
bashdocker compose exec ziti-controller bash
在容器内登录:
bashzitiLogin
创建客户端身份,将一次性令牌保存到容器的临时目录:
bashziti edge create identity docker-web-client \ -o /tmp/docker-web-client.jwt
创建客户端拦截配置。客户端访问 blue-web.ziti:80 时,Tunneler 会拦截连接:
bashziti edge create config blue-web-intercept intercept.v1 \
'{"protocols":["tcp"],"addresses":["blue-web.ziti"],"portRanges":[{"low":80,"high":80}]}'
创建服务端配置,指向 Docker 网络中的应用:
bashziti edge create config blue-web-host host.v1 \
'{"protocol":"tcp","address":"web-test-blue","port":8000}'
将两个配置关联到服务:
bashziti edge create service blue-web \ --configs blue-web-intercept,blue-web-host
这里的两个端口用途不同:客户端访问 80,Router 转发到 Web 容器的 8000。这是官方 创建第一个服务示例所使用的配置方式。
仍在 Controller 容器中,允许客户端身份 Dial 服务:
bashziti edge create service-policy blue-web-dial Dial \
--identity-roles '@docker-web-client' \
--service-roles '@blue-web'
允许 ziti-private-blue 承载服务:
bashziti edge create service-policy blue-web-bind Bind \
--identity-roles '@ziti-private-blue' \
--service-roles '@blue-web'
查看策略关系:
bashziti edge policy-advisor services blue-web docker-web-client -q ziti edge policy-advisor services blue-web ziti-private-blue -q
客户端应有 Dial 权限,ziti-private-blue 应有 Bind 权限,且双方各自与服务有共同的在线 Router。如果没有共同 Router,检查第 17 篇初始化容器创建的 Edge Router Policy 和 Service Edge Router Policy。策略概览说明了这些关系。
输入 exit 返回 Docker 宿主机。
将令牌从 Controller 容器复制到宿主机:
bashdocker compose cp \
ziti-controller:/tmp/docker-web-client.jwt \
./docker-web-client.jwt
chmod 600 docker-web-client.jwt
本文以Docker 宿主机本身作为客户端。先确认宿主机已按第 16 篇或 Linux Tunneler 安装指南安装并启动 ziti-edge-tunnel,然后注册身份:
bashsudo ziti-edge-tunnel add \
--jwt "$(< ./docker-web-client.jwt)" \
--identity docker-web-client
注册成功后,可删除传输用的 JWT 副本。注册后的身份凭据需要保留在客户端并妥善保护。
第 17 篇将 Compose 端口绑定到了 127.0.0.1,因此本示例的客户端应运行在 Docker 宿主机上。宿主机还需要能解析 ziti-edge-controller 和 ziti-edge-router,可沿用第 17 篇的 /etc/hosts 配置。
在 Docker 宿主机执行:
bashcurl --noproxy '*' --connect-timeout 10 http://blue-web.ziti/
如果返回 Hello World 页面,说明请求已经经过客户端 Tunneler、OpenZiti 网络和 ziti-private-blue,到达 Web 容器。
如果解析失败,先检查客户端 Tunneler 状态和日志;如果域名可以解析但连接失败,再检查 Bind 授权、Router 在线状态以及 web-test-blue:8000 是否可达。
官方 Compose 示例默认把 web-test-blue 的 8000 端口映射到宿主机的 80;如果按第 17 篇调整过,也可能是 8080。这条映射允许宿主机直接访问演示应用。
如果希望实验时通过 Ziti 入口访问,可以编辑 compose.yaml,删除 web-test-blue 服务下的 ports 整段,然后重建该容器:
bashdocker compose up -d --no-deps web-test-blue docker compose ps web-test-blue
确认输出中不再有宿主机到 8000 的端口映射,然后再次测试:
bashcurl --noproxy '*' http://blue-web.ziti/
移除宿主机端口映射后,同一 Docker 网络中的其他容器仍可能直接访问 web-test-blue:8000;还需要结合 Docker 网络和宿主机权限管理访问范围。