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 负载均衡器。常见原因包括:
- AWS 资源配额限制: 你的 AWS 账户可能在当前区域的负载均衡器数量达到了配额上限。
- 子网配置问题: EKS 集群的 worker 节点所在的子网配置不正确,导致无法创建负载均衡器。
- IAM 权限不足: EKS 集群的 worker 节点所使用的 IAM 角色缺少创建负载均衡器所需的权限。
- 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/elb
与 kubernetes.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
标签的子网。
解决方案:
- 确定你的 EKS 集群使用的私有子网的 ID。
- 为这些子网添加以下标签:
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 负载均衡器之间的关系。如果读者在配置过程中遇到任何问题,欢迎在评论区留言,我会尽力为他解答。
相关文章:

Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析
引言 在云原生时代,Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务,简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者,为微服务提供了流量管理…...
Golang教程
1. go 环境与命令 1.1 go 环境搭建 SDK 安装 Go 官网:golang.orgGo 中文社区:https://studygolang.com/dlGo API文档:https/golang.org 或 https://studygolang.com/pkgdoc 目录 api :api 存放bin:go命令src&#…...
AI 百炼成神:线性回归,预测房价
我们开始第一个项目——线性回归:预测房价。这是一个经典的机器学习入门项目,可以帮助你理解如何使用线性回归模型来预测连续的数值。 第一个项目:线性回归预测房价 项目目标 学习线性回归的基本概念。使用历史房价数据建立一个预测模型。理解如何评估模型的性能。项目步骤…...

企业软件合规性管理:构建高效、安全的软件资产生态
引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…...

每日一题——编辑距离
编辑距离 参考资料题目描述示例 解题思路动态规划(DP)方法 代码实现复杂度分析示例详解示例1:"nowcoder" → "new"示例2:"intention" → "execution" 总结与心得 参考资料 建议先参考下…...
TensorFlow项目GPU运行 安装步骤
以下是在 Linux 系统 下搭建完整 GPU 加速环境的详细流程(适配 CUDA 11.2 和 Python 3.9): 1. 前置检查 1.1 验证 NVIDIA 驱动 # 检查驱动版本(需 ≥ 450.80.02) nvidia-smi 输出示例: CUDA Version: 11.2…...

c++进阶———继承
1.引言 在一些大的项目中,我们可能要重复定义一些类,但是很麻烦,应该怎么办呢?举个简单的例子,我要做一个全校师生统计表,统计学号,教师编号,姓名,年龄,电话…...
FreeSwitch的mod_translate模块详细,附带场景案例及代码示例
mod_translate 模块详细介绍 mod_translate 是 FreeSWITCH 中的一个拨号计划应用程序模块,用于对电话号码或字符串进行格式转换和翻译。它可以根据预定义的规则对输入的内容进行匹配和转换,常用于号码格式化、路由选择、号码屏蔽等场景。 主要功能 号码…...
前端504错误分析
前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案: 1. 确认错误来源 504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端 → 代理服务器 → 后端服务,问题通常出在代理与后端之间。…...

在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证
文章目录 一、引言二、什么是 JSON Web 令牌?三、什么是 JSON Web 令牌结构?四、设置 JWT 令牌身份验证4.1 创建新的 .NET 8 Web API 项目4.2 安装所需的 NuGet 软件包4.3 创建 JWT 配置模型4.4 将 JWT 配置添加到您的 appsettings.json 中4.5 为 Config…...
基于python实现机器学习的心脏病预测系统
以下是一个基于 Python 实现的简单心脏病预测系统代码示例,我们将使用 Scikit - learn 库中的机器学习算法(这里以逻辑回归为例),并使用公开的心脏病数据集。 步骤: 数据加载与预处理:加载心脏病数据集&a…...
使用 NVM 随意切换 Node.js 版本
安装nvm https://github.com/coreybutler/nvm-windows/releases nvm安装详细教程(卸载旧的nodejs,安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客 验证 NVM 是否安装成功-查看版本 nvm --version安装指定版本的 Node.js nvm i…...

【Prometheus】prometheus结合pushgateway实现脚本运行状态监控
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
SpringBoot 项目配置动态数据源
目录 一、前言二、操作1、引入依赖2、配置默认数据库 13、定义数据源实体和 Repository4、定义动态数据源5、配置数据源6、定义切换数据源注解7、定义切面类8、使用注解切换数据源 一、前言 通过切面注解方式根据不同业务动态切换数据库 二、操作 1、引入依赖 <dependen…...

CSS基本选择器
1. 通配选择器 作用:可以选中所有的 HTML 元素。 语法: * { 属性名: 属性值; } 举例: <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" …...

idea-代码补全快捷键
文章目录 前言idea-代码补全快捷键1. 基本补全2. 类型匹配补全3. 后缀补全4. 代码补全 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差,…...

基于SpringBoot+vue粮油商城小程序系统
粮油商城小程序为用户提供方便快捷的在线购物体验,包括大米、面粉、食用油、调味品等各种粮油产品的选购,用户可以浏览商品详情、对比价格、下单支付等操作。同时,商城还提供优惠活动、积分兑换等福利,让用户享受到更多实惠和便利…...

挪车小程序挪车二维码php+uniapp
一款基于FastAdminThinkPHP开发的匿名通知车主挪车微信小程序,采用匿名通话的方式,用户只能在有效期内拨打车主电话,过期失效,从而保护车主和用户隐私。提供微信小程序端和服务端源码,支持私有化部署。 更新日志 V1.0…...

企业内部知识库:安全协作打造企业智慧运营基石
内容概要 作为企业智慧运营的核心载体,企业内部知识库通过结构化的信息聚合与动态化的知识流动,为组织提供了从数据沉淀到价值转化的系统性框架。其底层架构以权限管理为核心,依托数据加密技术构建多层级访问控制机制,确保敏感信…...

网络安全推荐的视频教程 网络安全系列
第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 1.2.3 网络安全的种类P5 (1…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...