ConfigMaps & Secrets
ConfigMap va Secret'lar
Oshxonada retsept kartochkasi ikki qismdan iborat bo'lishi mumkin: oddiy INGREDIENT MIQDORLARI (masalan, "2 osh qoshiq tuz") — buni istalgan oshpaz ko'rishi mumkin, va oilaviy MAXFIY sous retsepti — bu QULFLANGAN seyfda saqlanadi, faqat kerak bo'lganda, EHTIYOTKORLIK bilan ishlatiladi. Kubernetes'da ConfigMap — ochiq konfiguratsiya (masalan, log darajasi), Secret esa maxfiy ma'lumot (parol, token) uchun — ikkalasi ham kodni o'zgartirmasdan, Pod'ga TASHQARIDAN kiritiladi.
package main
import "fmt"
type ConfigMap struct {
Name string
Data map[string]string
}
type Secret struct {
Name string
Data map[string]string
}
// Redacted — Secret qiymatlarini hech qachon ochiq chop ETMASLIK uchun
func (s *Secret) Redacted() map[string]string {
masked := make(map[string]string)
for k := range s.Data {
masked[k] = "******"
}
return masked
}
type Pod struct {
Name string
Env map[string]string
}
// InjectConfig — ConfigMap qiymatlarini pod'ning muhit o'zgaruvchilariga QO'SHADI
func (p *Pod) InjectConfig(cm *ConfigMap) {
if p.Env == nil {
p.Env = make(map[string]string)
}
for k, v := range cm.Data {
p.Env[k] = v
}
}
func main() {
cm := &ConfigMap{Name: "app-config", Data: map[string]string{"LOG_LEVEL": "debug"}}
secret := &Secret{Name: "db-secret", Data: map[string]string{"DB_PASSWORD": "juda-maxfiy"}}
pod := &Pod{Name: "web-1"}
pod.InjectConfig(cm)
fmt.Println(pod.Env["LOG_LEVEL"])
fmt.Println(secret.Redacted()["DB_PASSWORD"])
}ConfigMap va Secret — ikkalasi ham struktura jihatidan BIR XIL (map[string]string), lekin ULARGA MUNOSABAT butunlay boshqacha: ConfigMap qiymatlarini erkin chop etish mumkin, Secret qiymatlarini esa HECH QACHON (log'da, konsolda, xato xabarida) ochiq ko'rsatish TAVSIYA etilmaydi — shuning uchun Redacted() metodi haqiqiy qiymatlar o'rniga ****** qaytaradi.
InjectConfig — "Configuration Management: Loading Config" darsida ko'rgan g'oyaning davomi: sozlamalar kodga QOTIB QOLGAN ("hardcoded") emas, balki TASHQARIDAN, alohida ob'ekt sifatida KIRITILADI. Bu Pod'ning ISHLASH mantig'ini o'zgartirmasdan, xuddi shu Pod'ni turli konfiguratsiya (masalan, staging va production uchun turlicha LOG_LEVEL) bilan qayta ishlatish imkonini beradi.
>_ Exercise
Pod'ga Secret qiymatlarini ham muhit o'zgaruvchisi sifatida kiritish imkonini qo'shing.
- •InjectSecret(s *Secret) metodini yozing: InjectConfig'ga o'xshab, lekin Secret'ning HAQIQIY qiymatlarini p.Env'ga yozing
- •Pod'ga ham ConfigMap, ham Secret'ni inject qiling
- •pod.Env["LOG_LEVEL"], pod.Env["DB_PASSWORD"] va secret.Redacted()["DB_PASSWORD"] ni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
ConfigMap va Secret konfiguratsiyani koddan ajratib, Pod'ga tashqaridan kiritadi; farqi — Secret qiymatlari hech qachon ochiq chop etilmasligi kerak, shu bois alohida, maskalangan ko'rinishda (Redacted) taqdim etiladi.
NEXT UP
Health Checks: Liveness & Readiness
$ go run main.go
Kodingizni ishga tushiring