GKE环境下适配CloudSQL Proxy的NetworkPolicy出口规则配置问题
问题根因
- 同一Pod内多个容器通过127.0.0.1(loopback网卡)的通信完全不受Kubernetes NetworkPolicy管控,你最初配置的127.0.0.1/32放行规则本身没有实际作用。
- 你配置了明确的Egress规则后,NetworkPolicy会默认拒绝所有未明确放行的出口流量:你的配置仅放行了到127.0.0.1的3307端口流量,但CloudSQL Proxy容器本身需要主动访问外部服务,这部分流量被拦截,所以出现了Google API访问超时的报错。
需要放行的出口流量
你需要额外放行三类出口流量:
- DNS解析流量:CloudSQL Proxy需要解析域名,需要放通到集群DNS服务的53端口(UDP+TCP)流量
- Google API访问流量:CloudSQL Proxy需要调用Google Cloud API拉取CloudSQL实例元数据,需要放通到Google API地址段的443端口TCP流量
- CloudSQL实例私有IP访问流量:CloudSQL Proxy需要和目标CloudSQL实例建立私有连接,需要放通到CloudSQL实例私有IP的3307端口TCP流量
正确配置示例
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: labels: env: develop projectid: my-project name: my-networkpolicy namespace: <你的业务命名空间> spec: # 仅匹配你的业务Pod,替换为你实际的Pod标签 podSelector: matchLabels: app: my-business-app policyTypes: - Egress egress: # 1. 放行DNS解析流量 - ports: - port: 53 protocol: UDP - port: 53 protocol: TCP to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system podSelector: matchLabels: k8s-app: kube-dns # 2. 放行Google API访问流量,使用Private Google Access的固定私网地址段 - ports: - port: 443 protocol: TCP to: - ipBlock: cidr: 199.36.153.8/30 # 3. 放行到CloudSQL实例私有IP的访问,替换为你实际的CloudSQL实例私有IP/段 - ports: - port: 3307 protocol: TCP to: - ipBlock: cidr: <你的CloudSQL实例私有IP>/32
如果安全要求较低,也可以直接放行所有到VPC私有地址段的流量,无需单独指定CloudSQL实例IP。
内容的提问来源于stack exchange,提问作者Ryo
相关产品推荐
相关产品推荐

