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

如何在Kubernetes中自动化AWS ACM证书创建与ALB Ingress集成

解决方案

方案1:Cert-Manager + AWS ACM 自动化证书管理(推荐)

这套方案能完全在Kubernetes集群内完成ACM证书的申请、自动续约,同步到K8s Secret,完美适配ALB Ingress场景。

实施步骤

  1. 安装Cert-Manager
    部署Cert-Manager到集群:

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

    验证部署状态:

    kubectl get pods -n cert-manager
    
  2. 配置IAM权限(IRSA方式)
    给Cert-Manager的ServiceAccount授予ACM证书管理和Route53 DNS验证的权限:

    • 创建IAM Policy,包含以下权限:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "acm:RequestCertificate",
              "acm:DescribeCertificate",
              "acm:UpdateCertificateOptions",
              "acm:ListTagsForCertificate",
              "acm:AddTagsToCertificate"
            ],
            "Resource": "*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "route53:GetChange",
              "route53:ChangeResourceRecordSets"
            ],
            "Resource": "*"
          },
          {
            "Effect": "Allow",
            "Action": "route53:ListHostedZonesByName",
            "Resource": "*"
          }
        ]
      }
      
    • 绑定该Policy到Cert-Manager的ServiceAccount(必须通过IRSA,确保集群已开启OIDC身份提供商)。
  3. 创建ClusterIssuer
    创建对接AWS ACM的ClusterIssuer,指定目标AWS区域:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: acm-cluster-issuer
    spec:
      aws:
        region: us-east-1 # 替换为你的AWS区域
        # 使用IRSA时无需配置密钥,会自动使用ServiceAccount关联的IAM角色
    
  4. 创建Certificate资源
    在业务命名空间下创建Certificate资源,自动触发ACM证书申请并同步到K8s Secret:

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: game-2048-tls
      namespace: game-2048
    spec:
      secretName: game-2048-tls # 与Ingress配置中的secretName一致
      issuerRef:
        name: acm-cluster-issuer
        kind: ClusterIssuer
      dnsNames:
      - snpv.cclab.cloud-castles.com
      usages:
      - server auth
      - client auth
    
  5. 保留现有Ingress配置
    你当前的Ingress配置无需修改,Cert-Manager会自动创建指定的Secret,ALB Controller会自动关联该Secret对应的ACM证书到负载均衡器。

方案2:直接引用ACM证书ARN

如果不想引入Cert-Manager,可直接在Ingress注解中指定已创建的ACM证书ARN,跳过K8s Secret环节。但证书的创建和续约需要额外工具(如Terraform、自定义Operator)自动化。

配置示例

修改Ingress的metadata注解,添加证书ARN:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: game-2048
  name: ingress-2048
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
    alb.ingress.kubernetes.io/group.name: "application-shared-lb"
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:123456789012:certificate/xxxx-xxxx-xxxx-xxxx # 替换为你的证书ARN
spec:
  ingressClassName: alb
  rules:
    - host: snpv.cclab.cloud-castles.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: service-2048
              port:
                number: 80

注意:此方案需移除原Ingress中的spec.tls配置块,因为直接使用ACM托管的证书。

重要注意事项

  • 目标域名snpv.cclab.cloud-castles.com需托管在AWS Route53,或支持DNS01验证(Cert-Manager可自动完成Route53的验证记录配置)。
  • ALB与ACM证书必须处于同一AWS区域。
  • 优先使用IRSA方式配置权限,避免在集群内存储AWS访问密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:47:03