owned this note changed 6 years ago
Linked with GitHub

clean infrastructure - 李明穎(克里斯多福)

Welcome to DevOps Days 2019 Collaborative Notes

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Getting started from here: https://hackmd.io/@DevOpsDay/2019
Click top left to expand Agenda on the mobile.

接觸的是中型的專案, 主要是 GCP/AWS 分享

Resource

我的Infra職涯小故事(ㄧ)

一開始接手all in one架構,全塞在一個aws account內

有backend frontend RDS Route 53 Jenkins

新的產品線,公司進行分組,開始有新的需求

  • AWS費用要獨立請款
  • 有自己的devops flow
  • 做 IaC (infrastructure as code)

如果沿用現在的架構?

  • 請款:並不是每個aws service都支援tag
  • IaC:會不會動到別的team的infra?

per project two aws accounts(prod & non-prod)

Practices(一)

  • AWS
    • Multiple aws accounts
      • 天生隔離
    • 搭配 Organization 更佳
      • service control policies 去控制可使用的資源型別(由root account 就鎖了)
  • 搭配使用 terraform 時候,建議可以搭配使用
    • AWS: allowed_account_ids
    • GCP: project

Security

我的Infra職涯小故事(二)

  • 新分組的同仁需要登入舊有的aws account
  • jenkins要可以操作 project B 的 aws resource
    Jenkins 內會放大量的key & secret
  • 如何讓同仁在不同account作切換,key & secrets如何管理?

Practices(二)

AWS IAM Assume Role
https://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

http://cobus.io/assets/media/aws_multi_account/multi_account_sts.png

  • AWS

    • 直接用 EC2 instance profile
    • Jenkins master 上不會有 key
    • 權限都是暫時取得,很安全
  • GCP

    • IAM impersonation
  • 如何在local有效存放 aws key secret & switch role

  • AWS

    • 建立一個獨立的AWS account 來收攏有同仁的 iam user resources
    • 透過assume role/switch role 來取得正確的權限
    • 同仁離職時,只要將這個account刪除即可,不會漏掉
  • 優點

    • IAM user resource 更好管理
    • 降低 key & secret 洩漏風險
    • 減少 jenkins master 機敏資料
    • 不會卡住 jenkins automation(因為可能跑terraform去產resource時,要等key產好才能做下一動)

CI/CD

我的Infra職涯小故事(三)

  • jenkins只有一台
  • jenkins跑在ProjectA內,如果哪天ProjectA下線了怎麼辦
  • jenkins的維護問題

Practices (三)

  • 將jenkins獨立出去
  • 放到k8s,每個project,就一個jenkins master
  • jenkins的IAM授權,用前面的方式 (IAM assume role)

使用動態 Jenkins Slaves
AWS: spot instance or GCP: preemptible vm (可以不用把 Jenkins master 開得太大, 減低 cost)

用k8s dynamic slaves,跑在jenkins master所在的k8s cluster內,提高其資源使用率

Practices (四)

將你的CI/CD 跟 application 分離

為了跟Jenkins 做 hook, 會把 endpoint 曝露出去. 分離可以增加隔離性. 降低對 application資源的可能影響.
jenkins可能有更高的權限,是個有風險的存在

Practices (五)

自動化你整個 CI/CD

Jenkins jobs use JobDSL plugin, 可以對 job 做 version control, 不用再對 Jenkins 做備份了.
Jenkins master use K8S helm + Jcasc

Practices (六)

讓 CI/CD 主要 task 在 container 內跑
local or Jenkins上都能跑
增加 local debug 的可能性

tags: DevOpsDays Taipei 2019
Select a repo