Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

HashiConf 2018 참석기 #1

작년에 HashiConf에 처음 참석해 보고 올해도 갈만한 콘퍼런스를 찾아보다가 따로 눈에 들어오는 콘퍼런스도 없었고 작년에 재밌어서 올해도 HashiConf 2018에 참석하기로 했다. 막상 일정을 잡다 보니 바로 전주에 GitHub Universe가 있어서 티켓을 구매하고 참석을 했다.

Welcome Reception

hashiconf-2018-d0-01


콘퍼런스는 샌프란시스코 Fairmont 호텔에서 열렸는데 유니온 스퀘어에서 몇 블록만 올라가면 있어서 숙소에서 가깝고 편했다.(하지만 언덕길이라 올라갈 때 힘들었다.)

hashiconf-2018-d0-02


행사 전날 오후에 네트워킹 파티가 있어서 참가했고 이때 참가자 등록까지 다 받았다.

hashiconf-2018-d0-03


작년과 마찬가지로 에코백을 줬는데 디자인은 작년보다 맘에 든다. 기념품은 티셔츠 등이 있는데 특별한 것은 없었다.

hashiconf-2018-d0-04


호텔 1층에 야외 테라스가 있고 이곳에서 핑거푸드와 주류를 제공하고 있었다. 이후 여러 네트워킹 파티가 이곳에서 진행되었다. 호텔 로비가 있는 1층에서 참가자 등록을 받고 3개의 트랙은 1층, 지하 1층, 지하 2층에 나누어서 진행되었다. 모든 행사가 호텔 시설 내에서 다 진행되었고 호텔이 이런 행사를 많이 하는데 트랙을 진행하는 곳 말고도 쉬거나 네트워킹을 할 수 있는 여러 장소가 있었다. 한국 HashiCorp 분도 오셔서 같이 있다가 CEO인 Dave McJannet를 만나서 인사를 나눴는데 그동안 코파운더만 알고 있고 정작 CEO는 모르고 있었다는 생각이 들었다.

Day 1

Opening Keynote

hashiconf-2018-d1-01


키노트 처음에는 HashiCorp의 코파운더이면서 Co-CTO인 Armon Dadgar이 나와서 커뮤니티의 성장에 관해 얘기했다. 작년 HashiConf가 800명 규모였는데 올해는 1200 이상의 규모라고 하고 유저그룹도 38개 국가, 74개 도시에 있다고 했다. HashiCorp의 6개 제품군에서 43,000개 이상의 커밋이 이뤄졌고 80번 릴리스했고 작년 2,200만 다운로드되었는데 올해는 벌써 4,500만 다운로드되었다고 한다. 직원도 작년에는 130명 정도였지만 지금은 320명이 넘는다고 한다.

HashiCorp Learn 웹사이트를 소개했다. 지금은 Vault만 제공하지만 4분기에 Terraform, Consul, Nomad도 지원할 예정이라고 한다.

hashiconf-2018-d1-02


첫 제품 소개는 Vault였는데 Vault는 민감한 데이터를 어떻게 다룰 것인가에 대한 고민으로 2015년 4월에 0.1에 릴리스했고 이후 데이터의 유출을 막으려고 Dynamic secret을 도입해서 필요한 때 클라이언트마다 다른 인증정보를 제공하기 시작했다. 이는 SQL에서 시작했는데 이후 NoSQL, 클라우드, 앱에도 똑같이 적용하기 시작했고 2016년 Vault 엔터프라이즈를 공개했다.

이날 Vault 1.0 Preview를 공개했다. 1.0에는 자동 unseal이 제공되어서 Vault를 내렸다 올렸을 때 unseal 키를 여러 개 제공해서 Vault를 여는 과정을 자동화할 수 있다. 운영할 때 꽤 귀찮은 부분인데 데모는 클라우드에서 보여주었는데 실제 unseal이 되는 조건은 확인해 봐야겠다. 그리고 짧은 주기를 가지고 클라이언트에서 암호화된 Batch 토큰이 추가되어 서버리스나 배치 처리에서 활용할 수 있게 되었다. 오픈 API 스펙이 추가되었고 스토리지 백엔드간에 마이그레이션이 추가되었다.

