当前位置: 首页 > 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 负载均衡器之间的关系。如果读者在配置过程中遇到任何问题,欢迎在评论区留言,我会尽力为他解答。

http://www.lryc.cn/news/539713.html

相关文章:

  • Golang教程
  • AI 百炼成神:线性回归,预测房价
  • 企业软件合规性管理:构建高效、安全的软件资产生态
  • 每日一题——编辑距离
  • TensorFlow项目GPU运行 安装步骤
  • c++进阶———继承
  • FreeSwitch的mod_translate模块详细,附带场景案例及代码示例
  • 前端504错误分析
  • 在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证
  • 基于python实现机器学习的心脏病预测系统
  • 使用 NVM 随意切换 Node.js 版本
  • 【Prometheus】prometheus结合pushgateway实现脚本运行状态监控
  • SpringBoot 项目配置动态数据源
  • CSS基本选择器
  • idea-代码补全快捷键
  • 基于SpringBoot+vue粮油商城小程序系统
  • 挪车小程序挪车二维码php+uniapp
  • 企业内部知识库:安全协作打造企业智慧运营基石
  • 网络安全推荐的视频教程 网络安全系列
  • 麒麟管家全新升级,运维问题“一键修复”
  • MVCC(多版本并发控制)机制讲解
  • React 与 Vue 对比指南 - 上
  • 开源协议深度解析:理解MIT、GPL、Apache等常见许可证
  • 通用评估系统(五)- 前端部分总体说明
  • STM32GPIO
  • MyBatis拦截器终极指南:从原理到企业级实战
  • SpringBoot启动失败之application.yml缩进没写好
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter17-事件
  • 鸿蒙开发:V2版本装饰器之@Monitor装饰器
  • 51单片机-外部中断