發表文章

目前顯示的是 六月, 2017的文章

在kubernetes上使用kube-lego自動更新Let’s Encrypt TLS憑證

圖片
在k8s上架好了一個服務之後通常下一件事就是把它公開讓大家都可以使用,這時候你有很多選擇,通常會使用ingress來處理。這時候k8s會產生一組public IP,接下來只需要把DNS指到這個IP你的服務就完成部署了。可是部署完成之後的連線是未加密的會有安全上的疑慮,這時候我們就需要一個TLS憑證。 取得TLS憑證的方式有很多種,大多是付費的服務,不過有一個佛心組織 — Let's Encrypt提供免費的憑證發放服務。要取得憑證你必須證明你是你這個網域的擁有者,怎麼證明呢?有很多方法,細節可以查看ACME。 kube-lego目前只有實作simple HTTP,簡單的說就是產生一組token給你放到你的網站的/.well-known/acme-challenge/,放好之後讓Let's Encrypt去讀取這個網址並確認token是不是符合,通過之後才會發放給你這個憑證。而且憑證是會過期的,於是就得有更新的機制。kube-lego很方便地把這些都處理好了。 最低需求: Kubernetes 1.2+相容的ingress controller (nginx or GCE seehere),如果你是用GKE的話Google都幫你搞定了 😆一個可以運行的ingressP.S. 目前還不適合使用在正式環境中 😆
步驟: 首先需要針對你的ingress做修改,kube-lego將會尋找有kubernetes.io/tls-acme: "true"annotation的ingress object: metadata: annotations: kubernetes.io/tls-acme: "true" 然後kube-lego會看spec.tls這個設定並且幫每一個host entry去跟Let's Encrypt申請憑證,範例如下: spec: tls: - secretName: mysql-tls hosts: - phpmyadmin.example.com - mysql.example.comsecretName是secret object的名稱,必須是namespace中唯一的,不然會被蓋掉,這是用來存放取回來的憑證。 一個完整的ingress.yml可以參…