当前位置: 首页 > news >正文

Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析

引言

在云原生时代,Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务,简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者,为微服务提供了流量管理、安全性和可观察性等关键能力。

将 Istio Ingress Gateway 部署到 EKS 集群中,可以为集群内的服务提供统一的入口,并实现负载均衡、SSL 终止、路由规则等高级功能。然而,在配置 Istio Ingress Gateway 的负载均衡器时,经常会遇到 EXTERNAL-IP 处于 pending 状态的问题。这里将深入探讨这个问题的原因,并提供详细的解决方案,帮助你更好地理解 EKS、Istio 以及 AWS 负载均衡器之间的关系。
在这里插入图片描述

Istio Ingress Gateway 与负载均衡器

Istio Ingress Gateway 本质上是一个 Envoy 代理,部署为一个 Kubernetes Deployment。它通过 Kubernetes Service 对象暴露出来,以便接收外部流量。当我们将 Service 的类型设置为 LoadBalancer 时,Kubernetes 会尝试在底层基础设施中创建一个负载均衡器,将流量转发到 Istio Ingress Gateway 的 Pod。

在 AWS EKS 环境中,这意味着 Kubernetes 会与 AWS API 交互,尝试为你创建一个 Classic Load Balancer (CLB) 或 Network Load Balancer (NLB)。这个负载均衡器将负责接收来自客户端的流量,并将其转发到 Istio Ingress Gateway 的 Pod。

EXTERNAL-IP Pending 的常见原因

当 Istio Ingress Gateway 的 Service 的 EXTERNAL-IP 处于 pending 状态时,通常意味着 Kubernetes 无法成功创建 AWS 负载均衡器。常见原因包括:

  1. AWS 资源配额限制: 你的 AWS 账户可能在当前区域的负载均衡器数量达到了配额上限。
  2. 子网配置问题: EKS 集群的 worker 节点所在的子网配置不正确,导致无法创建负载均衡器。
  3. IAM 权限不足: EKS 集群的 worker 节点所使用的 IAM 角色缺少创建负载均衡器所需的权限。
  4. Service Annotation 错误: Istio Ingress Gateway 的 Service 定义中可能存在错误的 Annotation。

子网配置:关键所在

在这些原因中,子网配置问题是最常见也是最容易被忽视的。EKS 需要通过特定的 Kubernetes 标签来识别哪些子网可以用于创建负载均衡器。

公有子网与私有子网

  • 公有子网: 如果你希望负载均衡器可以从公网访问,那么 worker 节点必须位于公有子网中,并且这些子网的路由表需要配置指向 Internet Gateway (IGW) 的路由。
  • 私有子网: 如果你希望负载均衡器只能在 VPC 内部访问,那么 worker 节点可以位于私有子网中。但是,为了让 Kubernetes 能够与 AWS API 通信以创建负载均衡器,私有子网需要配置 NAT Gateway 或 NAT 实例。

子网标签:Kubernetes 与 AWS 的桥梁

EKS 使用以下 Kubernetes 标签来识别子网:

  • 公有子网:
    kubernetes.io/role/elb: 1
    
  • 私有子网:
    kubernetes.io/role/internal-elb: 1
    
  • 共享子网(公有和私有子网都有):
    kubernetes.io/cluster/<cluster-name>: shared
    
    <cluster-name> 替换为你的 EKS 集群名称。

kubernetes.io/role/elbkubernetes.io/role/internal-elb

  • kubernetes.io/role/elb=1:表示该子网可以用于创建面向公网的负载均衡器 (External Load Balancer)。
  • kubernetes.io/role/internal-elb=1:表示该子网可以用于创建仅在 VPC 内部访问的负载均衡器 (Internal Load Balancer)。

kubernetes.io/cluster/<cluster-name>=shared

这个标签表示该子网是你的 EKS 集群的一部分,并且可以被 Kubernetes 使用。无论是公有子网还是私有子网,都需要添加这个标签。

案例分析:解决 EXTERNAL-IP Pending 问题

在这里插入图片描述

如图,我们遇到了一个典型的 EXTERNAL-IP Pending 问题。错误信息如下:

FailedBuildModel due to unable to resolve at least one subnet (0 match VPC and tags: [kubernetes.io/role/internal-elb])

这个错误表明 Kubernetes 在尝试创建内部负载均衡器时,找不到任何具有 kubernetes.io/role/internal-elb=1 标签的子网。

解决方案:

  1. 确定你的 EKS 集群使用的私有子网的 ID。
  2. 为这些子网添加以下标签:
    • kubernetes.io/role/internal-elb: 1
    • kubernetes.io/cluster/<cluster-name>: shared

通过为子网添加正确的标签,Kubernetes 就能够找到合适的子网来创建内部负载均衡器,从而解决 EXTERNAL-IP Pending 的问题。

总结

在 EKS 中配置 Istio Ingress Gateway 的负载均衡器时,子网配置是至关重要的一步。理解公有子网、私有子网以及 Kubernetes 子网标签的含义和作用,可以帮助我们避免常见的 EXTERNAL-IP Pending 问题。

希望本文能够帮助大家更好地理解 EKS、Istio 以及 AWS 负载均衡器之间的关系。如果读者在配置过程中遇到任何问题,欢迎在评论区留言,我会尽力为他解答。

相关文章:

  • android 10.0 framework下service下引用 opt目录下相关类编译不过的功能实现
  • 智慧园区安全调度的重要性
  • dMRI中,扩散加权梯度方向为bvec,梯度权重为b的dMRI信号和不加劝的信号s0之间的关系
  • 用Java 队列实现文件传输
  • ok113i平台——usb触摸屏驱动开发
  • javaEE-14.spring MVC练习
  • mysql权限管理
  • 深度学习之神经网络模型CBOW预测自然语言及模型的保存
  • JDK 8+新特性(Stream API、Optional、模块化等)
  • 9.PG数据库层权限管理(pg系列课程)第2遍
  • MATLAB中ifft函数用法
  • MySQL的常见优化策略
  • RT-Thread+STM32L475VET6——ADC采集电压
  • 创建三个节点
  • 通过EDI对接Vitamin Discount Center:高效供应链协作的核心策略
  • 网页制作03-html,css,javascript初认识のhtml的图像设置
  • 【组件安装FAQ】Rocky 8.10 Manager 24.03.3升级到24.10.02
  • Python基于Flask的豆瓣Top250电影数据可视化分析与评分预测系统(附源码,技术说明)
  • 项目管理工具Jira在营销工作管理中的应用与实践
  • 高速PCB设计
  • 俄媒:俄乌代表团抵达谈判会场
  • 大陆非遗项目打铁花、英歌舞将在台演出
  • 侵害孩子者,必严惩不贷!3名性侵害未成年人罪犯今日执行死刑
  • 坚持吃素,是不是就不会得高血脂了?
  • 美国调整对华加征关税
  • “大鼻子情圣”德帕迪约因性侵被判缓刑,还有新的官司等着他