Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

‣໊લɿԣࢁ ঘ໻ɹ(ฏ੒3೥ 11݄13೔ੜ·Ε) ‣ॴଐɿCyber AgentגࣜձࣾɹΞυςΫຊ෦ɹ5݄1೔ೖࣾ ‣ݱ৬ɿαʔόαΠυͷίʔσΟϯάɺύϒϦοΫΫϥ΢υपΓͷΠϯϑϥ୲౰ɻ ‣લ৬ɿ๭Ϋϥ΢υϕϯμʹͯɺόοΫϘʔϯωοτϫʔΫ։ൃɺӡ༻ɻ ‣લʑ৬ɿ๭ΩϟϦΞʹͯɺPBB,EVPN,MPLS,VXLANपΓͷݚڀ։ൃɻ ‣঎ࡐɿฐࣾͷαʔόαΠυΛ΍Β͍ͤͯͨͩ͘༧ఆɻ ‣ٕज़ɿBGPɺEVPNɺGoݴޠɺScalaɺ kubernetesɺrancher ‣Githubɿ https://github.com/nnao45ʢશ෦GoͰ͢সʣ ‣ओͳίϯτϦϏϡʔτɿosrg/gobgpɺfuture-architect/vulsɺskycoin/skycoin….etc ‣ओͳࣗ࡞ιϑτɿpexpo…λʔϛφϧͰExping(ʮgo pingʯͱݕࡧ͢Δͱग़·͢) jgob…gobgpΛREST HTTP APIԽ͢ΔϑϨʔϜϫʔΫ @nnao45 https://nathany.com/go-testing-toolbox/

Slide 3

Slide 3 text

@nnao45 ͷ ͸ https://speakerdeck.com/komeiy/cyberagent-adtech-network-for-these-3years

Slide 4

Slide 4 text

@nnao45 https://speakerdeck.com/komeiy/cyberagent-adtech-network-for-these-3years ݱ৔Ͱͷ ਅ໘໨ͳ࿩ ͨͩͷ झຯͷ࿩ ྃ͝ঝ ͍ͩ͘͞

Slide 5

Slide 5 text

http://www.kamishihoro.info/sg_detail.php?id=1

Slide 6

Slide 6 text

http://www.kamishihoro.info/sg_detail.php?id=1

Slide 7

Slide 7 text

http://www.kamishihoro.info/sg_detail.php?id=1

Slide 8

Slide 8 text

http://www.kamishihoro.info/sg_detail.php?id=1

Slide 9

Slide 9 text

https://elbruno.com/2016/06/23/podcast-introduction-to-containers-thanks-docker-spanish/

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

http://bgp.potaroo.net 70ສܦ࿏Λ௒͑Δ੎͍ʂ

Slide 12

Slide 12 text

޿ใ ग़དྷͪΌ͏ ͥΜͿ ϑϧϧʔτ ϧ ʔ λ ʔ ੈքͷ*1ΞυϨεΛ

Slide 13

Slide 13 text

෺ཧ૚ σʔλϦϯΫ૚ ωοτϫʔΫ૚ τϥϯεϙʔτ૚ ηογϣϯ૚ ϓϨθϯςʔγϣϯ૚ ΞϓϦέʔγϣϯ૚ ਤ̍.TCP/IP 10૚Ϟσϧʢཁग़యʣ ƐƆƋƲ✣Ųƾȉǎǡǹ✣Ƌ࿽ūƓŶƑ⯥ƃƐ ź Χω૚ Ϟϊ૚ ώτ૚

Slide 14

Slide 14 text

CI/CDͷલʹͦ΋ͦ΋ςετॻ͚΍ɻ ੈ͸·͞ʹେίϯςφʔ࣌୅www ͸Φϫίϯ Ansible͸όʔδϣϯ2.6ͰmerakiϞδϡʔϧʹରԠɻ ͜Ε͔Β͸ػցֶ ↑ϋΠϋΠࣗԋԵ VimVimVimVimVimVimVimVimVimVimVimVimVimVimVimVim kubernetes࠷ߴ gVisorͱ͔͕ࠓ͸ྲྀߦΓΒ͠ EmacsEmacsEmacsEmacsEmacsEmacsEmacsEmacsEmac ͦΕGitlabͰ΍Ε͹ʁ ࣮ࡍֶशϞσϧ͑͋͞Ε͹ޙ͸Ϧιʔε͔ͩ keynoteͰΞχϝֆͬͯҾ͖·͔͢ ίϯςφʹ͢ΔඞཁͶʔͩΖw C++ͷ࣍͸Rustɻҟ࿦͸ ͳ Μ ͔ ஌ Β Μ ϒϩοΫνΣʔϯ͸ ͚ Ͳ प Γ ͷ ք ۾ ͸SREͱͯ͠ؤுΓ·͢ ͸ ੌ ͍ ͳ ͊ ·ͨόζϫʔυ͔Αɻ vimrcॻ͍ͯҰ೔ऴΘͬͨɻ ΩζφΞΠٕͬͯज़

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

