
我们新购置了一套 TKE 集群,使用版本 1.30 并启用了 DataPlane V2,实际使用中发现和现有的集群行为有差异。
表现为,原本应该自动注册进入 Istio Mesh 的原生 Kubernetes Service,无法被 Mesh 中的其他服务访问,表现为报告 No Healthy Upstream,除非显式指定 outboundTrafficPolicy.mode: ALLOW_ANY,即视作为外部服务。
经过复杂的排查,最终确定是 DataPlane V2 的 Cilium 与 Istio 1.23 Sidecar 模式存在冲突。
最后经过多次尝试,找到了最小改动的解决方法:
kube-system 命名空间下的 cilium-config ConfigMap增加或者修改如下参数:
bpf-lb-sock-hostns-only: "true"kube-system 下的 Deployment tke-eni-agent 和 DaemonSet tke-eni-agent根因
Cilium 的 bpf-lb-sock: true 在 Pod 级别直接翻译 ClusterIP 到 Pod IP,绕过了 Istio 的 Envoy sidecar 流量捕获,导致 503 NU(No Upstream Host)错误。同时,tke-cni-agent因 ClusterIP 路由问题(kube-proxy-replacement: disabled 时缺失 kube-proxy)无法访问 API 服务器。
解决方案效果
设置 bpf-lb-sock-hostns-only: true 限制 socket 负载均衡到 host namespace,让 Cilium 在 host 级别处理 ClusterIP,与 Istio 的 iptables 重定向兼容,解决了 Istio 和 Multus/tke-cni-agent 的问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。