负载均衡器的 AWS EKS 服务 EXTERNAL-IP 处于待处理状态

Posted

技术标签:

【中文标题】负载均衡器的 AWS EKS 服务 EXTERNAL-IP 处于待处理状态【英文标题】:AWS EKS service EXTERNAL-IP of load balancer is Pending 【发布时间】:2021-12-31 09:09:16 【问题描述】:

我正在为我的应用程序开发一个临时集群,它需要大约 12 个负载均衡器来定义我的服务。 12 个看起来都差不多:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-app-api
  name: my-app-api
  namespace: default
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: <some aws cert name>
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
spec:
  externalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 5001
    - name: https
      port: 443
      protocol: TCP
      targetPort: 5001
  selector:
    app: my-app-api
  sessionAffinity: None
  type: LoadBalancer

之后,我继续使用相同的设置创建生产集群。在我创建并部署 k8s 清单后:部署、服务,我无法使用 kubectl describe service 命令获取 LoadBalancer Ingress。我注意到以下图片:

NAME          TYPE           CLUSTER-IP  EXTERNAL-IP                         PORT(S)                      AGE
<some-name>   LoadBalancer   <some_ip>   ****.us-west-1.elb.amazonaws.com    80:30339/TCP,443:32754/TCP   1m
<some-name>   LoadBalancer   <some_ip>   ****.us-west-1.elb.amazonaws.com    80:31538/TCP,443:32061/TCP   1m
<some-name>   LoadBalancer   <some_ip>   ****.us-west-1.elb.amazonaws.com    80:30976/TCP,443:31323/TCP   1m
<some-name>   LoadBalancer   <some_ip>   ****.us-west-1.elb.amazonaws.com    80:30288/TCP,443:32073/TCP   1m
<some-name>   LoadBalancer   <some_ip>   ****.us-west-1.elb.amazonaws.com    80:32270/TCP,443:31159/TCP   1m
<some-name>   LoadBalancer   <some_ip>   ****.us-west-1.elb.amazonaws.com    80:31966/TCP,443:30944/TCP   1m
kubernetes    ClusterIP      <some_ip>   <none>                              443/TCP                      1m
<some-name>   LoadBalancer   <some_ip>   PENDING                             80:31901/TCP,443:30444/TCP   1m
<some-name>   LoadBalancer   <some_ip>   PENDING                             80:31510/TCP,443:30393/TCP   1m
<some-name>   LoadBalancer   <some_ip>   PENDING                             80:32613/TCP,443:32616/TCP   1m
<some-name>   LoadBalancer   <some_ip>   PENDING                             80:32069/TCP,443:30320/TCP   1m
<some-name>   LoadBalancer   <some_ip>   PENDING                             80:31667/TCP,443:32194/TCP   1m
<some-name>   LoadBalancer   <some_ip>   PENDING                             80:31943/TCP,443:32081/TCP   1m

【问题讨论】:

【参考方案1】:

在对上述行为的原因进行排查后,我对 LoadBalancers(LB) 得出以下结论:

    service.beta.kubernetes.io/aws-load-balancer-ssl-cert直接依赖AWS负载均衡,如果在创建LB的地域没有签名证书,LB不会加入k8s集群。 我的问题是因为 k8s 集群无法为新创建的服务自动配置 AWS LB,因为 AWS 账户中单个区域的 默认 LB 限制20

我向 AWS 请求增加配额 LB 限制,但由于需要更多时间,我将生产集群移至不同的 AWS 区域。 之后,LBs 按预期创建,我可以得到我的入口。

【讨论】:

以上是关于负载均衡器的 AWS EKS 服务 EXTERNAL-IP 处于待处理状态的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡器的 AWS EKS 服务 EXTERNAL-IP 处于待处理状态

Kubernetes AWS EKS 负载均衡器未配置

带有 ALB 入口控制器的 Terraform AWS Kubernetes EKS 资源不会创建负载均衡器

AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务

AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务

Terraform AWS EKS ALB Kubernetes Ingress 不会创建侦听器或目标组