在使用 AWS 负载均衡器控制器创建负载均衡器时如何排查问题?
我无法使用 AWS 负载均衡器控制器创建网络负载均衡器或应用程序负载均衡器。或者,在我创建服务或入口对象之后,未创建负载均衡器。
简短描述
要排查负载均衡器创建问题,请执行以下操作:
- 确保满足所有先决条件。
- 检查入口(应用程序负载均衡器)或服务(网络负载均衡器)对象的注释。
- 查看 AWS 负载均衡器控制器 pod 的日志以了解其他信息。
- 如果集群在 AWS Fargate 上运行,则验证为入口或服务对象所在的命名空间创建 Fargate 配置文件。
- 检查是否存在未解决的依赖关系。
AWS 负载均衡器控制器管理 EKS 集群的弹性负载均衡。控制器提供以下资源:
- 创建 Kubernetes 入口时的应用程序负载均衡器。
- 创建类型为 LoadBalancer 的 Kubernetes 服务时的网络负载均衡器。以前,Kubernetes 网络负载均衡器用于实例目标,AWS 负载均衡器控制器用于 IP 目标。在 AWS 负载均衡器控制器版本 2.3.0 或更高版本中,可以使用任一目标类型创建网络负载均衡器。有关更多信息,请参阅目标类型。
解决方案
确保满足所有先决条件
有关应用程序负载均衡器先决条件的列表,请参阅 Amazon EKS 上的应用程序负载均衡。如需网络负载均衡器先决条件的列表,请参阅 Amazon EKS 上的网络负载均衡。
1. 验证 AWS 负载均衡器控制器已成功预置。最佳实践是使用版本 2.4.4 或更高版本。
2. 检查子网的数量。应用程序负载均衡器需要在不同的可用区内至少有两个子网。网络负载均衡器需要至少一个子网。子网必须至少有八个可用的 IP 地址。有关更多信息,请参阅查看您的 VPC。
3. 在某些情况下,您必须使用以下标签:
- 键:“kubernetes.io/集群/集群名称”
- 值:“共享”或“拥有”
如果您使用的是 Application Load Balancer
在以下情况下,您必须准确标记一个安全组:
- 您正在使用挂载到 Worker 节点的多个安全组。
- 您使用的是 AWS 负载均衡器控制器版本 v2.1.1 或更早版本。
如果您使用的是网络负载均衡器
如果您使用的是 AWS 负载均衡器控制器版本 v2.1.1 或更早版本,则必须标记子网。
有关从 Amazon EC2 控制台添加标签的信息,请参阅使用控制台处理标签。有关使用 AWS 命令行界面(AWS CLI)添加标签的信息,请参阅使用命令行处理标签。
**注意:**如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
- FSP 除非在服务对象或入口对象中将子网 ID 明确指定为注释,否则请确保子网具有以下标签。没有这些标签,子网自动发现无法正常工作。
私有子网标签:
- 键:“kubernetes.io/role/internal-elb”
- 值:“1”
公有子网标签:
- 键:“kubernetes.io/role/elb”
- 值:“1”
检查入口或服务对象的注释
验证服务对象上的注释或入口对象上的注释。配置负载均衡器所需的注释如下:
**注意:**其他注释使用默认值。有关用于应用程序负载平衡的 AWS 负载均衡器控制器支持的所有可用注释列表,请参阅 GitHub 上的入口注释。有关用于网络负载平衡的 AWS 负载均衡器控制器支持的所有可用注释列表,请参阅 GitHub 上的服务注释。
应用程序负载均衡器
- kubernetes.io/ingress.class: alb: IngressClassParams 是特定于 AWS 负载均衡器控制器的自定义资源定义(CRD)。此 CRD 可以与 IngressClass 的参数字段一起使用。可以使用 IngressClassParams 强制执行一组入口的设置。
网络负载均衡器
- **使用 IP 目标:**service.beta.kubernetes.io/aws-load-balancer-type: "external" service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
- **使用实例目标:**service.beta.kubernetes.io/aws-load-balancer-type: "external" service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
运行以下命令之一以查看服务或入口对象。在以下示例中,将 SERVICE-NAME/INGRESS-NAME 和 NAMESPACE 替换为适合您的使用案例的正确值。
kubectl describe service <SERVICE-NAME> -n <NAMESPACE> kubectl describe ingress <INGRESS-NAME> -n <NAMESPACE>
运行以下命令之一以编辑服务或入口对象。在以下示例中,将 SERVICE-NAME/INGRESS-NAME 和 NAMESPACE 替换为适合您的使用案例的正确值。
kubectl edit service <SERVICE-NAME> -n <NAMESPACE> kubectl edit ingress <INGRESS-NAME> -n <NAMESPACE>
查看 AWS 负载均衡器控制器 pod 的日志以了解其他信息
运行以下命令以审核 AWS 负载均衡器控制器日志:
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
如果所有控制器 pod 都没有显示日志,则确保控制器 pod 正在运行:
kubectl get deployment -n kube-system aws-load-balancer-controller
如果集群在 Fargate 上运行,则验证是否为入口或服务对象所在的命名空间创建了 Fargate 配置文件
当目标 pod 在 Fargate 上运行时,IP 目标类型是必填项。运行以下命令以验证已经为入口或服务对象所在的命名空间创建了 Fargate 配置文件。在以下示例中,将 CLUSTER-NAME 替换为集群的名称。
eksctl get fargateprofile --cluster <CLUSTER-NAME> -o yaml
要创建 Fargate 配置文件,请运行以下命令。在以下示例中,将 CLUSTER-NAME、REGION、FARGATE-PROFILE-NAME 和 NAMESPACE 替换为适合您的使用案例的正确值。
eksctl create fargateprofile --cluster <CLUSTER-NAME> --region <REGION> --name <FARGATE-PROFILE-NAME> --namespace <NAMESPACE>
检查是否存在未解决的依赖关系
Amazon EKS 向节点的安全组添加以下规则:
- 客户端流量的传入规则
- 针对您创建的每个网络负载均衡器(用于运行状况检查),VPC 中每个负载均衡器子网的传入规则。
如果 Amazon EKS 尝试创建的规则超过安全组允许的最大规则数的配额,则部署 LoadBalancer 类型的服务可能会失败。
查看文档以确保满足所有依赖关系。对于应用程序负载均衡器,请参阅 Amazon EKS 上的应用程序负载均衡。有关网络负载均衡器,请参阅 Amazon EKS 上的网络负载均衡。例如,如果您使用应用程序负载均衡器,则服务对象必须指定 NodePort 或 LoadBalancer 以使用实例流量模式。

相关内容
- 已提问 3 个月前lg...
- 已提问 4 个月前lg...
- 已提问 4 个月前lg...
- 已提问 5 个月前lg...
- 已提问 3 天前lg...
- AWS 官方已更新 9 个月前
- AWS 官方已更新 4 个月前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 3 个月前