GKE配置Network Policy后元数据服务器被阻断问题求助
GKE Network Policy导致元数据服务器访问失败的解决办法
你的Network Policy配置阻止了Pod访问GKE的元数据服务器(169.254.169.254),因此出现了url.Error Get "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes报错。
问题原因
GKE Pod需要通过元数据服务器获取服务账号令牌、实例配置等关键信息,访问地址是http://169.254.169.254,默认使用80端口。当前配置中,第二个egress规则仅指定了允许访问该IP段,但未明确允许80端口的TCP流量——而Network Policy默认会拒绝所有未显式允许的出口流量,导致Pod无法发起元数据服务器请求。
修正后的配置
需要在针对169.254.169.254的egress规则中添加80端口的TCP允许规则:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: {{ template "name" . }} spec: podSelector: matchLabels: app: {{ template "name" . }} policyTypes: - Egress egress: # 保留原有允许的端口流量 - ports: - port: 53 protocol: UDP - port: 53 protocol: TCP - port: 443 protocol: TCP - port: 3307 protocol: TCP - port: 3306 protocol: TCP # 新增元数据服务器的端口允许规则 - to: - ipBlock: cidr: 169.254.169.254/32 ports: - port: 80 protocol: TCP
补充说明
也可以把元数据服务器的端口规则合并到第一个egress块中,但分开配置更便于维护。核心是必须显式允许Pod访问169.254.169.254的80端口TCP流量,否则元数据服务请求会被Network Policy拦截。
内容的提问来源于stack exchange,提问作者Tim Schwalbe
相关产品推荐
相关产品推荐

