请启用 Javascript 以查看内容

如何解决 Amazon EKS 中 Fargate 无法访问公网的问题

 ·  ☕ 3 分钟  ·  ✍ CNSRE · 👀... 阅读

作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/240909092827/
相关话题:https://www.cnsre.cn/tags/eks/


如何解决 Amazon EKS 中 Fargate 无法访问公网的问题

背景介绍

在使用 EKS + Fargate 创建服务的测试过程中,遇到了 Fargate 中的 Pod 无法访问公网的问题。该案例中,Fargate 和 EC2 实例使用了相同的子网配置,然而 Fargate Pod 无法访问公网,而 EC2 Pod 可以正常访问。本文将深入分析该问题的原因,并提供相应的解决方案。

案例描述

我们在 AWS 环境中配置了一个 EKS 集群,其中既包含 EC2 节点的 Pod,也包含 Fargate 节点的 Pod。EC2 节点的 Pod 可以正常访问公网,但 Fargate 节点的 Pod 却出现了无法解析域名、访问超时的情况。

关键问题

在我们尝试使用 Fargate Pod 访问公网时,使用 kubectl exec 进入 Fargate Pod 后,尝试执行 apt-get update 以更新系统包,但出现了如下错误:

1
0% [Connecting to archive.ubuntu.com] [Connecting to security.ubuntu.com] ^C

这表明 Fargate Pod 无法访问外部网络,而 EC2 节点的 Pod 则可以正常执行命令、连接公网。


分析与调查

经过 AWS 技术支持的深入分析,问题的根源在于 安全组配置。Fargate 使用的 Pod 默认通过 CoreDNS 解析域名,当我们使用 dig 命令解析域名时,返回了超时错误。这说明 Fargate Pod 的 DNS 请求未能正确处理。

在检查我们的 EC2 节点时,发现该节点的安全组仅放行了来自 Fargate 的 TCP 请求。然而,DNS 请求通常使用 UDP 协议,因此在 Fargate Pod 尝试进行 DNS 解析时,由于安全组未放行 UDP 流量,导致了超时。


解决方案

为了解决这一问题,AWS 技术支持建议修改 EC2 节点的安全组配置。通过放行来自 集群安全组 的所有流量,包括 TCP 和 UDP 请求,确保 Fargate Pod 能够正常进行 DNS 解析和公网访问。

步骤如下:

  1. 登录 AWS 控制台,进入 EC2 管理页面。
  2. 选择对应的 EC2 实例,并查看其附加的安全组。
  3. 修改安全组规则,确保放行来自 Fargate 的所有流量,特别是 UDP 53 端口,用于 DNS 请求。
  4. 保存更改后,重新测试 Fargate Pod 的公网访问能力。

结果验证

在修改安全组后,我们的 Fargate Pod 可以正常访问公网,使用 apt-get update 命令成功连接到外部源。这说明问题已彻底解决。

Fargate Pod 成功连接公网输出

1
2
3
4
5
root@awslinux-fargate-pod:/# apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease
Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Fetched 114 kB in 1s (150 kB/s)
Reading package lists... Done

通过这些配置修改,Fargate Pod 的网络访问问题得到了彻底解决,我们的生产环境也恢复了正常运行。


常见问题与预防

为什么 Fargate 和 EC2 的网络行为不同?

Fargate 和 EC2 节点虽然可以共享同一个子网,但它们在网络层面的实现存在差异。Fargate 使用 AWS 提供的托管网络,因此其默认行为与 EC2 节点有所不同。在配置安全组时,特别需要注意两者的网络规则是否兼容。

如何避免类似问题?

为了避免类似的网络问题,建议在配置 EKS 集群时,仔细检查所有节点(包括 Fargate 和 EC2)的 安全组配置网络规则。确保放行集群内部所需的所有流量,尤其是 UDP 53 端口,以支持 DNS 请求的正常运行。


结论

通过本文,我们深入探讨了 Amazon EKS 环境中 Fargate Pod 无法访问公网的问题及其解决方案。这一问题主要是由于 安全组未放行 UDP 流量 导致的,通过适当的安全组配置调整,问题得以顺利解决。如果您在使用 AWS EKS 时遇到类似的网络问题,建议从安全组配置入手,确保所有必要的流量得到了正确放行。


作者:SRE运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/240909092827/
相关话题:https://www.cnsre.cn/tags/eks/


您的鼓励是我最大的动力
alipay QR Code
wechat QR Code

Avatar
作者
CNSRE
一位只会重启的运维






目录