如何访问GCE实例内部DNS名称?域名解析失败如何解决
问题产生原因
- GCE提供的
.c.[项目ID].internal格式的区域级内部DNS,是VPC私有域内的专属解析记录,仅对加入到对应VPC网络、且使用Google默认内部DNS服务的GCE资源(比如同VPC下的计算实例、GKE节点、接入VPC的Cloud Run服务等)生效。 - Cloud Shell是Google提供的临时托管运维环境,本身不属于用户项目下的VPC资源,没有权限访问项目VPC对应的私有DNS解析服务,自然无法解析
.internal后缀的内部域名,直接触发Name or service not known报错。 - 如果同VPC内的实例也出现同类解析错误,一般是两类诱因:一是VPC的DNS解析策略被修改为自定义DNS,没有把内部域名请求转发到Google内部DNS服务器
169.254.169.254;二是访问端和目标实例不在同一个VPC(含共享VPC未做DNS授权的场景)。
正常通过DNS名称访问updateservice实例的方法
根据使用场景选择对应方案即可:
场景1:仅需要同项目内网资源访问该实例(内部DNS原生设计场景)
这是最推荐的使用方式,几乎不需要额外配置:
- 先确认目标实例所在VPC的DNS设置为「Google DNS」,没有强制覆盖实例的默认DNS配置;
- 把访问端的资源(其他计算实例、服务等)部署到和updateservice相同的VPC网络内,直接使用
updateservice.us-central1-a.c.myproject.internal这个域名即可正常解析,解析结果为实例的内网IP,流量走Google内网,不产生公网传输费用。
场景2:需要从Cloud Shell访问该实例
- 临时测试场景:不建议强行使用内部DNS,直接查询实例的公网IP访问即可,注意提前配置VPC防火墙规则放通对应访问端口。
- 如果你一定要在Cloud Shell解析该内部域名,可以手动配置hosts静态映射,执行命令:
注意这个配置仅在当前Cloud Shell会话生命周期内有效,重启Cloud Shell后会丢失;且Cloud Shell默认和VPC内网不连通,配置完解析也需要额外搭建VPN或私网连接才能真正访问到实例内网IP,实用性极低。sudo echo "[updateservice实例的内网IP] updateservice.us-central1-a.c.myproject.internal" >> /etc/hosts
场景3:需要跨VPC/公网通过固定域名访问实例
- 公网访问场景:直接在Cloud DNS创建公网托管区域,给updateservice实例绑定对应公网IP的A记录即可通过公网域名访问。
- 跨VPC私网访问场景:在Cloud DNS创建私有托管区域,把所有需要访问该实例的VPC都加入到私有区域的授权网络列表,手动添加对应实例内网IP的A记录,即可在所有授权网络内解析到该域名。
内容的提问来源于stack exchange,提问作者sonium
相关产品推荐
相关产品推荐

