我有2个EKS集群,在2个不同的AWS帐户和,我可能会假设,不同的防火墙(我没有访问)。第一个(Dev)是好的,但是,使用相同的配置,UAT集群pod正在努力解决DNS。节点可以解决,似乎是好的。
1)ping 8.8.8.8 works
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
2)我可以ping谷歌(和其他人)的IP,但不是实际的DNS名称。
我们的配置:
1.安装了Terraform。
1.工作节点和控制平面SG与开发节点相同。我想这些都很好。
1.在入站+出站NACl上添加了53个TCP和53个UDP(只是为了确保53是真正开放的...)。增加了53个TCP和53个UDP从工作节点出站。
1.我们使用ami-059c6874350e63ca9
和1.14 kubernetes版本。
我不确定问题是某个地方的防火墙,coredns,我的配置需要更新还是一个“愚蠢的错误”。如果你能帮忙的话,我将不胜感激。
3条答案
按热度按时间gzszwxb41#
经过几天的调试,以下是问题所在:我允许节点之间的所有流量,但
all traffic
是TCP,而不是UDP。这基本上是AWS中的一行:在工作节点SG中,添加入站规则从/到工作节点端口53协议DNS(UDP)。
如果你使用terraform,它应该看起来像这样:
mefy6pfw2#
请注意,此问题可能以多种形式出现(例如,DNS不解析只是一种可能的情况)。
terraform-awk-eks
模块公开一个terraform输入,以创建允许这些工作组/节点组间通信的必要安全组规则:worker_create_cluster_primary_security_group_rules
.本期terraform-awk-eks
中的更多信息https://github.com/terraform-aws-modules/terraform-aws-eks/issues/1089启用输入后,terraform将创建以下安全组规则:
lndjwyie3#
我在尝试创建一个同时使用AWS托管EC2示例和fargate的集群时遇到了这个问题。在我的案例中,解决方案很简单:
这就是为什么它的工作原理。terraform-aws-eks模块为node和cluster创建了自己的安全组,但默认情况下,在fargate上启动的pod不使用这两个组。相反,fargate pod是通过集群的主要安全组启动的,该安全组由EKS创建。该安全组只允许来自其内部的流量,因此来自terraform创建的群集和节点安全组的流量将被阻止。由于CoreDNS默认运行在ec2示例上,因此此默认配置会阻止fargate pod访问集群的DNS。