[kubernetes] 파일에서 생성 될 때 Kubernetes에서 비밀을 업데이트하려면 어떻게해야합니까?

을 사용하여 비밀을 만들었습니다 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 -


답변

비밀을 삭제하고 즉시 다시 만들 수 있습니다.

kubectl delete secret production-tls
kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt

이 명령을 스크립트에 넣고 첫 번째 호출에서 (아직 아님) 존재하는 비밀에 대한 경고를 받지만 이것은 작동합니다.


답변

또는 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접근 방식 만큼 우아하거나 단순하지는 않지만 기술적으로이 접근 방식은 값을 삭제 / 다시 생성하는 것이 아니라 실제로 값을 업데이트하는 것입니다. 또한 사용 가능한 jqbase64(또는 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 -

이로 인해 kubectl의 ‘패치’방법을 사용하려고 시도했지만 작동하는 것 같습니다.

kubectl \
        patch \
        secret \
        production-tls \
        -p "{\"data\":{\"tls.key\":\"${TLS_KEY}\",\"tls.crt\":\"${TLS_CRT}\"}}"

내 요구를 가장 잘 충족시킨 답변에 대해 Devy에게 감사드립니다.


답변

더 구체적인 경우에는 인증서를 갱신해야하는 네임 스페이스를 지정하고 이전 인증서를 삭제해야 할 수 있습니다.

**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} ```


답변

나는 이것을 사용했고 그것은 매력처럼 작동했습니다.

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/(DockerHub 용)

자세한 내용 :
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line


답변