• اۀͱͯ͠࢖͏৔߹ɺ৭ʑ΍Δ࣌ʹ৭ʑɾɾɾɻ • σʔλϓϨʔϯपΓͰ੍໿͕େ͖͍ɻ • τϨʔχϯά༻్ʹݶఆ͞ΕΔʢͱࢥ͍ͬͯΔʣɻ • ࠓͷ୅දతͳNWٕज़͸ރΕ͖ͬͯΔ͠ɺຊ൪؀ڥͰCLIૢ࡞͢ΔͳΒखࠒͳϧʔλͰ͍͍ɻ • OSΛLinuxͰબͿͱ͍͏͚ͩͰΞυόϯςʔδΛಘΕΔػձ͸ͦ͏େ͖͘͸ͳ͍ɻ • σʔλϓϨʔϯͲ͏͢Δ໰୊ɻ • ѻ͏ͷʹඞཁͳεΩϧηοτ͕Ψν੎޲͚͗͢Δɻ • ͲͪΒ͔ͱ͍͏ͱ૊ΈࠐΈΤϯδχΞ޲͚ͱ͑͞ࢥ͑Δɻ • ͦ͜·ͰΨνͰ΍Δͷ͸ཁ݅͸தʑͳ͍͔΋ʢۚ༥ܥͷΫϥ΢υNWͰ͸Ձ஋ߴ͍ͱࢥ͏ʣɻ .FSBLJƋŮƥ%ǭȂ✣ȉƒ$16⥦৘ƃźaໃটƑťƮ࠯ℿƃƋනũb OFUOTƋ❣ƶƊaƋƉƥŭൗὐƎƍƆƉŧơżč睬ȼ睬Ď ŶƯƥἠದ০ႨƋŮaƄƪƆƋźƂὨି⃷⃾ƊƒਅŲ൐ƲƯơżƫƐb ※શͯݸਓతͳҙݟͳͷͰɺ ܰ͘ฉ͖ྲྀ͍ͯͩ͘͠͞ =Ǫȉdzȉǧȉdzȉ̇

Slide 17

Slide 17 text

• اۀͱͯ͠࢖͏৔߹ɺ৭ʑ΍Δ࣌ʹ৭ʑɾɾɾɻ • σʔλϓϨʔϯपΓͰ੍໿͕େ͖͍ɻ • τϨʔχϯά༻్ʹݶఆ͞ΕΔʢͱࢥ͍ͬͯΔʣɻ • ࠓͷ୅දతͳNWٕज़͸ރΕ͖ͬͯΔ͠ɺຊ൪؀ڥͰCLIૢ࡞͢ΔͳΒखࠒͳϧʔλͰ͍͍ɻ • OSΛLinuxͰબͿͱ͍͏͚ͩͰΞυόϯςʔδΛಘΕΔػձ͸ͦ͏େ͖͘͸ͳ͍ɻ • σʔλϓϨʔϯͲ͏͢Δ໰୊ɻ • ѻ͏ͷʹඞཁͳεΩϧηοτ͕Ψν੎޲͚͗͢Δɻ • ͲͪΒ͔ͱ͍͏ͱ૊ΈࠐΈΤϯδχΞ޲͚ͱ͑͞ࢥ͑Δɻ • ͦ͜·ͰΨνͰ΍Δͷ͸ཁ݅͸தʑͳ͍͔΋ʢۚ༥ܥͷΫϥ΢υNWͰ͸Ձ஋ߴ͍ͱࢥ͏ʣɻ .FSBLJƋŮƥ%ǭȂ✣ȉƒ$16⥦৘ƃźaໃটƑťƮ࠯ℿƃƋනũb OFUOTƋ❣ƶƊaƋƉƥŭൗὐƒƍƆƉŧơżč睬ȼ睬Ď ŶƯƥἠದ০ႨƋŮaƄƪƆƋźƂὨି⃷⃾ƊƒਅŲ൐ƲƯơżƫƐb ※શͯݸਓతͳҙݟͳͷͰɺ ܰ͘ฉ͖ྲྀ͍ͯͩ͘͠͞ =Ǫȉdzȉǧȉdzȉ̇ ࠓ೔ͷൃදͰ͸ɺ ͜ΕΒͱ͸ผͷΞϓϩʔνͰ /8Λ΋ͬͱ༡΂ΔΑ͏ʹ͠·͢ ࠇຐज़ʹ๋͛Δ୅ঈ͸ίʔυɾɾɾʁ w w w

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

