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

AKS应用路由Ingress:单IP多主机不同TLS配置实现问询

问题

希望用单个Ingress IP承载多个主机,且每个主机使用不同的SSL/TLS配置:

  • 已配置abc.com:使用独立证书,启用TLS客户端认证(TLS-MA)
  • 新增def.com:使用不同证书,不启用TLS-MA(或使用不同CA)

直接在现有Ingress中添加def.com后,它会继承abc.com的TLS-MA设置,且生成Kubernetes伪证书。请问该需求是否可行?如何让Ingress注解仅作用于单个主机,实现多主机不同SSL/TLS配置?

当前Ingress配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # 从Key Vault拉取服务器证书
    kubernetes.azure.com/tls-cert-keyvault-uri: https://myvault.vault.azure.net/certificates/mycert/b36bc0840bc23423432837c450d9
    # 启用客户端证书认证
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    # 该Secret中包含CA和中间证书,必须命名为ca.crt
    nginx.ingress.kubernetes.io/auth-tls-secret: mynamespace/ca-secret
    # 将证书传递给上游服务
    nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
  name: myingress
  namespace: mynamespace
spec:
  ingressClassName: webapprouting.kubernetes.azure.com
  rules:
  - host: abc.com
    http:
      paths:
      - backend:
          service:
            name: abc
            port:
              number: 8080
        path: /
        pathType: Prefix
  - host: def.com
    http:
      paths:
      - backend:
          service:
            name: def
            port:
              number: 80
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - abc.com
    secretName: keyvault-certificate

解决方案

该需求完全可行,核心方案是创建两个独立的Ingress资源,共享同一个Ingress Class以复用公共IP,分别为每个主机配置专属的注解与TLS参数,避免配置互相干扰。

1. 保留abc.com的专属Ingress

将原有Ingress修改为仅包含abc.com的配置,确保其TLS-MA设置仅作用于该主机:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # 从Key Vault拉取abc.com的服务器证书
    kubernetes.azure.com/tls-cert-keyvault-uri: https://myvault.vault.azure.net/certificates/mycert/b36bc0840bc23423432837c450d9
    # 启用客户端证书认证
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    # 该Secret中包含abc.com的CA和中间证书
    nginx.ingress.kubernetes.io/auth-tls-secret: mynamespace/ca-secret
    # 将证书传递给上游服务
    nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
  name: ingress-abc
  namespace: mynamespace
spec:
  ingressClassName: webapprouting.kubernetes.azure.com
  rules:
  - host: abc.com
    http:
      paths:
      - backend:
          service:
            name: abc
            port:
              number: 8080
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - abc.com
    secretName: keyvault-certificate

2. 为def.com创建独立Ingress

新建一个仅包含def.com的Ingress,配置其专属证书且不添加TLS-MA相关注解:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # 从Key Vault拉取def.com的服务器证书(替换为实际URI)
    kubernetes.azure.com/tls-cert-keyvault-uri: https://myvault.vault.azure.net/certificates/defcert/xxxxxxxxx
    # 无需启用客户端认证,默认即为关闭状态,可省略该注解
    # nginx.ingress.kubernetes.io/auth-tls-verify-client: "off"
  name: ingress-def
  namespace: mynamespace
spec:
  ingressClassName: webapprouting.kubernetes.azure.com
  rules:
  - host: def.com
    http:
      paths:
      - backend:
          service:
            name: def
            port:
              number: 80
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - def.com
    secretName: keyvault-certificate-def # 替换为def.com对应的Secret名称

关键注意事项

  • 两个Ingress使用相同的ingressClassName,Azure Web App Routing控制器会自动将它们绑定到同一个公共IP,实现单IP多主机的需求。
  • 每个Ingress的注解与TLS配置仅作用于自身关联的主机,不会产生配置继承问题。
  • 若def.com需要使用不同CA的TLS-MA,只需在其Ingress中添加对应的auth-tls-*注解即可,与abc.com的配置完全隔离。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:25:00