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

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

ただいまの
回答率

87.49%

Kubernetesのnetwork addon Calicoについて

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,120

score 175

分からないこと

ネットワークについてほとんど分からず、周りに聞ける人がいないのでcalicoについて自分の理解が正しいかどうかお聞きしたいです。
Felixの特にfirewallについては一旦置いておいて、ルーティングに関して以下の「自分の理解」の部分が正しいことを書いているかどうかお聞きしたいです。
サブネットやルーティングについても?なところがあったので、もしかしたら全然違うかもしれません。

自分の理解

その1 通信過程について

master1(133.18.aaa.bbb)のpod(192.168.197.65)からmaster2(133.18.ccc.ddd)のpodへ通信を行う際は、

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mkgrei

    2019/06/21 14:29

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

    キャンセル

  • urbainleverrier

    2019/06/21 14:43

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

    キャンセル

  • urbainleverrier

    2019/06/21 14:47

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

    キャンセル

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

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る