이어서 HashiCorp Research를 소개하면서 Vault Advisor를 소개했다. 보안 정책의 경우 너무 간단하게 작성하면 위험이 커지고 위험이 낮아지려면 복잡한 정책을 관리하기가 어려우므로 수긍할만한 위험에 대응할 수 있는 정책이 필요하다. Vault Advisor는 피드백 루프를 가지면서 정책이 제대로 설정되어 있는지 검증해 줄 수 있다고 한다. 마지막 날 세션 중에 Advisor를 더 깊게 다루는 세션도 있었는데 작업할 게 좀 있어서 집중해서 듣지는 못했다. 이어서 Nomad를 설명했는데 Nomad는 한 번도 안 써봐서 가볍게 듣기만 했다.

hashiconf-2018-d1-03


이어서는 다른 코파운더이자 Co-CTO인 Mitchell Hashimoto이 나와서 Consul을 설명하고 Terraform 디렉터인 Paul Hinze가 나와서 Terraform을 설명했다. Terraform은 2014년에 릴리스했고 현재 1,200명 이상의 컨트리뷰터가 있고 160명 이상의 프로바이더가 있고 매주 3만 번 이상의 다운로드가 되고 있다고 한다. 레지스트리에 900개 이상의 모듈이 있고 35,000 개 이상의 정책이 Sentinel로 검사되고 있다.

hashiconf-2018-d1-04


이렇게 성장하는 Terrafrom을 보면서 언어가 향상될 필요가 있다는 결론이 나와서 HCL 언어를 개선했고 조직 복잡도가 커지면 협업 비용도 커지는데 협업이 어려운 이유 중 하나는 terraform.tfstate때문이다. 그래서 협업이 쉽도록 Terraform Enterprise에서 제공하던 원격 State 저장소를 무료로 제공하기로 했다.(아직은 신청해야 사용할 수 있다.) 무료로 제공하지만, 사용자 수 제한도 없고 워크스페이스 제한도 없으면 Vault로 암호화되어 있다고 한다. Terraform Enterpise 사용자는 이제 CLI에서 원격 Plan와 Apply를 할 수 있다고 한다.(이건 엔터프라이즈는 한 번도 안 써봐서...)

hashiconf-2018-d1-05


다시 Mitchell이 나와서 Kubernetes Native가 된 생태계에 관해서 설명하고 Consul, Terraform, Vault의 Kubernetes 연동에 관해서 설명하고 CEO인 Dave가 나와서 마무리 인사를 했다. 평소에도 그렇게 느끼긴 하고 오픈소스 제품 중심인 HashiCorp에서 비즈니스 쪽을 맡고 있어서 그런지 콘퍼런스에서도 Dave의 존재감은 그리 크지 않았다.

어쨌든 Keynote는 엄청 재미있었지만, 너무 열심히 했는지 키노트부터 시간을 40분이나 넘기는 바람에 이후 시간표에도 큰 영향을 끼쳤다...

Consul: Service Mesh for Kubernetes and Beyond

Kubernetes와 Consul을 이용해서 Service Mesh를 구성하는 내용이었는데 주로 Connect를 다루는 것 같았는데 키노트 시간이 초과하는 바람에 이후 시간표가 다 엉켜서 늦게 들어가기도 했고 Consul도 안 써봐서 제대로 이해하지는 못했다.

Scaling Vault to Your Whole Organization

주로 Vault의 최신 기능을 설명하는 느낌의 세션이었다. 엔터프라이즈에 도입된 네임스페이스 기능을 사용하면 네임스페이스별로 권한을 줄 수 있다고 한다. 전체 조직에 적용하다 보면 확장성 문제가 생기는데 0.11의 Performance Standby 노드를 사용하면 읽기 작업을 수평적 확장할 수 있다. 쓰기 작업은 여전히 액티브 노드에서 이뤄져야 한다.

서비스 토큰은 Vault의 일반적이 토큰인데 renew, revoke를 할 수 있고 사용횟수를 제한할 수도 있다. 트리 기반으로 자식도 만들 수 있고 accessor, cubyholes를 가지지만 서비스 토큰 생성은 상당히 무거운 작업이다. 이번 1.0에 추가되는 Batch 토큰은 극단적으로 경량화되어 스토리지 쓰기 작업이 전혀 없다. 그래서 renew, revoke를 할 수 없고 짧은 주기를 가진 애플리케이션에 유용하다. Role이나 Mount에서 Batch 토큰을 반환하게 설정할 수 있고 Performance Standby 노드에서도 생성할 수 있다.

Manage SSH with HashiCorp Vault

Vault를 이용해서 SSH 접속을 관리하는 방법을 설명하는 세션이었다. OTP와 CA를 이용한 두 가지 방법을 설명했는데 서버에 vault-ssh-helper를 설치해서 PEM 대신 helper에 SSH 접속을 위임하도록 설정하고 Vault를 이용해서 OTP(One-Time Password)를 받아서 접속하는 과정을 데모로 보여주었다.(예전에 쓴 글이지만 Vault의 SSH 시크릿 백엔드에서 설명한 OTP 과정과 같다.)

