xlog | life, tech, etc.

xlog | life, tech, etc.


#_Log everything.

Share


Tags


Replace SSL Certificate in NGINX Ingress Controller

หลังจากที่เราใช้งาน Kubernetes กันมาพักใหญ่ๆแล้ว เราก็น่าจะคุ้นกับการทำงานมากขึ้น สิ่งที่เกิดขึ้นหลังจากการรันระบบมาสักพักในเว็บยุคใหม่ๆคือ SSL Certificate หมดอายุ เนื่องจากปัจจุบัน Certificate จะมีอายุได้มากสุดประมาณ 2 ปี หรือหากเกิดความผิดพลาด private key หลุดออกไป เราก็จะต้องทำการเปลี่ยน Certificate/Key ใหม่

Photo by Markus Spiske on Unsplash

วิธีการสร้าง หรือ เปลี่ยน Certificate นั้นก็ง่ายๆครับ

  1. เราต้องมี Certificate ใหม่ก่อน
  2. ทำการสร้าง Secret file ให้ Kubernetes รู้จัก
  3. Apply file ใหม่ก็เสร็จแล้ว

เรามาดูตัวอย่างกันครับ

เรานำ Certificate ที่ได้มาแปลงเป็น Base64 ก่อน ทั้ง Cert และ Key นะครับ ถ้า Cert มี Intermediate ก็ bundle มาเป็นไฟล์เดียวเลยครับ ผมจะใช้ Cert จาก Let’s Encrypt มาเป็นตัวอย่างนะครับ

ใช้ command base64 ใน linux เลยก็ได้ง่ายดี แต่ว่ามันจะมี newline มาด้วย ให้รันคำสั่ง

$base64 privkey.pem | tr -d ‘\n’

$base64 fullchain.pem | tr -d ‘\n’

ทั้งสองไฟล์คือ Cert และ Key นะครับ ชื่ออาจจะแตกต่างกันไปแล้วแต่ตั้งครับ รันเสร็จเราจะได้ base64 string ยาวๆ ให้ copy ไปแปะในขั้นต่อไปครับ

ต่อไปคือการสร้าง secret สำหรับ kubernetes โดยจะมีหน้าตาแบบนี้

apiVersion: v1kind: Secretmetadata:  name: testsecret-tls  namespace: defaultdata:  tls.crt: ## base64 encoded cert ##  tls.key: ## base64 encoded key ##type: kubernetes.io/tls

ให้เราเอา base64 ที่ได้ในตอนแรกมาใส่ตรง tls.crt และ tls.key

ถ้าต้องการจะ Replace Cert เดิม ให้ใส่ name และ namespace ให้ตรงกันของเดิมนะครับ

จากนั้นก็ save และ apply ครับ

ส่วน Ingress เราก็ใส่ secretName ลงในส่วนของ tls ดูชื่อให้ตรงกันนะครับ

apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata:  name: tls-example-ingressspec:  tls:  - hosts:    - sslexample.foo.com    secretName: testsecret-tls  rules:    - host: sslexample.foo.com      http:        paths:        - path: /          backend:            serviceName: service1            servicePort: 80

อันนี้เป็นตัวอย่างของผมนะครับ

แค่นี้ก็เสร็จแล้วครับ ผมมีตัวอย่างการ Replace ให้ดูข้างนี้ครับ

อันนี้ Cert ใบเดิมครับ สังเกตุตรง Expires: 10:19:24

ทำการขอ Cert ใหม่ และ Apply ขึ้น Kube

ดูใน Log ของ Ingress controller จะเจอว่า secret axus-dev/letnc-tls was updated

ลองเช็ค Cert อีกที จะเห็นว่าเป็นใบใหม่แล้ว Expires: 10:24:19

โดยที่ถ้าชื่อ secret ตรงกับของเดิมที่ใช้ใน Ingress ก็จะอัพเดทให้เองครับ

View Comments