Please provide an in-depth description of the question you have:
What do you think about this question?:
In the case a pod is created for a service, istio will push the workload to kmesh daemon.
What does kmesh do?
In handleWorkload, it will first check workload related services. And then in handleWorkloadNewBoundServices, it update
endpoint map -> service map
Then at last, it update the backendmap -> frontend map.
Let's take a look how bpf prog works?
In cgroup/connect, it first check the frontend map -> service map-> endpoint map-> backend map.
As the bpf map update is not atomic, so if backend map has not been updated, but the bpf prog has selected this backendUID, we can get no backend. Then kmesh lb policy does not work now, it will fallback to k8s clusterIP direct access.
Please provide an in-depth description of the question you have:
What do you think about this question?:
In the case a pod is created for a service, istio will push the workload to kmesh daemon.
In
handleWorkload
, it will first check workload related services. And then inhandleWorkloadNewBoundServices
, it updateendpoint map -> service map
Then at last, it update the
backendmap -> frontend map
.In cgroup/connect, it first check the frontend map -> service map-> endpoint map-> backend map.
As the bpf map update is not atomic, so if backend map has not been updated, but the bpf prog has selected this backendUID, we can get no backend. Then kmesh lb policy does not work now, it will fallback to k8s clusterIP direct access.
Environment: