Kullanarak bir sır oluşturdum
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
Değerleri güncellemek istersem - bunu nasıl yapabilirim?
Kullanarak bir sır oluşturdum
kubectl create secret generic production-tls \
--from-file=./tls.key \
--from-file=./tls.crt
Değerleri güncellemek istersem - bunu nasıl yapabilirim?
Yanıtlar:
Bu çalışmalı:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
için kubectl create secret
bir CLI uyarı önlemek için.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
Sertifikalar düz metindeydi.
--dry-run=client
Kubectl 1.18 veya üstü ile kullanmanız gerekir.
Sırrı silebilir ve hemen yeniden oluşturabilirsiniz:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Bu komutları bir betiğe koyuyorum, ilk çağrıda (henüz değil) var olan sır hakkında bir uyarı alıyorsunuz ama bu çalışıyor.
apply
çok daha mantıklı, teşekkürler!
--namespace=kube-system
Alternatif olarak, sırları anında güncellemek için jq
's =
veya |=
operatörünü de kullanabilirsiniz .
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
Yaklaşım kadar zarif veya basit olmasa da , teknik olarak bu yaklaşım değerleri silmek / yeniden oluşturmaktan ziyade gerçekten değerleri güncelliyor. Ayrıca jq
ve base64
(veya openssl enc -base64
) komutlara ihtiyacınız olacak , tr
sondaki satırları kırpmak için yaygın olarak bulunan bir Linux yardımcı programıdır.
Güncelleme operatörü hakkında daha fazla ayrıntı için buraya bakın .jq
|=
Yukarıdaki Devy'nin cevabına cevap veremediğim için, bu hoşuma gidiyor çünkü silme ve yeniden oluşturma, kayıttaki ekstra bilgileri kaybetme potansiyeline sahip olduğunda Sahipliği koruyacak. Bunu, değişkenlerinin enterpolasyona tabi tutulmadığını hemen anlayamayan yeni insanlar için ekliyorum.
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 -
Bu beni kubectl'in 'yama' yöntemini kullanmaya yöneltti, ki bu da işe yarıyor gibi görünüyor.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
İhtiyaçlarımı en iyi karşılayan yanıt için teşekkürler Devy.
Sadece bu cevapları genişletmek için, silme işlemine '--ignore-not-found' eklemenin CICD'mize yardımcı olduğunu buldum, çünkü eğer sır yoksa, hata yapmazdı, devam eder ve onu oluştururdu:
kubectl delete secret production-tls --ignore-not-found
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt.
Daha özel durumlar için, sertifikanın yenilenmesi gereken ad alanınızı belirtmeniz ve eskisini silmeniz gerekebilir.
**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} ```