Kubernetes - ad alanlarında sır paylaşma


95

Kubernetes'teki ad alanları arasında sırları paylaşmanın bir yolu var mı?

Benim kullanım durumum: Tüm ad alanlarım için aynı özel kayıt defterine sahibim ve her biri için aynı sırrı oluşturmaktan kaçınmak istiyorum.

Yardımınız için teşekkürler.


bu, gizli paylaşımı otomatikleştirir: github.com/zakkg3/ClusterSecret
NicoKowe

Yanıtlar:


86

Gizli API nesneleri bir ad alanında bulunur. Bunlara yalnızca aynı ad alanındaki kapsüller tarafından başvurulabilir. Temel olarak, her ad alanı için sırrı oluşturmanız gerekecektir.

https://kubernetes.io/docs/concepts/configuration/secret/#details



1
Doğru cevap bu, kubectl + sed ile başka bir isim alanına klonlayabileceğinizi söylemeye değer, hepsi tek bir satırda, aşağıdaki cevabıma bakın.
NicoKowe


69

Bunlara yalnızca aynı ad alanındaki kapsüller tarafından başvurulabilir. Ancak sırrı bir ad alanından diğerine kopyalayabilirsiniz. Ad alanından localdockerregsırrı şu adrese kopyalamanın bir örneği :defaultdev

 kubectl get secret localdockerreg --namespace=default --export -o yaml | kubectl apply --namespace=dev -f -

### GÜNCELLEME ### Kubernetes v1.14'te --exportbayrak kullanımdan kaldırılmıştır . Bu nedenle, aşağıdaki -oyamlbayraklı Komut , gelecek sürümlerde uyarı vermeden çalışacaktır.

kubectl get secret localdockerreg --namespace=default -oyaml | kubectl apply --namespace=dev -f -

veya kaynak ad alanı mutlaka varsayılan değilse aşağıda

kubectl get secret localdockerreg --namespace=default -oyaml | grep -v '^\s*namespace:\s' | kubectl apply --namespace=dev -f -

1
Dışa aktardığınız sırlar varsayılan ad alanında değilse bu çalışmayacaktır
gerasalus


4
Hmm, ikinci komutu kullandığımda ( --exportbayrak yok ) "sağlanan seçenekteki ad alanı eşleşmiyor" şeklinde bir hata alıyorum. kubectl sürüm 1.15. Çıktı yaml'den ad alanını kaldırmak için sedbu iki kubectlkomut arasında bir şey kullanmanız gerekebileceğini düşünüyorum
Matt Dodge

6
Kesin olmak gerekirse, kaynak ad alanını orta düzey YAML'den kaldırmanız gerekir: $ kubectl get secret <SECRET> --namespace <NS-SRC> -oyaml | grep -v '^\s*namespace:\s' | kubectl apply --namespace <NS-DST> -f - ps, diğer nesne türleriyle test edilmemiştir, ancak çalışmanız gerekiyorsa pps, taşıyorsanız kaynağı silmeyi unutmayın
Costa Shapiro

16

Kabul edilen cevap doğru, burada sırrı ad alanları arasında kopyalamak istiyorsanız bir ipucu.

kubectl get secret <secret-name> -n <source-namespace> -o yaml \
| sed s/"namespace: <source-namespace>"/"namespace: <destination-namespace>"/\
| kubectl apply -n <destination-namespace> -f -

/ Nisan 2020'yi düzenle:

Artık, sırları ad alanları arasında ve bunun ClusterSecret operatörünü kullanarak paylaşmanın veya senkronize etmenin bir yolu var:

https://github.com/zakkg3/ClusterSecret


6

Gizli diziler ad alanlı kaynaklardır, ancak bunları çoğaltmak için bir Kubernetes uzantısı kullanabilirsiniz. Bunu, gizli dizilerde saklanan kimlik bilgilerini veya sertifikaları tüm ad alanlarına otomatik olarak yaymak ve senkronize halde tutmak için kullanırız (kaynağı değiştirin ve tüm kopyalar güncellenir). Kubernetes Reflector'a bakın ( https://github.com/EmberStack/kubernetes-reflector ).

