Tôi đã tạo ra một bí mật bằng cách sử dụng kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Nếu tôi muốn cập nhật các giá trị - tôi có thể thực hiện việc này như thế nào?
Tôi đã tạo ra một bí mật bằng cách sử dụng kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
.
Nếu tôi muốn cập nhật các giá trị - tôi có thể thực hiện việc này như thế nào?
Câu trả lời:
Điều này sẽ hoạt động:
kubectl create secret generic production-tls \
--from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml |
kubectl apply -f -
--save-config
cho kubectl create secret
để tránh một cảnh báo CLI.
kubectl create secret tls my-domain-tls --namespace=default --key=./tls.key --cert=./tls.crt --dry-run -o yaml | kubectl apply -f -
Các chứng chỉ ở dạng văn bản thuần túy.
Bạn có thể xóa và tạo lại ngay bí mật:
kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt
Tôi đặt các lệnh này trong một tập lệnh, trong lần gọi đầu tiên, bạn sẽ nhận được cảnh báo về bí mật tồn tại (chưa), nhưng điều này hoạt động.
apply
có ý nghĩa hơn nhiều, cảm ơn!
--namespace=kube-system
Ngoài ra, bạn cũng có thể sử dụng jq
's =
hoặc |=
operator để cập nhật các bí mật một cách nhanh chóng.
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 -
Mặc dù nó có thể không đẹp hoặc đơn giản như kubectl create secret generic --dry-run
phương pháp này, nhưng về mặt kỹ thuật, phương pháp này thực sự cập nhật các giá trị hơn là xóa / tạo lại chúng. Bạn cũng sẽ cần jq
và base64
(hoặc openssl enc -base64
) các lệnh có sẵn, tr
là một tiện ích Linux thường có sẵn để cắt các dòng mới theo sau.
Xem tại đây để biết thêm chi tiết về jq
nhà điều hành cập nhật |=
.
Vì tôi không thể trả lời câu trả lời của Devy ở trên, câu trả lời mà tôi thích vì nó sẽ bảo toàn Quyền sở hữu trong đó việc xóa và tạo lại có khả năng làm mất bất kỳ thông tin bổ sung nào trong hồ sơ. Tôi thêm điều này cho những người mới hơn, những người có thể không hiểu ngay lập tức khi các biến của họ không bị nội suy.
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 -
Điều này khiến tôi cố gắng sử dụng phương pháp 'vá' của kubectl, phương pháp này dường như cũng hoạt động.
kubectl \
patch \
secret \
production-tls \
-p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"
Cảm ơn Devy vì câu trả lời đáp ứng tốt nhất nhu cầu của tôi.
Đối với các trường hợp cụ thể hơn, bạn có thể cần chỉ định không gian tên của mình mà chứng chỉ cần được gia hạn và xóa chứng chỉ cũ.
**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} ```
Tôi đã sử dụng cái này và nó hoạt động như một sự quyến rũ:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
docker-server = https://index.docker.io/v1/ (dành cho DockerHub)
Để biết thêm chi tiết: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line