You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Kubernetes配置CertBot遇到Ingress路由问题

问题排查与修复方案

1. CertBot容器未启动HTTP服务

你的CertBot Pod当前仅执行sleep 3600维持存活,没有启动任何监听80端口的HTTP服务——这是核心问题之一:即使Ingress把请求路由过来,也没有服务能响应ACME挑战请求。

修复:
修改certbot-deployment.yaml的容器配置,启动一个简单的HTTP服务器(比如Python内置的),同时执行证书申请命令:

containers:
- name: certbot
  image: certbot/certbot
  command: ["/bin/sh", "-c"]
  args:
    - "python3 -m http.server 80 --directory /var/www/certbot & certbot certonly --webroot --webroot-path=/var/www/certbot --email abc@example.com --agree-tos --no-eff-email --force-renewal --staging -d staging.example.com && sleep infinity"
  volumeMounts:
  - name: certbot-webroot
    mountPath: /var/www/certbot
  - name: certbot-storage
    mountPath: /etc/letsencrypt
  ports:
  - containerPort: 80  # 声明容器监听端口,确保Service能正确转发流量

2. Ingress注解不兼容Azure控制器

你使用了nginx.ingress.kubernetes.io/rewrite-target: /注解,但你的Ingress Class是Azure专属的webapprouting.kubernetes.azure.com,该控制器不支持NGINX Ingress的专属注解,多余注解可能干扰路径匹配逻辑。

修复:
直接移除该注解,修改Ingress.yaml的metadata部分:

metadata:
  name: exampleapp
  namespace: default
  # 删除nginx.ingress.kubernetes.io/rewrite-target: /这一行

3. 确认Ingress路径匹配规则

虽然K8s Ingress v1规范要求按最长前缀优先匹配,但可以微调路径配置确保优先级:
将ACME挑战路径的结尾加上斜杠,避免模糊匹配:

paths:
  - path: /.well-known/acme-challenge/
    pathType: Prefix
    backend:
      service:
        name: certbot
        port:
          number: 80
  # 其余路径保持不变

验证操作

  1. 应用修改后的配置:
kubectl apply -f certbot-deployment.yaml
kubectl apply -f certbot-service.yaml
kubectl apply -f Ingress.yaml
  1. 检查CertBot Pod状态:
kubectl get pods -l app=certbot
  1. 测试路由是否生效:
curl http://staging.example.com/.well-known/acme-challenge/test

如果日志显示请求转发到certbot服务,即使返回404也属于正常(挑战文件仅在证书申请时生成)。

内容的提问来源于stack exchange,提问作者Abdul Rauf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:20:56