Uzantı, ek açıklamalar aracılığıyla ad alanları arasında bir sırrı otomatik olarak kopyalamanıza ve senkronize etmenize olanak tanır:

Kaynak sırrına ek açıklamaları ekleyin:

 annotations:
   reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true"

Bu, tüm ad alanlarında sırrın bir kopyasını oluşturacaktır. Bir kopyanın oluşturulduğu ad alanlarını aşağıdakileri kullanarak sınırlayabilirsiniz:

reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "namespace-1,namespace-2,namespace-[0-9]*"

Uzantı, ConfigMaps ve sertifika yöneticisi sertifikalarını da destekler. Sorumluluk Sahibi: Kubernetes Reflector uzantısının yazarıyım.


Güzel eklenti. Şimdi kullanıyorum. Teşekkürler!
CTiPKA


1

@NicoKowe'den iyileştirme

Tüm sırları bir ad alanından diğerine kopyalamak için tek satır

$ for i in `kubectl get secrets | awk '{print $1}'`; do  kubectl get secret $1 -n <source-namespace> -o yaml | sed s/"namespace: <source-namespace>"/"namespace: <target-namespace>"/ | kubectl apply -n <target-namespace> -f -  ; done

1

--export kullanımdan kaldırıldı

sed YAML veya JSON'u düzenlemek için uygun bir araç değildir.

Ad jqalanını ve istemediğimiz diğer meta verileri silmek için kullanılan bir örnek :

kubectl get secret cure-for-covid-19 -n china -o json | jq 'del(.metadata["namespace","creationTimestamp","resourceVersion","selfLink","uid"])' | kubectl apply -n rest-of-world -f -

1

@Evans Tucker'ın cevabına göre, ancak yalnızca istediğimizi korumak için jq filtresinde silme yerine beyaz listeyi kullanıyor.

kubectl get secret cure-for-covid-19 -n china -o json | jq '{apiVersion,data,kind,metadata,type} | .metadata |= {"annotations", "name"}' | kubectl apply -n rest-of-world -f -

Esasen aynı şey ama etiketleri koruyor.

kubectl get secret cure-for-covid-19 -n china -o json | jq '{apiVersion,data,kind,metadata,type} | .metadata |= {"annotations", "name", "labels"}' | kubectl apply -n rest-of-world -f -


0

kubectl gizli gitlab-kayıt defteri --namespace = revsys-com - dışa aktar -o yaml | \ kubectl başvur --namespace = devspectrum-dev -f -


0

Serviceaccoun'a sırrı orijinal ad alanlarında kullanma yetkisi vermek için RBAC'ı kullanın. Ancak bunun, ad adları arasında paylaşılan bir sırrın olması önerilmez.


0

Tüm sırları kopyalamak için çözüm.

kubectl delete secret --namespace $TARGET_NAMESPACE--all;
kubectl get secret --namespace default --output yaml \
    | sed "s/namespace: $SOURCE_NAMESPACE/namespace: $TARGET_NAMESPACE/" \
    | kubectl apply --namespace $TARGET_NAMESPACE --filename -;

0

yqYAML dosyalarını düzenlemek için yararlı bir komut satırı aracıdır. Bunu elde etmek için diğer cevaplarla birlikte kullandım:

kubectl get secret <SECRET> -n <SOURCE_NAMESPACE> -o yaml | yq write - 'metadata.namespace' <TARGET_NAMESPACE> | kubectl apply -n <TARGET_NAMESPACE> -f -

0

GoDaddy'nin Kubernetes Harici Sırlarını kullanmayı da düşünebilirsiniz ! sırlarınızı AWS Secret Manager'da (ASM) depolayacağınız ve GoDaddy'nin gizli denetleyicisi sırları otomatik olarak oluşturacaktır. Dahası, ASM ve K8S kümesi arasında senkronizasyon olacaktır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.