You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EKS中Ingress-Nginx控制器为公网NLB绑定安全组失败求助

解决EKS中Ingress-Nginx NLB无法绑定安全组的问题

针对你遇到的NLB未绑定指定安全组的问题,我整理了几个关键排查点和解决方案,已有不少开发者成功实现该功能,核心是要注意几个配置细节:

1. 安全组ID配置错误(最常见原因)

你在注解中写的aws_security_group.public_alb.id是Terraform的变量引用,Kubernetes无法解析这个变量,AWS自然无法找到对应的安全组。必须替换为实际的安全组ID(格式为sg-xxxxxxx)。

如果用Terraform管理,需要通过helm_release资源的values参数注入实际的安全组ID,示例:

resource "helm_release" "ingress_nginx" {
  # ...其他配置
  values = [
    yamlencode({
      controller = {
        service = {
          annotations = {
            "service.beta.kubernetes.io/aws-load-balancer-security-groups" = aws_security_group.public_alb.id
          }
        }
      }
    })
  ]
}

如果直接编写values.yaml,就填硬编码的安全组ID:

service.beta.kubernetes.io/aws-load-balancer-security-groups: sg-0abc123def456ghi

2. 托管节点组IAM角色权限不足

EKS托管节点组的IAM角色需要具备操作NLB和安全组的权限,否则无法完成安全组绑定。需要给节点角色添加以下IAM策略:

{
    "Effect": "Allow",
    "Action": [
        "ec2:DescribeSecurityGroups",
        "ec2:AttachSecurityGroups",
        "ec2:ModifyLoadBalancerAttributes"
    ],
    "Resource": "*"
}

3. 注解版本或NLB类型问题

  • 尝试使用稳定版注解(去掉beta):service.kubernetes.io/aws-load-balancer-security-groups,部分环境下稳定版注解兼容性更好
  • 确认NLB类型为IPv4公网NLB,IPv6 NLB截至2023年8月暂不支持安全组绑定

4. 验证配置和事件

部署后执行以下命令排查:

  • 检查Service注解是否正确应用:
    kubectl get service <你的ingress-nginx-service名称> -o yaml | grep -A 10 annotations
    
  • 查看Service事件,是否有安全组相关报错:
    kubectl describe service <你的ingress-nginx-service名称>
    
    如果事件中出现Failed to update load balancer或Security group not found,说明ID错误或权限不足。

5. 安全组规则补充

绑定成功后,确保安全组配置了正确的入站规则(比如仅允许特定IP访问80/443端口),同时节点安全组需要允许NLB的流量(可以通过添加Amazon EKS Node Group的前缀列表,或者NLB ENI所在的IP段)。

内容的提问来源于stack exchange,提问作者kkarczewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:22:21