ฉันได้สร้างความลับโดยใช้
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
หากฉันต้องการอัปเดตค่าฉันจะทำอย่างไร
ฉันได้สร้างความลับโดยใช้
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
หากฉันต้องการอัปเดตค่าฉันจะทำอย่างไร
คำตอบ:
สิ่งนี้ควรใช้งานได้:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
ไปkubectl create secret
เพื่อหลีกเลี่ยงการเตือน CLI
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
ใบรับรองอยู่ในรูปแบบข้อความธรรมดา
--dry-run=client
กับ kubectl 1.18 ขึ้นไป
คุณสามารถลบและสร้างความลับใหม่ได้ทันที:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
ฉันใส่คำสั่งเหล่านี้ในสคริปต์ในการโทรครั้งแรกคุณจะได้รับคำเตือนเกี่ยวกับความลับที่มีอยู่ (ยังไม่มี) แต่ใช้งานได้
apply
มันสมเหตุสมผลกว่ามากขอบคุณ!
--namespace=kube-system
หรือคุณยังสามารถใช้jq
' =
หรือ|=
โอเปอเรเตอร์เพื่ออัปเดตความลับได้ทันที
TLS_KEY=$(base64 < "./tls.key" | tr -d '\n')
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')
kubectl get secrets production-tls -o json \
| jq '.data["tls.key"] |= "$TLS_KEY"' \
| jq '.data["tls.crt"] |= "$TLS_CRT"' \
| kubectl apply -f -
แม้ว่าวิธีนี้อาจจะไม่สวยหรูหรือเรียบง่ายเหมือนkubectl create secret generic --dry-run
วิธีการ แต่ในทางเทคนิคแล้ววิธีนี้เป็นการอัปเดตค่าอย่างแท้จริงแทนที่จะลบ / สร้างใหม่ คุณจะต้องมีjq
และbase64
(หรือopenssl enc -base64
) คำสั่งที่พร้อมใช้งานซึ่งtr
เป็นยูทิลิตี้ Linux ที่มีอยู่ทั่วไปสำหรับการตัดแต่งบรรทัดใหม่
ดู ที่นี่สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการดำเนินการปรับปรุงjq
|=
เนื่องจากฉันไม่สามารถตอบกลับคำตอบของ Devy ข้างต้นได้ซึ่งฉันชอบเพราะมันจะรักษาความเป็นเจ้าของไว้ซึ่งการลบและสร้างใหม่มีโอกาสที่จะสูญเสียข้อมูลเพิ่มเติมใด ๆ ในบันทึก ฉันกำลังเพิ่มสิ่งนี้สำหรับผู้คนใหม่ ๆ ที่อาจไม่เข้าใจในทันทีว่าตัวแปรของพวกเขาไม่ได้รับการแก้ไข
TLS_KEY=$(base64 < "./tls.key" | tr -d '\n')
TLS_CRT=$(base64 < "./tls.crt" | tr -d '\n')
kubectl get secrets production-tls -o json \
| jq ".data[\"tls.key\"] |= \"$TLS_KEY\"" \
| jq ".data[\"tls.crt\"] |= \"$TLS_CRT\"" \
| kubectl apply -f -
สิ่งนี้ทำให้ฉันพยายามใช้วิธี 'patch' ของ kubectl ซึ่งดูเหมือนจะได้ผลเช่นกัน
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
ขอบคุณ Devy สำหรับคำตอบที่ตรงกับความต้องการของฉันมากที่สุด
เพื่อขยายคำตอบเหล่านี้ฉันพบว่าการเพิ่ม '--ignore-not-found' ในการลบช่วยให้ CICD ของเราไม่ผิดพลาดหากไม่มีความลับก็จะดำเนินการต่อและสร้าง:
kubectl delete secret production-tls --ignore-not-found
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt.
สำหรับกรณีที่เฉพาะเจาะจงมากขึ้นคุณอาจต้องระบุเนมสเปซของคุณที่จะต้องต่ออายุใบรับรองและลบใบรับรองเก่า
**For deletion of the cert **
kubectl delete secret -n `namespace`
**For creation of new cert to specific namespace **
kubectl create secret {your-cert-name} --key /etc/certs/{name}.com.key --cert /etc/certs/{name}.com.crt -n {namespace} ```