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

Azure容器应用网关(K8S Gateway API)独立TLS终止资源的Helm部署咨询

解决方案

方案1:通配符证书 + 单Gateway统一监听器

这是适配Helm自动化部署的最优方案,核心是用覆盖所有子域名的通配符证书绑定到单个Gateway的HTTPS监听器,每个应用仅通过Helm部署HttpRoute实现路由,无需修改Gateway资源。

操作步骤:

  1. 部署通配符证书Secret:
    在Gateway所在namespace(如system)部署包含通配符证书的Secret,也可结合cert-manager自动签发维护:

    apiVersion: v1
    kind: Secret
    metadata:
      name: wildcard-dev-tls
      namespace: system
    type: kubernetes.io/tls
    data:
      tls.crt: <base64编码的证书内容>
      tls.key: <base64编码的密钥内容>
    
  2. 部署统一Gateway:
    仅部署一个Gateway,配置单个HTTPS监听器绑定通配符证书,允许所有namespace的路由关联:

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      annotations:
        alb.networking.azure.io/alb-name: alb-test-spoke-2
        alb.networking.azure.io/alb-namespace: system
      name: alb-gw-tls
      namespace: system
    spec:
      gatewayClassName: azure-alb-external
      listeners:
      - allowedRoutes:
          namespaces:
            from: All
        hostname: "*.dev"
        name: https-wildcard-listener
        port: 443
        protocol: HTTPS
        tls:
          certificateRefs:
          - kind: Secret
            name: wildcard-dev-tls
          mode: Terminate
    
  3. 应用Helm Chart配置:
    每个应用的Helm Chart只需部署HttpRoute资源,指定自身hostname即可:

    # 应用Helm模板中的HttpRoute
    apiVersion: gateway.networking.k8s.io/v1
    kind: HttpRoute
    metadata:
      name: {{ .Release.Name }}-http-route
      namespace: {{ .Release.Namespace }}
    spec:
      hostnames:
      - "{{ .Values.app.hostname }}" # 例如first-api.dev
      parentRefs:
      - name: alb-gw-tls
        namespace: system
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /
        backendRefs:
        - name: {{ .Release.Name }}-service
          port: {{ .Values.service.port }}
    

    新应用部署时无需修改Gateway,Helm自动完成路由配置,完全满足自动化需求。

方案2:多证书绑定单监听器 + 自动证书注入

若无法使用通配符证书,可利用AGC支持单监听器绑定多证书的特性,结合Helm钩子自动将应用证书添加到Gateway的证书列表。

操作步骤:

  1. 初始Gateway部署:
    部署基础Gateway,HTTPS监听器初始绑定一个默认证书:

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      annotations:
        alb.networking.azure.io/alb-name: alb-test-spoke-2
        alb.networking.azure.io/alb-namespace: system
      name: alb-gw-tls
      namespace: system
    spec:
      gatewayClassName: azure-alb-external
      listeners:
      - allowedRoutes:
          namespaces:
            from: All
        name: https-shared-listener
        port: 443
        protocol: HTTPS
        tls:
          certificateRefs:
          - kind: Secret
            name: default-tls-cert
          mode: Terminate
    
  2. 应用Helm Chart配置:
    每个应用的Helm Chart包含两部分资源:

    • 自身的TLS证书Secret(需部署在Gateway所在namespace)
    • Helm钩子Job,自动将当前应用证书添加到Gateway的证书列表:
      # 应用证书Secret
      apiVersion: v1
      kind: Secret
      metadata:
        name: {{ .Release.Name }}-tls-cert
        namespace: system
      type: kubernetes.io/tls
      data:
        tls.crt: {{ .Values.tls.crt }}
        tls.key: {{ .Values.tls.key }}
      
      # Helm钩子:更新Gateway证书列表
      apiVersion: batch/v1
      kind: Job
      metadata:
        name: {{ .Release.Name }}-update-gateway-cert
        annotations:
          "helm.sh/hook": post-install,post-upgrade
          "helm.sh/hook-delete-policy": hook-succeeded
      spec:
        template:
          spec:
            containers:
            - name: kubectl
              image: bitnami/kubectl:latest
              command:
              - /bin/sh
              - -c
              - |
                # 检查证书是否已存在,避免重复添加
                EXIST=$(kubectl get gateway alb-gw-tls -n system -o jsonpath='{.spec.listeners[0].tls.certificateRefs[*].name}' | grep -w {{ .Release.Name }}-tls-cert)
                if [ -z "$EXIST" ]; then
                  kubectl patch gateway alb-gw-tls -n system --type json -p '[{"op": "add", "path": "/spec/listeners/0/tls/certificateRefs/-", "value": {"kind": "Secret", "name": "{{ .Release.Name }}-tls-cert"}}}'
                fi
            restartPolicy: OnFailure
      
  3. HttpRoute配置:
    与方案1一致,每个应用的HttpRoute指定自身hostname并关联共享Gateway即可。

方案对比

方案优点适用场景
通配符证书方案配置极简,无额外维护成本,完全适配Helm自动化域名统一为同一根域的子域名,可使用通配符证书
多证书自动注入方案支持独立域名证书,无需手动修改Gateway域名无法使用通配符,每个应用需独立证书的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:45:10