GoBGP ✓/55ൃͷΦʔϓϯιʔειϑτ΢ΣΞ ✓(PݴޠωΠςΟϒɺฒྻॲཧରԠ ✓31$"1*Λ࢖༻ͯ͠(PݴޠҎ֎͔Β΋֎෦ૢ࡞Մೳ ✓*&5'४ڌͷ̣̬ϓϩτίϧ࣮૷ɺ&71/ɺ7Y-"/༗ ✓ϥΠϒϥϦͱͯ͠࢖༻͢Δࣄ΋Ͱ͖Δɻ https://osrg.github.io/gobgp/

Slide 22

Slide 22 text

https://www.docker.com/ ✓͍·΍ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɻ ✓(PݴޠͰ΄ͱΜͲॻ͔Ε͍ͯΔɺίϯςφʔٕज़ɻ ✓಺แ͍ͯ͠Δͷ͸-JOVYΧʔωϧͷDHSPVQɺOBNFTQBDFɻ ✓ͳΜ͔࠷ۙ͸LVCFSOFUFTͷ࿩͕ଟ͍ɻ ✓࠷ۙϧʔλ΍48΋αϙʔτ͞ΕͯΔ͕ɺ༻్೉͠ա͗ɻ

Slide 23

Slide 23 text

https://docs.docker.com/develop/ develop-images/multistage-build/ ✓%PDLFS͔Βαϙʔτ͞Εͨ৽ػೳ ࣮͸ ̎ຕॻ͚͹ੲ͔Βग़དྷ͍ٕͯͨ ɻ ✓%PDLFSGJMFʹ̎ͭͷίϯςφΠϝʔδΛࢦఆ͢ ΔࣄͰɺίϯςφʔͷ෼ׂԽΛ௒؆қతʹߦ͏ɻ ✓ίϯςφʔͷ෼ׂԽʹΑΓɺΑΓۃখͳΠϝʔδ Λ࡞੒͢ΔͷΛՄೳͱͳΔɻ

Slide 24

Slide 24 text

FROM golang:latest WORKDIR /go/src/github.com/alexellis/href-counter/ RUN go get -d -v golang.org/x/net/html COPY app.go . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=0 /go/src/github.com/alexellis/href-counter/app . CMD ["./app"] Dockerfile https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

(1)ίϯιʔϧ͔ΒʮHPCHQHMPCBMSJCBEEʯ౳ɺ$-*ૢ࡞ɻ (2)H31$ܦ༝ͰQZUIPOͱ͔$ͱ͔࢖ͬͯ"1*Λୟ͖ʹߦ͘ɻ (3);FCSB2VBHHBͱ͔֎෦ιϑτͱ࿈ܞͯ͠$ϓϨʔϯͱͯ͠࿈ܞɻ (4)(P#(1Λ(PݴޠͷϥΠϒϥϦͱͯ͠࢖༻ͯ͠ɺಠࣗͷϧʔλΛ࡞Δɻ

Slide 27

Slide 27 text

(1)ίϯιʔϧ͔ΒʮHPCHQHMPCBMSJCBEEʯ౳ɺ$-*ૢ࡞ɻ (2)H31$ܦ༝ͰQZUIPOͱ͔$ͱ͔࢖ͬͯ"1*Λୟ͖ʹߦ͘ɻ (3);FCSB2VBHHBͱ͔֎෦ιϑτͱ࿈ܞͯ͠$ϓϨʔϯͱͯ͠࿈ܞɻ (4)(P#(1Λ(PݴޠͷϥΠϒϥϦͱͯ͠࢖༻ͯ͠ɺಠࣗͷϧʔλΛ࡞Δɻ ແ࿦̐൪͕ ΍Γ͚ͯ͐Ͳ Ͳ͜ʹ΋৘ใ ͕Ͷ͑ʂʂʂ

Slide 28

Slide 28 text

https://gist.github.com/nnao45/942c4e9465387f5fda9227da00495e86

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

͜ͷൃදͰࢲͳΓʹ࢖͍ํΛ͝঺հͤͯ͞௖͖͍ͨॴଘ Ͱ͍͟͝·͢ɾɾɾɻ Ҿ༻ݩɿਆͷΈͧ஌ΔηΧΠɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹhttps://www.shogakukan.co.jp/books/volume/18233

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

https://github.com/nnao45/full-routaas

Slide 33

Slide 33 text

./build.sh golang:alpine ϑϧϧʔτ RIB .go bin golang:alpine ※ ※RIB͸ΦϨΰϯେֶͷαʔϏε(http://www.routeviews.org/routeviews/)Λར༻͠·͢

Slide 34

Slide 34 text

bin ϑϧϧʔτ RIB toml busybody bin ϑϧϧʔτ RIB toml ࣮ߦϑΝΠϧͷϏϧυ ߏ੒ઃఆͷϑΝΠϧ MIBϑΝΠϧͷDL golang:alpine root@v-lab:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 8596549588c1 42 hours ago 949MB nnao45/full-routaas latest e916b7ff399a 42 hours ago 102MB ※RIBϑΝΠϧ͕ 85MB͋ΔͷͰɺ ίϯςφຊମ͸ 102 - 85 =17MB

Slide 35

Slide 35 text

FROM golang:alpine AS builder MAINTAINER nnao45 RUN apk update && \ apk upgrade && \ apk add git make ADD . $GOPATH/src/app WORKDIR $GOPATH/src/app RUN make dep-install RUN make dep RUN make RUN mkdir /app && \ cp -a $GOPATH/src/app/full-routaas /app && \ cp -a $GOPATH/src/app/config.tml /app && \ cp -a $GOPATH/src/app/rib* /app FROM busybox WORKDIR /root/ COPY --from=builder app . CMD ["./full-routaas"] Dockerfile https://system-admins.ru/vnedrenie-docker/

Slide 36

Slide 36 text

https://www.analyticsvidhya.com/blog/2017/11/reproducible-data-science-docker-for-data-science/

Slide 37

Slide 37 text

https://www.analyticsvidhya.com/blog/2017/11/reproducible-data-science-docker-for-data-science/ (1)dockerͱ͔࢖͑ΔͳΜ͔͠ΒͷLinux/UnixαʔόΛ༻ҙ͢Δɻ (2)git clone https://github.com/nnao45/full-routaas.git͢Δɻ (3)͓खݩͷ؀ڥʹซͤͯconfig.tmlΛมߋ͢ΔʢAS൪߸ͱ͔ʣɻ (4)./build.sh͢Δɻ

Slide 38

Slide 38 text

https://www.analyticsvidhya.com/blog/2017/11/reproducible-data-science-docker-for-data-science/ #show bgp ipv4 unicast summary Wed Apr 22 16:13:33.503 JST BGP router identifier XX.XX.XX.XX, local AS number XXXXX BGP generic scan interval 60 secs Non-stop routing is enabled BGP table state: Active Table ID: 0xe0000000 RD version: 205 BGP main routing table version 205 BGP NSR Initial initsync version 51 (Reached) BGP NSR/ISSU Sync-Group versions 0/0 BGP scan interval 60 secs BGP is operating in STANDALONE mode. Process RcvTblVer bRIB/RIB LabelVer ImportVer SendTblVer StandbyVer Speaker 205 205 205 205 205 0 Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd XX.XX.XX.XX 0 XXXXX 2573601 58 112 0 0 00:01:26 696234 # time docker push ϩʔΧϧNWͷ΄͛΄͛:5000/nnao45/full-routaas The push refers to repository [XX.XX.XX.XX:5000/nnao45/full-routaas] 095a50fd17f7: Pushed 0314be9edf00: Pushed latest: digest: sha256:6080de0f02b50874926472ab2fca62d4d9746866 ca9dd4263991d569b264c952 size: 739 real 0m3.598s user 0m0.080s sys 0m0.020s 1෼26ඵͰ70ສܦ࿏ऑ޿ใʂʂ ϓϥΠϕʔτϨϙδτϦʹ docker pushɺΘ͔ͣ4ඵʂʂ

Slide 39

Slide 39 text

https://www.analyticsvidhya.com/blog/2017/11/reproducible-data-science-docker-for-data-science/ ‣Goݴޠ͕ు͖ग़͢όΠφϦΛ࣮ߦ͢ΔͷʹɺGoͷ։ൃ؀ڥ͸ඞཁͳ͍ɻ ‣GoBGPΛϥΠϒϥϦͱͯ͠࢖͑͹ɺϢʔβ͕GoBGPͷཉ͍͠ػೳ͚ͩΛ੾Γ ग़ͯ͠ɺͦͷཉ͍͠ػೳ͚ͩΛ࣮ߦͤ͞ΔίϯςφΛ࡞੒Ͱ͖Δɻ ‣GoBGPͷωοτϫʔΫػೳ͸ɺGoݴޠͰϐϡΞʹॻ͔Εͨ΋ͷͱҰൠతͳ LinuxΧʔωϧʹ৐͍ͬͯΔػೳΛϥούʔͯ͠࢖͍ͬͯΔҝɺ΋͏ίϯςφʔ ͱͯ͠͸΄΅Կ΋৐͍ͬͯͳ͍࣮ߦΠϝʔδͱͯ͠busyboxΠϝʔδΛ࢖͑͹ े෼ɻ

Slide 40

Slide 40 text

LDFLAGS := -ldflags="-s -w -X \"main.version=$(VERSION)\" -extldflags \"-static\"" $(TARGET): $(SRCS) CGO_ENABLED=0 GOOS=linux go build -a -tags netgo -installsuffix netgo $(LDFLAGS) -o $(NAME) Go 1.4Ҏ߱͸σϑΥϧτͰͷϏϧυ࣌ʹɺ netύοέʔδ͕dynamic linkԽʂ ὎static linkԽͰෳ਺؀ڥͰಈ͘ΞϓϦʹ͠Α͏ɻ ὎MakefileͰ؅ཧ͕΍͸Γศརɻ ὎ϥΠϒϥϦଆͰ࢖ͬͯΔ࣌͸LDϑϥά΋ཱͯ·͠ΐ͏ˑ ζ*’Ϫ')ζ Makefile https://www.analyticsvidhya.com/blog/2017/11/reproducible-data-science-docker-for-data-science/

Slide 41

Slide 41 text

https://www.analyticsvidhya.com/blog/2017/11/reproducible-data-science-docker-for-data-science/ https://www.slideshare.net/tetsu.koba/linuxinitgolang?ref=https://gocon.connpass.com/event/82515/presentation/

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

✓35#)ϧʔλʜ#(1͑͞࿩ͤΕ͹ɺѼઌOVMMͷTUBUJDϧʔτΛ࠶഑෍͍ͯ͠Δ͚ͩɻ ✓ϑϧϧʔταʔόʜ3*#͑͋ͬͯ͞#(1͕޿ใग़དྷͯ/&95)01ଐੑม͑ΕΕ͹͍͍ɻ ✓#(1'MPXTQFDϧʔλʜ'MPXTQFD͑͞࿩ͤΕ͹ SZ ✓ϓϩτίϧͷ࢓༷͚ͩݟ͍ͨʜOFUOTͰ࡞ͬͯίϯςφΠϝʔδͰݻΊ͓͚ͯ͹͍͍ɻ ✓-*41Ϛοϓαʔόʜ-*41͑͞࿩ͤΕ͹ɺ͋ͱ͸%#ͷνϡʔχϯάؤுΕ͹ SZ ✓#.1ϧʔλʜ#.1͑͞࿩ͤΕ͹ SZ

Slide 46

Slide 46 text

Hard Ware OS App Configuration ͜͜ΛϓϩάϥϚϒϧʹ ͢Δ࿩͸͍ͬͺ͍͋Δɻ

Slide 47

Slide 47 text

Hard Ware OS App Configuration Ͱ΋ͦΖͦΖɺ΋ͬͱίʔυͰॻ͚Δ ؀ڥ͸޿͕Γͭͭ͋Δͱײ͡Δ ✖

Slide 48

Slide 48 text

Կ͔͠ΒͷΠϯλʔϑΣΠε Network Library Hard Ware Docker Engine ࣮ߦΠϝʔδͷখܕԽ=ϙʔλϏϦςΟ APIΛίʔυͰૢ࡞=ػೳ΍௨৴Λॎʹ੍ݶ ίϯςφʹΑΔΠϝʔδ؅ཧ =֤ػೳͷΠϛϡʔλϒϧԽ MSBʹΑΔ։ൃͱ࣮ߦ؀ڥͷ෼཭ =αʔϏεͷϚΠΫϩԽʹΑΓɺ ΦϖϨʔγϣϯϛεͷݮগ API(ૢ࡞͍ͨ͠ػೳ͚ͩίʔσΟϯά) Go Runtime Grpc Server

Slide 49

Slide 49 text

※·͡ΞϯηϜ(maji-anthem)…ਅ໘໨ʹਃ্͛ͤͯ͠͞௖͘ͱɺͦΕ͸ࠃՎϨϕϧͷීٴ౓Ͱ͢Ͷɻ ※পͩͶʔ(numa-dane-)…Ұ౓ϋϚͬͯ͠·͏ͱதʑൈ͚ΒΕͳ͍Ͱ͢Ͷɻ ※΍͹ͨʹ͑Μ(yaba-tanien)…ͦΕ͸ΨνͷϚδͰϠό͍Ͱ͢ɻ

Slide 50

Slide 50 text

New? ※·Μ͡(manji)…௒΍͹͍Ͱ͢ͶιϨɻ ※ΤϞ͍(emo-i)…௒Πέͯ·͢ɻ

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

͔Β࡞ΔͷͰ͸ͳ͘ɺಓ۩ΛआΓͯ૊ΈཱͯΔͷͰ͋Ε͹खܰʹग़དྷΔɾɾɾʂ w w w w w w w w w w https://mojang.com

Slide 53

Slide 53 text

https://github.com/projectcalico/calico-bgp-daemon

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

※͔ͬ͜ΒϚδͰGoͷίʔυͷ࿩͔͠͠·ͤΜɻ ➡ Go…Google੡ͷฒྻॲཧ΍ϋΠεϐʔυͳॲཧʹڧ͍੩తܕ෇ίϯύΠϧݴޠ ➡ Goroutine…Goݴޠͷฒྻॲཧͷਖ਼ମɺίϧʔνϯͰ͢ɻ ➡ gRPC…ݴޠʹґଘ͠ͳ͍IDLͰଞݴޠͷ΍ΓऔΓΛՄೳͱ͢Δɺ༻͸YAMLͩͷJSONͩͷͷ୅ΘΓɻ ※gobgpͷιʔείʔυ͸ͱͯ΋ΦϒδΣΫτࢦ޲ͳॻ͖ํΛ͍ͯ͠ΔͷͰɺ෼͔Γ΍͍͢Ͱ͢(͋ͱmapܕ ΊͬͪΌ࢖͏)ɻ ΁ʔ΍ͬͯΈ͍ͨͬͯࢥ͍͚ͬͯͨͩͨํ͸ؼͬͨޙɺ A Tour of Go(https://go-tour-jp.appspot.com/welcome/1)ΛͲ͏ͧ

Slide 57

Slide 57 text

1.·࣮ͣ૷͍ͨ͠ػೳΛܾΊΔʢܦ࿏޿ใɺ੍ޚɺଞαʔϏεͱͷ࿈ܞʜFUDʣ 2.࣮૷͍ͨ͠ػೳ͕HPCHQHMPCBMίϚϯυͰ࣮૷͞Ε͍ͯΔ͔υΩϡϝϯτΛಡΉɻ 3.࣮૷͍ͨ͠ίϚϯυ͕͋Ε͹ɺͦͷίϚϯυ͕ୟ͍͍ͯΔ"1*ͷίʔυΛಡΉɻ 4."1*Λୟ͘ͷʹඞཁͳม਺ΛͲ͏΍ͬͯ࣋ͬͯ͘Δ͔࣮૷΋ؚΊͯιʔεΛಡΉɻ 5.ͱʹ͔͘ॻ͍ͯॻ͍ͯॻ͍ͯςετςετςετςετʜɻ 6.׬੒ʙʙʙ

Slide 58

Slide 58 text

ϝΠϯͷؔ਺(ผʹmain()Ͱ͋Δඞཁ͸ͳ͍) go gobgp.NewBgpServer().Serve go api.NewGrpcServer(s, ":50051").Serve router-idͱ͔AS൪߸ͱ͔ͦ͜Β΁ΜͷάϩʔόϧͳίϯϑΟάΛηοτ ֤ωΠόʔʹରͯ͠ͷίϯϑΟάΛηοτ ֤APIΛୟ͘gRPCΛॳظԽͯ͠ΫϥΠΞϯτͱͯ͠࢖͏ม਺Λੜ੒ go injectMrt(bgpclient, m) ແݶϧʔϓ෦෼ ※full-routaas͸select{}ͰԿ΋΍ͬͯͳ͍͚Ͳɺ ܦ࿏੍ޚΛAPIͱͯ͠֎ग़͢͠ΔͳΒ͜͜Ͱॻ͍͓ͯ͘ײ͡

Slide 59

Slide 59 text

func bgpdServer() { s := gobgp.NewBgpServer() go s.Serve() g := api.NewGrpcServer(s, ":50051") go g.Serve() global := &config.Global{ Config: config.GlobalConfig{ As: 65000, RouterId: 10.0.0.1, Port: -1, // gobgp won't listen on tcp:179 }, } if err := s.Start(global); err != nil { log.Fatal(err) } //gobgpdαʔϏεΛΰϧʔνϯͰىಈɻ //grpcαʔϏεΛgobgpdαʔϏεʹ ϑοΫͤͨ͞ঢ়ଶͰΰϧʔνϯͰىಈʢΦϓγϣϯʣɻ ͜ΕͰ࣮͸gobgpίϚϯυ͕ซ༻Ͱ͖Δɻ //gobgpdͷάϩʔόϧίϯϑΟάΛઃఆɻ Ͳͷ৔߹΋ɺlocal-asͱrouter-idͱbgpͷϙʔτ͘Β͍͠ ͔ઃఆ͠ͳ͍ͱ͜ΖͩͱࢥΘΕ·͢ɻ https://gist.github.com/nnao45/942c4e9465387f5fda9227da00495e86

Slide 60

Slide 60 text

n := &config.Neighbor{ Config: config.NeighborConfig{ NeighborAddress: 10.0.0.2, PeerAs: 65000, PeerType: config.PEER_TYPE_INTERNAL, }, EbgpMultihop: config.EbgpMultihop{ Config: config.EbgpMultihopConfig{ Enabled: true, MultihopTtl: 255, }, }, AfiSafis: []config.AfiSafi{ { Config: config.AfiSafiConfig{ AfiSafiName: "ipv4-unicast", Enabled: true, }, }, ApplyPolicy: config.ApplyPolicy{ Config: config.ApplyPolicyConfig{ ImportPolicyList: []string{"pd1"}, DefaultImportPolicy: config.DEFAULT_POLICY_TYPE_ACCEPT_ROUTE, }, }, } if err := s.AddNeighbor(n); err != nil { log.Error(err) } } //gobgpdͷωΠόʔίϯϑΟάΛઃఆɻ ΠϝʔδΛҎԼʹॻ͍ͯΈͨɻ Config.Neghborܕ NeighborConfigܕ EbgpMultihopܕ AfiSafiܕ AfiSafiConfigܕ ApplyPolicyܕ AfiPolicyConfigܕ

Slide 61

Slide 61 text

AddPath() Client DeletePath() GetRib() GetNeighbor() timeout := grpc.WithTimeout(time.Second) conn, rpcErr := grpc.Dial("localhost:50051", timeout, grpc.WithBlock(), grpc.WithInsecure()) if rpcErr != nil { log.Fatal("GoBGP is probably not running on the local server ... Please start gobgpd process !\n") log.Fatal(rpcErr) return } client := api.NewGobgpApiClient(conn) //࠶ͼgRPCɻ ͜͜ͷίʔυ͸gobgpͷ֤APIΛͨͨ͘ҝʹɺ gRPCΫϥΠΞϯτΛ৽͘͠ఆ͓͖ٛͯ͠·͢ɻ gRPCͷ֤ଐੑΛ٧ΊࠐΜͩม਺clientΛ࢖͍·Θ͠·͢ɻ TCPͳͷͰGC͸ߟྀͯ͠λΠϜΞ΢τ΋ඞਢͰ͢ɻ

Slide 62

Slide 62 text

args := []string{"10.45.0.0/24"} path, err := cmd.ParsePath(bgp.RF_IPv4_UC, args) if err != nil { fmt.Println(err) os.Exit(1) } for _, p := range []*table.Path{path} { arg := &api.AddPathRequest{ Resource: api.Resource_GLOBAL, VrfId: "", Path: api.ToPathApi(p), } r, err := client.AddPath(context.Background(), arg) if err != nil { fmt.Println(err) os.Exit(1) } var b []byte var u uuid.UUID b = r.Uuid u, err = uuid.FromBytes(b) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println("Added a route's UUID is, ", u.String()) } CLI string CLI PARSE API //CLIΛύʔε͢ΔAPIΛܦ༝ͨ͠ޙɺ ಘͨPathܕͷม਺ΛgRPCʹแΜͰɺ GoBGPଆʹ౉͢Πϝʔδ //CLIΛύʔε͢ΔAPIΛܦ༝͠ͳ͍ͱܕͱ͔໘౗ gobgpd service grpc service gobgp ops API //ࠨ͸AddPathؔ਺ʹಥͬࠐΜ͍Δɻ VRFͷࢦఆͳΜ͔΋͜͜Ͱ΍Δɻ //ͪͳΈʹGoBGP͸ܦ࿏ͷ؅ཧΛUUIDͰ΍ΕΔɻ (DeletePath()͸UUIDࢦఆ͚ͩͰ̤̠)

Slide 63

Slide 63 text

r, err := client.GetRib(context.Background(), &api.GetRibRequest{ Table: &api.Table{ Type: api.Resource_GLOBAL, Family: uint32(bgp.RF_IPv4_UC), Name: "", }, } if err != nil { fmt.Println(err) os.Exit(1) } t, err := r.Table.ToNativeTable() if err != nil { fmt.Println(err) os.Exit(1) } for _, d := range t.GetSortedDestinations() { var ps []*table.Path ps = d.GetAllKnownPathList() for _, s := range ps { fmt.Println("Show a route's UUID is, ",s.UUID().String()) } } //ࠨ͸GetRibؔ਺ʹಥͬࠐΜ͍Δɻ //CࣾͰݴ͑͹ʮshow ip routeʯͬͯॴ //͜ͷCode͡Ό͋·Γҙຯ͸ແ͍͕ɺ ѼઌͰιʔτͯ͘͠ΕΔؔ਺Λୟ͘ྫɻ //͜͜Ͱಘͨܦ࿏ͷUUIDͱAddPathؔ਺ͰಘͨUUID Λಥ͖߹Θͤ͹ਖ਼ৗʹಈ࡞͍ͯ͠ΔࣄΛ֬ೝͰ͖Δɻ for { //ී௨͸ɺίϯϑΟάͱgRPCΫϥΠΞϯτͷ४උ͕ग़དྷͨΒޙ͸forͷແݶϧʔϓͰೖྗΛ଴ͪड͚ΔɻGoͩͱɺνϟϯωϧͰଞ ͷgoroutine͔Β৘ใΛड͚औΕ͹͍͍ͱࢥ͏ɻ }

Slide 64

Slide 64 text

✓ ϧʔςΟϯάςʔϒϧΛͲ͏͢Δͷ͔ߟ͓͑ͯ͘ɻ ➡ ϝϞϦ্Ͱ͋Δ͚ͩͳͷͰɺ࠶ىಈͰফ͑·͢ʢ)8ͱಉ͡ʣɻ ➡ ΋͠ܦ࿏ΛӬٱอ؅͢Δඞཁ͕͋ͬͨ৔߹͸ɺผ్%#Ͱอ؅͢ΔίʔυΛॻ͖·͠ΐ͏ɻ ✓ ΞυϨεͱ͔ͷίϯϑΟάϨʔγϣϯΛNBJO ౳ʹϋʔυίʔυ͸ྲྀੴʹɾɾɾɻ ➡ UPNM IUUQTHJUIVCDPN#VSOU4VTIJUPNM ͱ͔࢖ͬͯϓϨʔϯςΩετ͔ΒಡΈग़ͦ͏ɻ ✓ σόοΫΛߟ͍͑ͯ͘ ➡ ̣̬ΤϯδχΞతʹ͸ϧʔςΟϯάςʔϒϧͱϩάͩΖ͏͕ɺʮ(Pݴޠʯͱͯ͠ͷσόοΫ΋ඞਢɻ ➡ ΍ΔͳΒɺ಺෦ެ։"1*ͱͯ͠SVOUJNF3FBE.FN4UBUT ͷ֤छϞδϡʔϧͱSVOUJNF/VN(PSPVUJOF ͸෷͍ग़͠ ͓͍ͯͯάϥϑͰ΋ॻ͚͹Α͍ɻ ✓ '*#ʹ൓өͱ͔ͦ͏͍͏̙ϓϨʔϯपΓ͸ଞͷιϑτ΢ΣΞͱ࿈ܞͤ͞ͳ͍ͱμϝͰ͢ɻ ➡ ࠓճͷΑ͏ͳ࢖͍ํͰ͸$ϓϨʔϯ୯ಠͷίϯτϩʔϥతͳ࢖͍ํ͕޲͍͍ͯΔؾ͕͠·͢ɻ

Slide 65

Slide 65 text

HACKER PM/PL サイバーエージェントでは エンジニアを募集しております. ※k8s,OpenStack,AWS,GCP触れるよ. http://rickandmorty.wikia.com/wiki/File:Rick_and_morty_wanted.png

Slide 66

Slide 66 text

http://www.kill-la-kill.jp/blu-ray_dvd/04.html ΩϧϥΩϧ Blu-ray &DVD શ̕רൃചதʂ ΩϧϥδΣωϨʔλʔ http://wakufactory.jp/html5/ webfont/killla.html