質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

1849閲覧

Kubernetesのnetwork addon Calicoについて

urbainleverrier

総合スコア200

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2019/06/20 17:01

編集2019/06/21 05:44

分からないこと

ネットワークについてほとんど分からず、周りに聞ける人がいないので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へパケットを送信*

  1. docker0を通った後vethで裏返されたcali3f7697fd07dというinterfaceで受け取り、kernelのFIBで経路を確認*
  2. tunl0のinterfaceにforwardされて(以下の192.168.167.64/26 via 133.18.ccc.ddd dev tunl0 proto bird onlinkより)、IPIPトンネリングの方式からipヘッダがさらに付加され
  3. 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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2019/06/21 05:29

何にお困りでしょうか。calicoはBGPのプロトコルに従ってルーティングテーブルを作っていて、今の構成ではノード間で正しくルーティングされているようですが…
urbainleverrier

2019/06/21 05:43

追記ありがとうございます。 投稿した内容が正しいかどうかお聞きしたかったです。 ネットワークについて良く分からないまま、calicoを読み、一度激しく混乱したので、documentや各種設定で得たことの意味を正しく理解できているかどうか、お聞きたかったです。 Blogに投稿するには知識不足だったので、コメントをいただければ幸いと思い、質問として投稿しました。
urbainleverrier

2019/06/21 05:47

また、そのままブログに突っ込むようなことは致しません。お話しする友達がいないので投稿したかっただけです笑
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問