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

K8s中Ingress无法识别FQDN类型EndpointSlice的问题排查

蓝绿部署流量路径配置问题:Ingress无法识别FQDN类型EndpointSlice

背景与需求

我正在搭建蓝绿部署环境,受跨应用限制,需要构建Ingress → 无标签选择器的Service → 带标签选择器的Service → Pods的流量路径,核心目标:

  • Ingress转发流量到可频繁变更的服务名称,避免硬编码IP
  • 支持跨命名空间甚至跨集群的服务访问
  • 外部用户通过app-live.mydomain.com访问Pod,集群内应用可通过live-svc.myNamespace.svc.cluster.local访问,且流量全程在集群内部流转,不能出集群再返回以满足延迟要求

问题现象

我尝试用ExternalName类型Service配合手动创建的FQDN类型EndpointSlice,但使用AWS ALB控制器时,控制器不支持ExternalName服务;即使把live-svc改成普通无选择器Service并绑定FQDN类型EndpointSlice,Ingress仍报错**「endpoints not found」**。

配置尝试

以下是我的配置文件:

无标签选择器的Service(live-svc)

apiVersion: v1
kind: Service
metadata:
  name: live-svc
  namespace: myNamespace
spec:
  #type: ExternalName
  #externalName: secondaryService.myNamespace.svc.cluster.local # 该服务已正确关联Pod
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: https

FQDN类型EndpointSlice

apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
  name: live-svc
  namespace: myNamespace
  labels:
    kubernetes.io/service-name: live-svc
addressType: FQDN
ports:
  - name: https
    protocol: TCP
    port: 443
endpoints:
  - addresses:
      - secondaryService.myNamespace.svc.cluster.local

Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ...
  name: app-public
  namespace: myNamespace
spec:
  rules:
  - host: app-live.mydomain.com
    http:
      paths:
      - backend:
          service:
            name: live-svc
            port:
              name: https
        path: /
        pathType: Prefix

核心疑问

我原以为EndpointSlice是Endpoints的替代方案且更推荐,现在是否必须改用Endpoints类型资源才能解决这个问题?


解决方案说明

1. AWS ALB控制器的支持限制

AWS ALB控制器目前不支持FQDN类型的EndpointSlice,仅适配IP类型的EndpointSlice/Endpoints。这是配置后Ingress报错「endpoints not found」的核心原因。

2. 是否必须改用Endpoints资源?

是的,当前场景下必须改用传统Endpoints资源:

  • 尽管EndpointSlice是官方推荐的Endpoints替代方案,但ALB控制器尚未适配FQDN类型的EndpointSlice
  • 传统Endpoints资源支持配置FQDN地址,完全满足你将流量转发到目标服务内部DNS的需求

3. 修正后的配置示例

无标签选择器的Service(live-svc)

保持原配置不变,无需设置type: ExternalName:

apiVersion: v1
kind: Service
metadata:
  name: live-svc
  namespace: myNamespace
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: https

替换为Endpoints资源

apiVersion: v1
kind: Endpoints
metadata:
  name: live-svc
  namespace: myNamespace
subsets:
- addresses:
  - hostname: secondaryService.myNamespace.svc.cluster.local
  ports:
  - name: https
    port: 443
    protocol: TCP

Ingress配置

保持原配置不变即可。

4. 集群内访问验证

配置完成后,集群内Pod通过live-svc.myNamespace.svc.cluster.local访问时,Kubernetes DNS会解析到该Service的ClusterIP,再通过Endpoints配置的FQDN转发到目标服务,流量全程在集群内部流转,不会出集群,满足延迟要求。

5. 蓝绿切换适配

后续蓝绿切换时,只需修改Endpoints资源中的hostname字段,指向新的目标服务(比如primaryService.myNamespace.svc.cluster.local)即可,无需修改Ingress或live-svc的配置,完全符合“可频繁变更服务名称”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:03:34