能否让AWS EKS中Service流量仅路由至Primary Pod?
在AWS EKS中实现Service仅路由至Primary Pod的方案(排除就绪探针)
方案1:标签选择器+动态标签切换
- 为Service配置精准标签选择器,仅匹配带有
role: primary标签的Pod:apiVersion: v1 kind: Service metadata: name: app-service spec: selector: app: your-java-app role: primary ports: - protocol: TCP port: 80 targetPort: 8080 - 给Primary Pod固定打上
role: primary标签,Standby Pod打上role: standby标签。 - 主备切换时,通过命令更新Pod标签即可:
# 将Standby Pod切换为Primary kubectl label pod <standby-pod-name> role=primary --overwrite # 将原Primary Pod切换为Standby kubectl label pod <primary-pod-name> role=standby --overwrite - 优势:Standby Pod保持正常运行状态,可通过Pod IP、单独的Standby Service或Headless Service直接访问,完全不影响其可用性。
方案2:Headless Service + 自定义流量代理
- 创建Headless Service匹配所有两个Pod(不做负载均衡,返回所有Pod IP):
apiVersion: v1 kind: Service metadata: name: app-headless spec: clusterIP: None selector: app: your-java-app ports: - protocol: TCP port: 80 targetPort: 8080 - 在应用Pod中部署轻量代理Sidecar(比如Nginx),或在集群内部署独立代理服务,让代理层判断Pod角色,仅将请求转发到Primary Pod。
- 对外暴露的主Service指向代理端口,外部请求通过Service到达代理后路由到Primary Pod;Standby Pod可通过Headless Service或直接IP访问。
方案3:基于Gateway API的流量规则(适用于支持Gateway API的EKS集群)
- 使用AWS Gateway Controller for EKS配置Gateway和HTTPRoute,通过Route规则精准筛选Primary Pod:
apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: app-route spec: parentRefs: - name: your-gateway rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: app-service-backend port: 8080 filters: - type: FilterMatch filterMatch: labels: role: primary - 该方案通过Gateway路由规则直接将流量导向Primary Pod,Standby Pod可通过单独Route或直接访问,适合已采用云原生网关架构的场景。
内容的提问来源于stack exchange,提问作者Ling Feng
相关产品推荐
相关产品推荐