hashiconf-2018-d1-06


이어서 CA(Certificate Authority)를 이용하는 방법을 보여주었는데 Vault에서 퍼블릭 키를 받아서 이를 키 파일로 저장한 다음에 이 키를 이용해서 서버에 SSH에 접속할 수 있었다. 물론 이 키에 만료 시간을 정책으로 지정할 수 있다. 데모에서는 30초로 되어 있어서 설명하다가 30초가 넘어서 SSH 접속을 못 하는 과정까지 보여주었다.

Creating a Terraform Provider for Just About Anything

Terraform 프로바이더를 만들면 GitHub 저장소를 만들거나 Google 캘린더에 일정을 추가할 수 있고 Philips Hue 조명을 켤 수도 있다. 회사가 클라우드 프로바이더이면서 고객이 무언가 요구를 하는데 Terraform으로 관리할 수 있는 API를 가진 리소가 있다면 프로바이더를 만들 수 있다. 프로바이더는 Go로 작성하는데 Go API 클라이언트를 잘 만들어서 프로바이더 로직에서 API 로직을 분리하고 오류 핸들링과 로깅을 잘해야 한다.

Writing Custom Providers를 먼저 읽어보고 다른 프로바이더의 코드도 많이 보는 게 중요하다. helper의 코드를 꼭 읽어보는 것이 좋다.

hashiconf-2018-d1-07


에러 핸들링은 실패와 오류 복구에 극단적으로 강해야 하고 TF_LOG=INFO으로 모든 것을 로깅해서 Terraform 문제인지 API 문제나 다른 문제인지 빠르게 구분할 수 있어야 한다. Terraform 문서에 있는 partial state를 잘 활용하는 것이 좋다. 테스팅을 할 때는 recheck > test stesp > destory > checkDestroy 순으로 진행되는데 스텝당 설정 하나가 있고 시뮬레이트할 때 이 스텝을 이용하면 된다고 한다. Ruby로 작성된 website 폴더로 문서를 제공하는 게 관례로 보였다.

마지막으로 팁을 제공했는데 먼저 Go 언어를 익혀야 하고 특히 strconv와 커스텀 UnmarshalJSON 함수에 익숙해져야 한다. 그리고 프로바이더를 만들기 전에 좋은 Go 언어 API 클라이언트 라이브러리가 필요하고 테라폼 모듈을 이해하는 게 좋다.

You. Must. Build. A. Raft!

Raft 알고리즘을 설명하는 세션이었는데 블록체인 쪽에 있으면서 주워들은 것도 있어서 재미있었는데 영어를 다 알아듣지 못해서 아쉬운 세션이었다. 주로 역사를 설명했는데 비잔티움 장군 문제를 설명하고 Byzantine Fault와 Byzantine Failure의 차이점을 보여주고 이후에 나온 3f+1을 사용하는 PBFT에 대해서 설명했다.

hashiconf-2018-d1-08


Paxos는 Lamport가 88년에 작성했다가 아무도 이해를 못 해서 10년 만에 발행하고 Paxos Made Simple을 다시 작성했지만, 사람들은 여전히 이해를 못 했다. Raft는 2013년에 작성되었는데 훨씬 이해하기가 좋다. 알고리즘 상세도 간략히 설명했는데 세션에서는 잘 이해 못 해서 영상이 나오면 다시 봐야겠다.

EVENING SOCIAL

저녁 네트워킹 파티는 호텔 내에 있는 공간에서 진행되었다.

hashiconf-2018-d1-09


가운에 물이 있는데 거기에 배를 띄워서 DJ가 음악을 계속 틀어서 약간 시끄러운 분위기였고 참가자와 비교하면 공간은 작아서 꽤 붐비는 분위기였다. 역시 대화는 쉽지 않았지만 HashiCorp 한국에서 오신 분이랑 얘기 나누면서 Mitchell과 인사도 나누었다. 네트워킹 파티 올 때마다 영어 때문에 ㅠㅠ

hashiconf-2018-d1-10


들어갈 때 주던 칵테일인데 생각보다 꽤 독했다. 이후에도 칵테일이랑 맥주 주문해서 열심히 먹다가 돌아왔다. ㅎㅎ


이 글은 HashiConf 2018 참석기 #2로 이어진다.

2018/11/07 03:28 2018/11/07 03:28