You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCE上MicroK8s Pod无法解析metadata.google.internal如何解决

问题根因

Google Cloud的元数据服务域名metadata.google.internal固定对应链路本地地址169.254.169.254,MicroK8s集群默认的CoreDNS服务没有配置该域名的解析规则,会将解析请求直接转发到公共DNS,公共DNS无法解析该内网专用域名,因此出现解析失败报错。

解决方案

方案1:修改CoreDNS配置(全集群永久生效)

该方案适合集群内多个Pod都需要访问GCP元数据服务的场景,配置一次全集群生效:

  1. 执行命令编辑CoreDNS配置项:
    microk8s kubectl edit configmap coredns -n kube-system
  2. 在Corefile配置段的.:53块中新增hosts配置,静态绑定域名与IP:
.:53 {
    errors
    health
    ready
    # 新增以下hosts配置段
    hosts {
        169.254.169.254 metadata.google.internal
        fallthrough
    }
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
       ttl 30
    }
    prometheus :9153
    forward . /etc/resolv.conf {
       max_concurrent 1000
    }
    cache 30
    loop
    reload
    loadbalance
}
  1. 保存配置后重启CoreDNS服务使配置生效:
    microk8s kubectl rollout restart deployment coredns -n kube-system

方案2:配置Pod HostAlias(单Pod生效)

该方案无需修改集群全局配置,仅针对需要访问元数据服务的单个Pod配置:
在Pod的YAML定义的spec段中新增hostAliases配置即可:

apiVersion: v1
kind: Pod
metadata:
  name: your-pod-name
spec:
  # 新增以下配置
  hostAliases:
  - ip: "169.254.169.254"
    hostnames:
    - "metadata.google.internal"
  # 剩余Pod配置保持不变
  containers:
  - name: your-container-name
    image: your-image
验证与注意事项
  • 配置完成后进入Pod执行nslookup metadata.google.internal,如果返回169.254.169.254则说明解析配置生效。
  • 宿主机测试时返回403是因为请求未携带Metadata-Flavor: Google请求头,Google Cloud SDK调用时会自动添加该头,不会影响正常使用。

内容的提问来源于stack exchange,提问作者Amit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:09:03