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。

posted on 2024-10-28 22:18  王景迁  阅读(46)  评论(0)    收藏  举报

导航