首页
/ ArgoCD Helm 部署中 AWS ALB 健康检查失败的解决方案

ArgoCD Helm 部署中 AWS ALB 健康检查失败的解决方案

2025-07-06 02:46:55作者:牧宁李

背景介绍

在使用 ArgoCD Helm 图表部署到 AWS EKS 集群时,许多开发者希望通过 AWS Application Load Balancer (ALB) 来暴露 ArgoCD 的用户界面。然而,在实际部署过程中,经常会遇到目标组健康检查失败的问题,导致 ALB 无法正确路由流量到 ArgoCD 服务。

问题现象

在标准配置下,当开发者启用 ArgoCD 的 Ingress 功能并配置 AWS ALB 作为入口控制器时,ALB 的目标组会显示健康检查失败的状态。这通常表现为目标组中所有后端实例都被标记为"unhealthy",导致无法通过 ALB 访问 ArgoCD 的 Web 界面。

根本原因分析

经过深入分析,这个问题主要源于以下几个配置方面的因素:

  1. 协议不匹配:原始配置中后端协议(backend-protocol)设置为 HTTP,而健康检查协议(healthcheck-protocol)设置为 HTTPS,这种不一致会导致健康检查失败。

  2. 安全设置冲突:当 server.insecure 设置为 true 时,ArgoCD 服务器会以 HTTP 模式运行,但如果同时要求 ALB 使用 HTTPS 进行健康检查,就会产生矛盾。

  3. GRPC 后端协议版本:ArgoCD 使用 GRPC 协议进行部分通信,这需要特殊的后端协议版本配置。

解决方案

要解决这个问题,需要进行以下配置调整:

  1. 统一协议配置:将后端协议和健康检查协议都设置为 HTTPS,确保一致性。

  2. 禁用不安全模式:将 server.insecure 参数设置为 false,强制 ArgoCD 以 HTTPS 模式运行。

  3. 明确指定 GRPC 协议版本:在服务注解中明确指定后端协议版本为 GRPC。

以下是完整的推荐配置示例:

configs:
  params:
    server.insecure: false  # 禁用不安全模式

global:
  domain: argo.yourdomain.com  # 替换为您的实际域名

server:
  ingress:
    enabled: true
    controller: aws
    ingressClassName: alb
    annotations:
      alb.ingress.kubernetes.io/load-balancer-name: 'your-alb-name'
      alb.ingress.kubernetes.io/scheme: internal  # 或 internet-facing 根据需求
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/subnets: subnet-xxxxxx,subnet-xxxxxx
      alb.ingress.kubernetes.io/backend-protocol: HTTPS  # 统一使用HTTPS
      alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS  # 统一健康检查协议
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80},{"HTTPS":443}]'
      alb.ingress.kubernetes.io/ssl-redirect: '443'
    aws:
      serviceType: ClusterIP
      backendProtocolVersion: GRPC  # 明确指定GRPC协议版本

配置说明

  1. server.insecure: false
    这个设置强制 ArgoCD 服务器使用 HTTPS,与 ALB 的 HTTPS 健康检查要求保持一致。

  2. backend-protocol 和 healthcheck-protocol
    都设置为 HTTPS 确保协议一致性,避免因协议不匹配导致的健康检查失败。

  3. backendProtocolVersion: GRPC
    ArgoCD 使用 GRPC 进行部分通信,这个设置确保 ALB 能正确处理 GRPC 流量。

  4. target-type: ip
    这个设置使 ALB 直接使用 Pod IP 作为目标,而不是通过 NodePort,通常能提供更好的性能和更简单的网络配置。

验证配置

应用上述配置后,您应该能够在 AWS 控制台中看到:

  1. ALB 目标组状态变为"healthy"
  2. 可以通过指定的域名访问 ArgoCD Web 界面
  3. 所有流量都会被正确地从 HTTP 重定向到 HTTPS

总结

通过统一协议配置、禁用不安全模式并明确指定 GRPC 协议版本,可以有效解决 ArgoCD 在 AWS EKS 上使用 ALB Ingress 时的健康检查问题。这个解决方案不仅解决了当前的健康检查失败问题,还提供了更安全的 HTTPS 端到端加密通信,是生产环境部署 ArgoCD 的推荐配置方式。

登录后查看全文
热门项目推荐

项目优选

收起
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
340
1.2 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
190
267
kernelkernel
deepin linux kernel
C
22
6
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
901
537
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
141
188
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
62
59
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
376
387
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.1 K
0
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
87
4