)
Uncloud CLI 实战使用uc dns show查询集群保留域名uncld.dev【免费下载链接】uncloudA lightweight tool for deploying and managing containerised applications across a network of Docker hosts. Bridging the gap between Docker and Kubernetes ✨项目地址: https://gitcode.com/GitHub_Trending/unc/unclouduc dns show是 Uncloud CLI 中用于查询当前集群保留域名的命令。Uncloud 允许每个集群在 Uncloud DNS 服务中保留一个唯一的xxxxxx.uncld.dev域名保留后Caddy 反向代理服务的部署会自动更新该域名的 DNS 记录把流量路由到集群内运行的服务。读完本文你将掌握uc dns show的完整用法、全部参数含义、底层执行链路以及它和uc dns reserve、uc dns release、Caddy 部署之间的配合方式。命令概览DNS 子命令家族中的查询者uc dns show属于uc dns命令组。根据 website/docs/9-cli-reference/uc_dns.md 和 cmd/uc/dns/root.go 的定义该命令组共包含三个子命令子命令功能对应实现uc dns reserve在 Uncloud DNS 中为集群保留域名cmd/uc/dns/reserve.gouc dns release释放已保留的集群域名cmd/uc/dns/release.gouc dns show打印集群域名cmd/uc/dns/show.go三者构成完整的生命周期reserve保留域名 →show随时查询当前域名 →release释放域名。其中show是纯查询操作不会修改任何集群状态适合在脚本或运维巡检中获取集群的公开域名。命令语法与参数uc dns show的语法非常简单无需任何位置参数uc dns show [flags]专属 Options-h, --help help for show-h, --help用于查看该命令的帮助信息不触发任何集群连接。Options inherited from parent commandsuc dns show继承自父命令的全局连接参数这些参数在uc dns reserve、uc dns release上同样适用--connect string Connect to a remote cluster machine without using the Uncloud configuration file. [$UNCLOUD_CONNECT] Format: [ssh://]userhost[:port], sshgo://userhost[:port], tcp://host:port, or unix:///path/to/uncloud.sock -c, --context string Name of the cluster context to use (default is the current context). [$UNCLOUD_CONTEXT] --uncloud-config string Path to the Uncloud configuration file. [$UNCLOUD_CONFIG] (default ~/.config/uncloud/config.yaml)各参数说明如下--connect string绕过 Uncloud 配置文件直接指定要连接远程集群机器的地址。支持四种格式[ssh://]userhost[:port]默认的 SSH 连接方式ssh://前缀可省略sshgo://userhost[:port]使用纯 Go 实现的 SSH 客户端连接tcp://host:port直连已暴露的 gRPC 端口unix:///path/to/uncloud.sock通过本地 Unix Socket 连接。该参数也可通过环境变量UNCLOUD_CONNECT设置。此选项底层对应 internal/cli/connect.go 中基于--connect与上下文的连接解析逻辑。-c, --context string指定要使用的集群上下文名称默认使用当前上下文。可用环境变量UNCLOUD_CONTEXT覆盖。上下文管理见 internal/cli/config/context.go常用操作是uc ctx use name切换当前上下文。--uncloud-config stringUncloud 配置文件路径默认~/.config/uncloud/config.yaml。可用环境变量UNCLOUD_CONFIG覆盖。配置文件的完整结构可参考 website/docs/7-cli-config-reference.md。执行流程与源码级调用链uc dns show的实际逻辑位于 cmd/uc/dns/show.go其调用链清晰而精简建立集群连接uncli.ConnectCluster(ctx)通过当前上下文或--connect指定的地址连接集群。调用 gRPC 查询clusterClient.GetDomain(ctx)向集群发起GetDomainRPC 请求。错误映射如果返回api.ErrNotFound对应 gRPCcodes.NotFound命令输出no domain reserved并返回错误否则返回原始错误。输出结果成功时通过fmt.Println(domain)将域名打印到标准输出仅输出域名本身便于脚本直接捕获。其中clusterClient.GetDomain的客户端实现在 pkg/client/dns.go它调用集群的GetDomainRPC并把 gRPC 的NotFound状态码转换为领域层错误api.ErrNotFound。该接口声明位于 pkg/api/client.go 的DNSClient接口中。服务端实现域名的持久化存储服务端处理逻辑在 internal/machine/cluster/dns.goGetDomain第 66-77 行首先通过checkReady()校验集群状态然后从集群的分布式存储中读取已保留的域名并返回。域名信息以 JSON 形式存储在键uncloud_dns常量 第 17 行下结构体uncloudDNSDomain第 19-25 行包含三个字段EndpointUncloud DNS 服务 API 端点、Name保留的域名、Token用于后续更新 DNS 记录的令牌。如果存储中不存在该键返回store.ErrKeyNotFound服务端返回codes.NotFound第 79-88 行对应客户端收到no domain reserved的提示。从源码结构可以推断show读取的是集群本地存储中的域名信息它只反映该集群是否保留过域名并不直接访问 Uncloud DNS 服务本身真正的域名保留动作发生在reserve时且保留结果含令牌被持久化在集群中。与域名生命周期其他环节的配合要理解uc dns show的输出含义需要了解域名的完整生命周期1. 保留域名uc dns reserveuc dns reserve通过--endpoint指定 Uncloud DNS 服务地址默认https://dns.uncloud.run/v1常量定义在 cmd/uc/dns/reserve.go。服务端ReserveDomaininternal/machine/cluster/dns.go会调用 DNS 服务换取name与token并存入集群存储若已保留过则返回codes.AlreadyExistsCLI 端提示domain already reserved。保留成功后如果集群已部署 Caddy 反向代理服务reserve还会自动调用caddy.UpdateDomainRecords更新集群域名的 DNS 记录使流量可以经xxxxxx.uncld.dev路由到集群中的服务如果 Caddy 尚未部署则提示先运行uc caddy deploy见 cmd/uc/dns/reserve.go。2. 查询域名uc dns show在保留之后任何时刻运行uc dns show即可打印当前集群的域名$ uc dns show a1b2c3.uncld.dev输出仅包含域名本身无额外日志方便在 Shell 脚本中直接捕获例如DOMAIN$(uc dns show) echo Cluster domain: $DOMAIN如果集群尚未保留域名命令会报错no domain reserved退出码非零——这也是一种可靠的状态探测方式。3. DNS 记录自动更新机制域名之所以能在保留后自动指向集群中的服务关键在于CreateIngressRecordspkg/client/dns.go的实现它检查运行 Caddy 服务的每台机器向各机器的公网 IP 发送 HTTP 请求验证路径caddyconfig.VerifyPath只有响应体与机器 ID 一致的机器才会被纳入 DNS 记录随后为这些机器创建通配符记录——IPv4 地址生成*的A记录IPv6 地址生成*的AAAA记录第 122-140 行从而让*.xxxxxx.uncld.dev都能解析到集群的入口机器。该验证逻辑verifyCaddyReachable还带有指数退避重试与 3 秒超时限制第 148-214 行避免因网络抖动导致误判。常见问题与排查思路no domain reserved集群尚未执行uc dns reserve。先运行uc dns reserve保留域名再执行uc dns show。连接失败connect to cluster: ...检查当前上下文是否正确uc ctx ls、uc ctx use name或使用--connect直接指定集群机器地址。域名已保留但无法访问域名解析依赖已部署的 Caddy 服务。参考uc dns reserve的提示执行uc caddy deploy部署反向代理入口机器的公网 IP 应能从公网访问NAT 或防火墙后的机器不会计入 DNS 记录见CreateIngressRecords的探测逻辑。domain already reserved该集群已保留过域名无需重复保留直接uc dns show查询即可。如需更换域名可先uc dns release释放。相关资源父命令参考uc dns保留域名uc dns reserve释放域名uc dns release命令行总入口uc集群上下文与连接配置7-cli-config-reference相关源码命令实现 cmd/uc/dns/show.go、服务端存储 internal/machine/cluster/dns.go、DNS 客户端与记录更新 pkg/client/dns.go、RPC 接口定义 api/pb/cluster.proto【免费下载链接】uncloudA lightweight tool for deploying and managing containerised applications across a network of Docker hosts. Bridging the gap between Docker and Kubernetes ✨项目地址: https://gitcode.com/GitHub_Trending/unc/uncloud创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考