GoDasturchi
ConfigMaps & Secrets

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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