Kubernetes’de Secret ve ConfigMap Senkronizasyon’u

Photo by Kumiko SHIMIZU on Unsplash

Selamlar,

Bu gün k8s için neden secretler’i senkronize eden bir operator yazdığımı, nasıl yazdığımı anlatmaya çalışacağım.

Kubernetes’de bazı durumlarda secretleri veya ConfigMap’leri başka namespace’lerde de kullanmak isteyebiliyoruz. Kubernetes’de secretler ve ConfigMap’ler namespace bazlı olduğu için farklı bir namespace’den kullanamıyoruz. Kullanmak icin ise secreti veya configmap’i kullanacağımız namespace e kopyalamamız lazım. Birden fazla namespace veya secret olduğunda bu iş baya bir zor olabiliyor. Bende bunun için python ve kopf ile küçük bir Kubernetes operatör yazdım. Projenin adı Synator, GitHub’da open source olarak paylaştım buradan inceleyebilirsiniz.

İlk kez k8s operatör yazacağım için kolay bir framework seçmek istedim. Kopf bu iş için biçilmiş kaftan. Helm dokümantasyonu çok iyi hem kullanımı çok kolay. Kubernetes API’si ile iletişime geçmek için ise Kubernetes Python Client’ini kullandım.

Synator’u k8s’de kullanmak baya kolay tek yapmamız gereken deploy.yml’i Kubernetes’e eklemek.

kubectl apply -f https://github.com/TheYkk/synator/raw/master/deploy.yml

Bu yaml’ın içinde ServiceAccount, ClusterRole ve Deployment var. ServiceAccount ve ClusterRole Kubernetes API ile iletişime geçmek için gerekiyor bunlar bize token üretiyor ve pod’un içine direkt inject ediyor.

Synator’u deploy ettikten sonra istediğimiz secret veya ConfigMap’e synator/sync=yes annotation ekleyerek senkronizasyon işlemini başlatabiliriz.

Eğer sadece spesifik namespace’lere kopyalamak istiyorsak synator/include-namespaces=’namespace1,namespace2' annotation ile yapabiliriz.

Eğer spesifik namespace’lere kopyalanmasını istemiyorsak synator/exclude-namespaces=’kube-system,kube-node-lease’ annotation’u kullanabiliriz.

Son olarak eklediğim özellikten de bahsetmek istiyorum. Secret veya ConfigMap yenilendiğinde pod’un restart edilmesi.

Bunu yapmak için pod templatin’e synator/reload: “secret:example” eklememiz yeterli.

Yazımı okuduğunuz için teşekkür ederim. İyi çalışmalar.

--

--