Kubernetes中kubernetes.io/ingress.class与ingressClassName区别咨询
Kubernetes Ingress中
kubernetes.io/ingress.class与ingressClassName的区别 核心差异:新旧标准的迭代
kubernetes.io/ingress.class是旧版注解式标识:Kubernetes 1.18之前,Ingress没有原生字段指定控制器,只能通过这个注解给Ingress打“标签”,让对应控制器识别并处理。比如你配置的alb,就是告诉AWS ALB Ingress Controller“这个Ingress归我处理”。ingressClassName是新版标准字段:从Kubernetes 1.18开始,Ingress API引入了这个原生字段,用来替代旧注解,是官方推荐的规范方式。它直接关联集群中定义的IngressClass资源,控制器通过监听这个字段来认领Ingress。
具体使用细节
关于kubernetes.io/ingress.class
- 属于注解层级的配置,本质是给Ingress添加标识,没有强绑定的资源关联。
- 对于AWS ALB Ingress Controller,早期版本仅支持通过该注解匹配,你需要保证注解值和控制器启动参数
--ingress-class的取值一致(默认就是alb)。
关于ingressClassName
- 是Ingress资源的原生字段,符合Kubernetes API规范,有明确的资源关联逻辑。
- 它的取值必须对应集群中已存在的
IngressClass资源的metadata.name。比如集群里有一个名为alb的IngressClass,这里填alb就能让AWS ALB控制器处理该Ingress。 - 优先级说明:如果同时配置了注解和字段,新版本控制器会优先识别
ingressClassName字段,旧注解会被忽略。
针对AWS ALB场景的实践建议
如果你的集群Kubernetes版本在1.18及以上,建议优先使用ingressClassName字段,操作步骤如下:
- 确认集群中存在对应
IngressClass资源(AWS ALB Controller通常会自动创建,也可手动定义):apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.aws/alb - 调整Ingress配置,设置
ingressClassName为alb,可移除旧注解(保留也不影响,控制器会优先用字段):ingress: enabled: true annotations: # 可选:移除旧注解,或保留不生效 # kubernetes.io/ingress.class: alb ... ... ingressClassName: "alb"
内容的提问来源于stack exchange,提问作者sebastianwth
相关产品推荐
相关产品推荐

