首页
/ 在Azure AKS中使用Cert-Manager与Let's Encrypt为Istio服务网格配置HTTPS证书

在Azure AKS中使用Cert-Manager与Let's Encrypt为Istio服务网格配置HTTPS证书

2025-06-19 04:10:11作者:贡沫苏Truman

概述

本文将详细介绍如何在Azure Kubernetes Service(AKS)中,为Istio服务网格配置Cert-Manager与Let's Encrypt,实现自动化的HTTPS证书管理。通过这一方案,您可以为服务网格中的入口网关自动获取和更新免费的TLS证书,确保服务通信的安全性。

前置条件

在开始之前,请确保您已完成以下准备工作:

  1. 已在AKS集群上启用Istio服务网格附加组件
  2. 已配置外部入口网关
  3. 已在默认命名空间启用Sidecar注入

实施步骤

1. DNS记录配置

首先需要为入口网关的外部IP地址配置DNS记录:

  1. 获取入口网关的外部IP地址:
kubectl get svc -n aks-istio-ingress
  1. 在您的DNS提供商处为该IP地址创建A记录(例如:test.dev.azureservicemesh.io)

  2. 验证DNS记录是否已生效:

dig +short A test.dev.azureservicemesh.io

2. 部署示例应用

我们将使用Istio的Bookinfo示例应用来演示:

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.21/samples/bookinfo/platform/kube/bookinfo.yaml

验证应用部署状态:

kubectl get pods

确保每个Pod都有2/2容器处于就绪状态。

3. 配置入口网关和虚拟服务

创建Gateway和VirtualService资源,注意将host字段替换为您自己的域名:

kubectl apply -f gateway.yaml
kubectl apply -f virtualservice.yaml

验证HTTP访问:

curl -sS http://test.dev.azureservicemesh.io/productpage | grep -o "<title>.*</title>"

4. 创建共享配置映射

创建ConfigMap以设置ingressService和ingressSelector:

cat configmap.yaml | sed -e "s/<asm-revision>/${revision}/" | kubectl apply -f -

5. 安装Cert-Manager

部署Cert-Manager到集群:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.2/cert-manager.yaml

验证Cert-Manager Pod状态:

kubectl get po -n cert-manager

6. 配置ClusterIssuer和Certificate

  1. 更新ClusterIssuer配置中的邮箱地址:
EMAIL=your-email@example.com
cat cluster-issuer.yaml | sed -e "s/your-email-addr@domain.com/${EMAIL}/" | kubectl apply -f -
  1. 创建Certificate资源:
kubectl apply -f certificate.yaml
  1. 验证证书Secret是否已创建:
kubectl get secret -n aks-istio-ingress

7. 验证HTTPS访问

curl -sS https://test.dev.azureservicemesh.io/productpage | grep -o "<title>.*</title>"

工作原理

这一方案通过以下组件协同工作:

  1. Cert-Manager:作为证书管理控制器,自动处理证书的申请、续订和吊销
  2. Let's Encrypt:提供免费的TLS证书颁发服务
  3. ACME协议:用于自动化证书管理的标准协议
  4. HTTP-01挑战:验证域名所有权的方式

Cert-Manager会创建以下资源来完成证书申请流程:

  1. CertificateRequest
  2. Order
  3. Challenge
  4. 临时Ingress资源用于HTTP-01挑战验证

常见问题排查

如果遇到证书申请失败的情况,可以按照以下步骤排查:

  1. 检查DNS解析
dig +short A test.dev.azureservicemesh.io
  1. 检查Certificate资源状态
kubectl get certificate -n aks-istio-ingress
  1. 检查CertificateRequest
kubectl describe certificaterequest <request-name> -n aks-istio-ingress
  1. 检查Order资源
kubectl describe order <order-name> -n aks-istio-ingress
  1. 检查Challenge资源
kubectl describe challenge <challenge-name> -n aks-istio-ingress
  1. 检查临时Ingress资源
kubectl describe ing -n aks-istio-ingress

最佳实践

  1. 生产环境建议

    • 使用Let's Encrypt的生产环境API端点
    • 配置证书自动续订监控
    • 设置适当的证书续订提前期
  2. 多域名支持

    • 可以在Certificate资源中指定多个DNS名称
    • 支持通配符证书申请
  3. 安全性考虑

    • 限制ACME挑战的访问范围
    • 定期轮换证书私钥
    • 监控证书到期时间

总结

通过本文的指导,您可以在Azure AKS的Istio服务网格环境中,利用Cert-Manager和Let's Encrypt实现自动化的TLS证书管理。这一方案不仅简化了证书管理流程,还提供了企业级的HTTPS安全保障,是构建安全云原生应用的理想选择。

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

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
138
188
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
94
15
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
187
266
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
893
529
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.08 K
0
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
371
387
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
337
1.11 K
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
401
377