分からないこと
ネットワークについてほとんど分からず、周りに聞ける人がいないのでcalicoについて自分の理解が正しいかどうかお聞きしたいです。
Felixの特にfirewallについては一旦置いておいて、ルーティングに関して以下の「自分の理解」の部分が正しいことを書いているかどうかお聞きしたいです。
サブネットやルーティングについても?なところがあったので、もしかしたら全然違うかもしれません。
自分の理解
その1 通信過程について
master1(133.18.aaa.bbb
)のpod(192.168.197.65
)からmaster2(133.18.ccc.ddd
)のpodへ通信を行う際は、
0. pod(192.168.197.65
)のeth0へパケットを送信*
docker0を通った後vethで裏返されたcali3f7697fd07dというinterfaceで受け取り、kernelのFIBで経路を確認*- tunl0のinterfaceにforwardされて(以下の
192.168.167.64/26 via 133.18.ccc.ddd dev tunl0 proto bird onlink
より)、IPIPトンネリングの方式からipヘッダがさらに付加され - eth0にforwardされる。
その後、master2で逆のことが起きる。
- tunl0やcali~のmtuが1500より小さいのはIPIPトンネリングをするために付加されるヘッダ分を扱うから。GCE基準で1440になっているが、1480が望ましい?*
- docker0はcalicoをaddonとする場合使わない*
*06/21追記
その2 ルーティングテーブルについて
BIRDによって
- ルーティングテーブルにblackhallが追加される。これは
192.168.197.64/26
のネットワークのうち設定されていないものをdropするため。192.168.197.65
はロンゲストマッチのためdropされない。 - 相手の扱うゲートウェイを拾ってきている。それはconfigでは書かれておらず、BIRDの内部でうまいことやっている?
calico_aggr()
で通している?
felixによって
192.168.167.64/26
のネットワークや192.168.197.65
などのエンドポイントの付与、192.168.197.64
のブロードキャストを利用したARPリクエストに対する返答を行なっている。
現在の設定状況
kubeadmでcalicoのaddonを使ってHA構成を作りました。etcdの設定は行なっておりません。masterは3つです。
master1(最初に構築したもの)のルーティングテーブル
(IPv4 addressはアルファベットを使って関連性を残しながら伏せました。IPv6アドレスは今回kannkeinainode全てgに伏せました。)
[root@v133-18-aaa-bbb ~]# ip route default via 133.18.aaa.1 dev eth0 133.18.aaa.0/23 dev eth0 proto kernel scope link src 133.18.aaa.bbb 169.254.0.0/16 dev eth0 scope link metric 1002 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 192.168.167.64/26 via 133.18.ccc.ddd dev tunl0 proto bird onlink # BIRDの仕業? blackhole 192.168.197.64/26 proto bird # BIRDの仕業? 192.168.197.65 dev cali3f7697fd07d scope link # Felixの仕業? 192.168.197.66 dev cali4452c859317 scope link # Felixの仕業? 192.168.197.67 dev calif0966c7db2f scope link # Felixの仕業? 192.168.226.0/26 via 133.18.eee.fff dev tunl0 proto bird onlink # BIRDの仕業?
master1(最初に構築したもの)のアドレス情報
[root@v133-18-aaa-bbb ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether gg:gg:gg:gg:gg:gg brd ff:ff:ff:ff:ff:ff inet 133.18.aaa.bbb/23 brd 133.18.AAA.255 scope global eth0 valid_lft forever preferred_lft forever inet6 gggg:gggg:gggg:gggg:133:18:aaa:bbb/64 scope global valid_lft forever preferred_lft forever inet6 fe80::gggg:gggg:gggg:gggg/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether gg:gg:gg:gg:gg:gg brd ff:ff:ff:ff:ff:ff 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:98:bf:bc:ea brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever 5: cali3f7697fd07d@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::ecee:eeff:feee:eeee/64 scope link valid_lft forever preferred_lft forever 6: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN group default link/ipip 0.0.0.0 brd 0.0.0.0 inet 192.168.197.64/32 brd 192.168.197.64 scope global tunl0 valid_lft forever preferred_lft forever 7: cali4452c859317@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::ecee:eeff:feee:eeee/64 scope link valid_lft forever preferred_lft forever 8: calif0966c7db2f@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 2 inet6 fe80::ecee:eeff:feee:eeee/64 scope link valid_lft forever preferred_lft forever
BIRDのconfig
[root@v133-18-aaa-bbb ~]# kubectl exec -it -n kube-system calico-node-7jpdt /bin/bash
を行いpodに入った上で、
root@v133-18-aaa-bbb:/# cat /etc/calico/confd/config/bird.cfg # Generated by confd include "bird_aggr.cfg"; include "bird_ipam.cfg"; router id 133.18.aaa.bbb; # Configure synchronization between routing tables and kernel. protocol kernel { learn; # Learn all alien routes from the kernel persist; # Don't remove routes on bird shutdown scan time 2; # Scan kernel routing table every 2 seconds import all; export filter calico_kernel_programming; # Default is export none graceful restart; # Turn on graceful restart to reduce potential flaps in # routes when reloading BIRD configuration. With a full # automatic mesh, there is no way to prevent BGP from # flapping since multiple nodes update their BGP # configuration at the same time, GR is not guaranteed to # work correctly in this scenario. } # Watch interface up/down events. protocol device { debug { states }; scan time 2; # Scan interfaces every 2 seconds } protocol direct { debug { states }; interface -"cali*", "*"; # Exclude cali* but include everything else. } # Template for all BGP clients template bgp bgp_template { debug { states }; description "Connection to BGP peer"; local as 64512; multihop; gateway recursive; # This should be the default, but just in case. import all; # Import all routes, since we don't know what the upstream # topology is and therefore have to trust the ToR/RR. export filter calico_export_to_bgp_peers; # Only want to export routes for workloads. source address 133.18.aaa.bbb; # The local address we use for the TCP connection add paths on; graceful restart; # See comment in kernel section about graceful restart. connect delay time 2; connect retry time 5; error wait time 5,30; } # ------------- Node-to-node mesh ------------- # For peer /host/v133-18-aaa-bbb/ip_addr_v4 # Skipping ourselves (133.18.aaa.bbb) # For peer /host/v133-18-ccc-ddd/ip_addr_v4 protocol bgp Mesh_133_18_ccc_ddd from bgp_template { neighbor 133.18.ccc.ddd as 64512; passive on; # Mesh is unidirectional, peer will connect to us. } # For peer /host/v133-18-eee-fff/ip_addr_v4 protocol bgp Mesh_133_18_eee_fff from bgp_template { neighbor 133.18.eee.fff as 64512; passive on; # Mesh is unidirectional, peer will connect to us. } # ------------- Global peers ------------- # No global peers configured. # ------------- Node-specific peers ------------- # No node-specific peers configured.
root@v133-18-aaa-bbb:/# cat /etc/calico/confd/config/bird_aggr.cfg # Generated by confd protocol static { # IP blocks for this host. route 192.168.197.64/26 blackhole; } # Aggregation of routes on this host; export the block, nothing beneath it. function calico_aggr () { # Block 192.168.197.64/26 is confirmed if ( net = 192.168.197.64/26 ) then { accept; } if ( net ~ 192.168.197.64/26 ) then { reject; } }
root@v133-18-aaa-bbb:/# cat /etc/calico/confd/config/bird_ipam.cfg # Generated by confd filter calico_export_to_bgp_peers { calico_aggr(); if ( net ~ 192.168.0.0/16 ) then { accept; } reject; } filter calico_kernel_programming { if ( net ~ 192.168.0.0/16 ) then { krt_tunnel = "tunl0"; accept; } accept; }
あなたの回答
tips
プレビュー