Поды в EKS: не могут разрешить DNS (но могут пинговать IP)

У меня есть 2 кластера EKS в 2 разных учетных записях AWS и, я могу предположить, с разными брандмауэрами (к которым у меня нет доступа). С первым (Dev) все в порядке, однако с той же конфигурацией модули кластера UAT изо всех сил пытаются разрешить DNS. Узлы могут разрешиться и вроде бы все в порядке.

1) ping 8.8.8.8 работает

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms

2) Я могу пропинговать IP-адрес Google (и других), но не настоящие DNS-имена.

Наша конфигурация:

  1. настроен с помощью Terraform.
  2. Рабочие узлы и плоскость управления SG такие же, как и у разработчиков. Я считаю, что это нормально.
  3. Добавлены 53 TCP и 53 UDP для входящего + исходящего NACl (просто чтобы убедиться, что 53 действительно открыты ...). Добавлено 53 TCP и 53 UDP исходящих с рабочих узлов.
  4. Мы используем ami-059c6874350e63ca9 с версией 1.14 kubernetes.

Я не уверен, что проблема связана с брандмауэром, ядрами, моей конфигурацией, которую нужно обновить, или "глупой ошибкой". Любая помощь будет оценена по достоинству.


person shrimpy    schedule 09.01.2020    source источник
comment
в вашем случае много переменных, не могли бы вы поделиться своим скриптом terraform? Не забудьте удалить конфиденциальные данные. Также необходимо прочитать yamls из ваших сервисов, если у вас их нет, запустите kubectl get services -o yaml, чтобы экспортировать его и вставить свой вопрос.   -  person Will R.O.F.    schedule 10.01.2020


Ответы (2)


Обратите внимание, что эта проблема может проявляться во многих формах (например, отсутствие разрешения DNS - это лишь один из возможных случаев). Модуль terraform-awk-eks предоставляет ввод терраформирования для создания необходимых правил группы безопасности, которые разрешают эти взаимодействия между рабочими группами / группами узлов: worker_create_cluster_primary_security_group_rules. Дополнительная информация в этом terraform-awk-eks выпуске https://github.com/terraform-aws-modules/terraform-aws-eks/issues/1089

Когда вход включен, terraform создает следующие правила группы безопасности:

  # module.eks.module.eks.aws_security_group_rule.cluster_primary_ingress_workers[0] will be created                                                                                                                                                                                                                           
  + resource "aws_security_group_rule" "cluster_primary_ingress_workers" {                                                                                                                                                                                                                                                     
      + description              = "Allow pods running on workers to send communication to cluster primary security group (e.g. Fargate pods)."                                                                                                                                                                                
      + from_port                = 0                                                                                                                                                                                                                                                                                           
      + id                       = (known after apply)                                                                                                                                                                                                                                                                         
      + protocol                 = "-1"                                                                                                                                                                                                                                                                                        
      + security_group_id        = "sg-03bb33d3318e4aa03"                                                                                                                                                                                                                                                                      
      + self                     = false                                                                                                                                                                                                                                                                                       
      + source_security_group_id = "sg-0fffc4d49a499a1d8"                                                                                                                                                                                                                                                                      
      + to_port                  = 65535                                                                                                                                                                                                                                                                                       
      + type                     = "ingress"                                                                                                                                                                                                                                                                                   
    }                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                               
  # module.eks.module.eks.aws_security_group_rule.workers_ingress_cluster_primary[0] will be created                                                                                                                                                                                                                           
  + resource "aws_security_group_rule" "workers_ingress_cluster_primary" {                                                                                                                                                                                                                                                     
      + description              = "Allow pods running on workers to receive communication from cluster primary security group (e.g. Fargate pods)."                                                                                                                                                                           
      + from_port                = 0                                                                                                                                                                                                                                                                                           
      + id                       = (known after apply)                                                                                                                                                                                                                                                                         
      + protocol                 = "-1"                                                                                                                                                                                                                                                                                        
      + security_group_id        = "sg-0fffc4d49a499a1d8"                                                                                                                                                                                                                                                                      
      + self                     = false
      + source_security_group_id = "sg-03bb33d3318e4aa03"
      + to_port                  = 65535
      + type                     = "ingress"
    }
person fvdnabee    schedule 03.05.2021
comment
Приятно видеть ответ с помощью модуля terraform eks. Интересно, что worker_create_cluster_primary_security_group_rules по умолчанию отключен. И эту, и enable_irsa функции необходимо включить, если вы хотите использовать входной контроллер AWS и подключиться к конечной точке RDS. - person Wilhelm; 27.05.2021

После нескольких дней отладки проблема заключалась в следующем: я разрешил весь трафик между узлами, но all traffic это TCP, а не UDP.

По сути, это была одна строка в AWS: в рабочих узлах SG добавьте правило для входящего трафика от / до рабочих узлов, порт 53, протокол DNS (UDP).

Если вы используете terraform, это должно выглядеть так:

resource "aws_security_group_rule" "eks-node-ingress-cluster-dns" {
  description = "Allow pods DNS"
  from_port                = 53
  protocol                 = 17
  security_group_id        = "${aws_security_group.SG-eks-WorkerNodes.id}"
  source_security_group_id = "${aws_security_group.SG-eks-WorkerNodes.id}"  
  to_port                  = 53
  type                     = "ingress"
}
person shrimpy    schedule 17.01.2020