cilium pod访问cluster ip
cilium 1.15.1
cilium在主机网口上没有加载tc规则,因为tc filter show dev 主机网口 ingress和tc filter show dev 主机网口 egress没有结果。
cilium有自己的ct表,独立于内核。
1. 区分报文类型走不同流程。
bpf/bpf_lxc.c
cil_from_container函数
解析报文后走CILIUM_CALL_IPV4_FROM_LXC。
2. 查找service后端pod ip
bpf/bpf_lxc.c
tail_handle_ipv4函数
==> __tail_handle_ipv4函数
==> __per_packet_lb_svc_xlate_4函数
bpf/lib/lb.h
==> lb4_extract_tuple函数
==> lb4_lookup_service函数
根据目的cluster_ip+目的端口+协议(tcp/udp)查询cilium_lb4_services表
bpf/lib/conntrack.h
==> ct_lazy_lookup4函数
==> __ct_lookup4函数
根据五元组查询cilium_ct_tcp4_65535或者cilium_ct_any4_65535,获取service类型ct连接状态
==> lb4_select_backend_id函数
基于随机数从cluster_ip随机选择后端pod ip
==> ct_create4函数
创建service类型ct连接状态
==> lb4_xlate函数
dnat转换,修改checksum。