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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Sysadminka Sysadminka
August 02, 2019

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

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

Avatar for Sysadminka

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 не работает без танцев с бубном