Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Анонсируем Service IP из Kubernetes по BGP

Sysadminka
August 02, 2019

Анонсируем Service IP из Kubernetes по BGP

Михаил Кузнецов, Интерсвязь
Как я не осилил Ingress, но осилил BGP.
У нас была задача — достучаться до сервиса, запущенного в Кубе. Расскажу о том, как мы использовали для этого Service IP, разобрали устройство Calico, и как нам удалось научиться анонсировать Service IP по BGP.

Sysadminka

August 02, 2019
Tweet

More Decks by Sysadminka

Other Decks in Technology

Transcript

  1. О чем этот доклад Как я не осилил Ingress, но

    осилил BGP. У нас была задача — достучаться до сервиса, запущенного в k8s Расскажу о том, как мы использовали для этого Service IP, разобрались с внутренностями Calico, и как мы научились анонсировать Cluster IP по BGP.
  2. Routing tables ip route default via 172.29.132.1 dev eth0 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 172.29.132.0/24 dev eth0 proto kernel scope link src 172.29.132.127 172.29.132.1 dev eth0 scope link 192.168.0.128/26 via 172.29.141.98 dev tunl0 proto bird onlink 192.168.15.192/26 via 172.29.141.95 dev tunl0 proto bird onlink blackhole 192.168.33.0/26 proto bird 192.168.71.0/26 via 172.29.141.105 dev tunl0 proto bird onlink 192.168.105.64/26 via 172.29.141.97 dev tunl0 proto bird onlink 192.168.175.192/26 via 172.29.141.102 dev tunl0 proto bird onlink 192.168.228.192/26 via 172.29.141.96 dev tunl0 proto bird onlink 192.168.228.195 dev cali7b262072819 scope link
  3. Interfaces 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

    mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DEFAULT qlen 1000 link/ether 00:25:90:62:ed:c6 brd ff:ff:ff:ff:ff:ff 4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT link/ether 00:25:90:62:ed:c6 brd ff:ff:ff:ff:ff:ff 5: cali7b262072819@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT link/ether 32:e9:d2:f3:17:0f brd ff:ff:ff:ff:ff:ff link-netnsid 4
  4. Начинаем погружаться в шаблоны bird_aggr.cfg.template # Generated by confd {{

    $servicesubnet_split := split "10.10.10.0/18" " " }} # ------------- Static black hole addresses ------------- protocol static { {{if ls "/"}} {{range ls "/"}} {{$parts := split . "-"}} {{$cidr := join $parts "/"}} route {{$cidr}} blackhole; {{end}} # kubernetes service subnets {{range $servicesubnet_split}} route {{.}} blackhole; {{end}} } {{else}}# No static routes configured.{{end}}
  5. Пытаемся перестать погружаться в шаблоны bird_ipam.cfg.template # Generated by confd

    filter calico_pools { calico_aggr(); accept_servicesubnet(); {{range ls "/v1/ipam/v4/pool"}}{{$data := json (getv (printf "/v1/ipam/v4/pool/%s" .))}} if ( net ~ {{$data.cidr}} ) then { accept; } {{end}} reject; } {{$network_key := printf "/bgp/v1/host/%s/network_v4" (getenv "NODENAME")}}{{$network := getv $network_key}} filter calico_ipip { deny_servicesubnet(); }
  6. Что же у нас получилось? + сервисы доступны по cluster

    ip и dns, если настроить редирект зоны в coredns - ingress стоит за cluster ip, не всегда удобно - metallb не работает без танцев с бубном