• Konteynerlar va Kubernetes bilan asoslardan boshlang: mavzuni o‘rganish uchun maxsus tajriba talab qilinmaydi. • O‘z klasterlaringizni ishga tushiring yoki Amazon, Google va boshqalardan boshqariladigan Kubernetes xizmatini tanlang. • Konteynerning ishlash davri va resurslar sarfini boshqarish uchun Kubernetes’dan foydalaning. • Klasterlarni xarajat, unumdorlik, chidamlilik, quvvat va masshtablilik asosida optimallashtiring. • Ilovalaringizni ishlab chiqish, sinab ko'rish va joylashtirish uchun eng yaxshi vositalarni o'rganing. • Xavfsizlik va nazoratni ta'minlash uchun joriy sanoat amaliyotlaridan foydalaning. • Rivojlanish guruhlari yanada moslashuvchan, tez va samarali harakat qilishlari uchun DevOps tamoyillarini butun kompaniyangizda tatbiq eting.
Kitob kim uchun?
Kitob serverlar, ilovalar va xizmatlar uchun mas'ul bo'lgan ma'muriyat bo'limlari xodimlari, shuningdek, yangi bulut xizmatlarini yaratish yoki mavjud ilovalarni Kubernetes va bulutga ko'chirish bilan shug'ullanadigan ishlab chiquvchilar uchun eng dolzarbdir. Xavotir olmang, Kubernetes yoki konteynerlar bilan qanday ishlashni bilishingiz shart emas - biz sizga hamma narsani o'rgatamiz.
Tajribali Kubernetes foydalanuvchilari, shuningdek, RBAC, uzluksiz joylashtirish, nozik ma'lumotlarni boshqarish va kuzatuvchanlik kabi mavzularni chuqur yoritish bilan juda ko'p qiymat topadilar. Umid qilamizki, kitob sahifalarida sizning mahoratingiz va tajribangizdan qat'i nazar, siz uchun qiziqarli narsalarni albatta o'z ichiga oladi.
Kitob qanday savollarga javob beradi?
Kitobni rejalashtirish va yozishda biz bulut texnologiyasi va Kubernetesni yuzlab odamlar bilan muhokama qildik, soha rahbarlari va mutaxassislari, shuningdek, yangi boshlanuvchilar bilan suhbatlashdik. Quyida ular ushbu nashrda javob olishni istagan savollar tanlangan.
- “Meni nima uchun bu texnologiyaga vaqt sarflashingiz kerakligi qiziqtiradi. Bu menga va jamoamga qanday muammolarni hal qilishga yordam beradi?”
- "Kubernetes qiziqarli ko'rinadi, lekin kirish uchun juda yuqori to'siq bor. Oddiy misolni tayyorlash qiyin emas, ammo keyingi boshqaruv va disk raskadrovka juda qiyin. Biz odamlar haqiqiy dunyoda Kubernetes klasterlarini qanday boshqarishi va qanday muammolarga duch kelishimiz haqida ishonchli maslahat olmoqchimiz."
- “Subyektiv maslahat foydali bo'lardi. Kubernetes ekotizimi yangi jamoalarga tanlash uchun juda ko'p imkoniyatlarni beradi. Xuddi shu narsani qilishning bir necha yo'li mavjud bo'lsa, qaysi biri eng yaxshi ekanligini qanday bilasiz? Qanday qilib tanlov qilish kerak?
Va, ehtimol, barcha savollarning eng muhimi:
- "Kubernetes-dan kompaniyamga xalaqit bermasdan qanday foydalanishim mumkin?"
Ko'chirma. Konfiguratsiya va maxfiy ob'ektlar
Kubernetes ilovasining mantig'ini uning konfiguratsiyasidan (ya'ni vaqt o'tishi bilan o'zgarishi mumkin bo'lgan har qanday qiymatlar yoki sozlamalardan) ajratish qobiliyati juda foydali. Konfiguratsiya qiymatlari odatda atrof-muhitga xos sozlamalar, uchinchi tomon xizmatining DNS manzillari va autentifikatsiya hisob ma'lumotlarini o'z ichiga oladi.
Albatta, bularning barchasi to'g'ridan-to'g'ri kodga kiritilishi mumkin, ammo bu yondashuv etarlicha moslashuvchan emas. Misol uchun, konfiguratsiya qiymatini o'zgartirish kodingizni qayta qurish va joylashtirishni talab qiladi. Konfiguratsiyani koddan ajratish va uni fayl yoki muhit o'zgaruvchilaridan o'qish yaxshiroq yechim bo'ladi.
Kubernetes konfiguratsiyani boshqarishning bir necha xil usullarini taqdim etadi. Birinchidan, siz qiymatlarni podrapper spetsifikatsiyasida ko'rsatilgan muhit o'zgaruvchilari orqali ilovaga o'tkazishingiz mumkin (qarang: “Atrof-muhit o'zgaruvchilari” 192-bet). Ikkinchidan, konfiguratsiya ma'lumotlari ConfigMap va Secret ob'ektlari yordamida bevosita Kubernetesda saqlanishi mumkin.
Ushbu bobda biz ushbu ob'ektlarni batafsil ko'rib chiqamiz va demo ilova yordamida konfiguratsiya va nozik ma'lumotlarni boshqarishning ba'zi amaliy yondashuvlarini ko'rib chiqamiz.
Konfiguratsiya o'zgarganda pod qobiqlarini yangilash
Tasavvur qiling-a, sizning klasteringizda joylashtirishingiz bor va siz uning ConfigMap-dagi ba'zi qiymatlarni o'zgartirmoqchisiz. Agar siz Helm diagrammasidan foydalansangiz (102-betdagi “Helm: Kubernetes uchun paketlar menejeri” ga qarang), siz avtomatik ravishda konfiguratsiya o‘zgarishini aniqlab olishingiz va bitta hiyla-nayrang bilan pod qobiqlaringizni qayta yuklashingiz mumkin. Joylashtirish spetsifikatsiyasiga quyidagi izohni qo'shing:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
| sha256sum }}
Joylashtirish shablonida endi konfiguratsiya parametrlarining nazorat yig'indisi mavjud: agar parametrlar o'zgartirilsa, yig'indi yangilanadi. Agar siz rulni yangilashni boshlasangiz, Helm joylashtirish spetsifikatsiyasi o'zgarganligini aniqlaydi va barcha pod qobiqlarini qayta ishga tushiradi.
Kubernetesdagi maxfiy maʼlumotlar
Biz allaqachon bilamizki, ConfigMap ob'ekti klasterdagi konfiguratsiya ma'lumotlarini saqlash va ularga kirish uchun moslashuvchan mexanizmni ta'minlaydi. Biroq, ko'pgina ilovalarda parollar yoki API kalitlari kabi nozik va sezgir ma'lumotlar mavjud. U ConfigMap-da ham saqlanishi mumkin, ammo bu yechim ideal emas.
Buning o'rniga, Kubernetes nozik ma'lumotlarni saqlash uchun mo'ljallangan maxsus turdagi ob'ektni taklif qiladi: Secret. Keyinchalik, ushbu ob'ektni bizning demo ilovamizda qanday ishlatish mumkinligi haqidagi misolni ko'rib chiqamiz.
Boshlash uchun Maxfiy ob'ekt uchun Kubernetes manifestini ko'rib chiqing (hello-secret-env/k8s/secret.yaml ga qarang):
apiVersion: v1
kind: Secret
metadata:
name: demo-secret
stringData:
magicWord: xyzzy
Bu misolda magicWord shaxsiy kaliti xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Xyzzy so'zi odatda kompyuterlar dunyosida juda foydali. ConfigMap-ga o'xshab, siz maxfiy ob'ektda bir nechta kalit va qiymatlarni saqlashingiz mumkin. Bu erda soddalik uchun biz faqat bitta kalit-qiymat juftligidan foydalanamiz.
Maxfiy ob'ektlarni muhit o'zgaruvchilari sifatida ishlatish
ConfigMap kabi, Secret ob'ekti konteynerda muhit o'zgaruvchilari yoki uning diskidagi fayl sifatida mavjud bo'lishi mumkin. Quyidagi misolda biz Secret qiymatiga muhit o'zgaruvchisini tayinlaymiz:
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-secret-env
ports:
- containerPort: 8888
env:
- name: GREETING
valueFrom:
secretKeyRef:
name: demo-secret
key: magicWord
Manifestlarni qo'llash uchun demo omborida quyidagi buyruqni bajaring:
kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created
Avvalgidek, brauzeringizda natijani ko'rish uchun mahalliy portni joylashtirishga yo'naltiring:
kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888
Manzil ochilganda
The magic word is "xyzzy"
Fayllarga maxfiy ob'ektlarni yozish
Ushbu misolda biz maxfiy ob'ektni konteynerga fayl sifatida biriktiramiz. Kod demo omborining salom-secret-file papkasida joylashgan.
Secretni fayl sifatida ulash uchun biz quyidagi joylashtirishdan foydalanamiz:
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-secret-file
ports:
- containerPort: 8888
volumeMounts:
- name: demo-secret-volume
mountPath: "/secrets/"
readOnly: true
volumes:
- name: demo-secret-volume
secret:
secretName: demo-secret
"ConfigMap ob'ektlaridan konfiguratsiya fayllarini yaratish" bo'limida bo'lgani kabi, p. 240, biz hajmni yaratamiz (bu holda demo-secret-volume) va uni spetsifikatsiyaning volumeMounts bo'limidagi konteynerga o'rnatamiz. mountPath maydoni /secrets, shuning uchun Kubernetes maxfiy ob'ektda belgilangan har bir kalit/qiymat juftligi uchun ushbu jildda bitta fayl yaratadi.
Bizning misolimizda biz magicWord deb nomlangan faqat bitta kalit-qiymat juftligini aniqladik, shuning uchun manifest konteynerdagi nozik ma'lumotlar bilan faqat o'qish uchun /secrets/magicWord faylini yaratadi.
Agar siz ushbu manifestni avvalgi misol bilan bir xil tarzda qo'llasangiz, xuddi shunday natijani olishingiz kerak:
The magic word is "xyzzy"
Yashirin ob'ektlarni o'qish
Oldingi bo'limda biz ConfigMap tarkibini ko'rsatish uchun kubectl describe buyrug'idan foydalanganmiz. Xuddi shu narsani Secret bilan qilish mumkinmi?
kubectl describe secret/demo-secret
Name: demo-secret
Namespace: default
Labels: <none>
Annotations:
Type: Opaque
Data
====
magicWord: 5 bytes
E'tibor bering, ma'lumotlarning o'zi ko'rsatilmaydi. Kubernetes-dagi maxfiy ob'ektlar Opaque turiga ega, ya'ni ularning mazmuni kubectl tavsifida chiqish, jurnal yozuvlari yoki terminalda ko'rsatilmaydi, bu esa tasodifiy nozik ma'lumotlarni oshkor qilishni imkonsiz qiladi.
Nozik ma'lumotlarning kodlangan YAML versiyasini ko'rish uchun kubectl get buyrug'idan foydalaning:
kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque
base64
Bizning asl qiymatimizdan butunlay farq qiladigan eHl6enk= nima? Bu, aslida, base64 kodlashda taqdim etilgan maxfiy ob'ekt. Base64 - bu ixtiyoriy ikkilik ma'lumotlarni belgilar qatori sifatida kodlash sxemasi.
Maxfiy ma'lumotlar ikkilik bo'lishi va chiqarilmasligi mumkinligi sababli (TLS shifrlash kalitida bo'lgani kabi), maxfiy ob'ektlar har doim base64 formatida saqlanadi.
BeHl6enk= matni xyzzy maxfiy so'zimizning base64 kodlangan versiyasidir. Buni terminalda base64 —decode buyrug'ini ishga tushirish orqali tekshirishingiz mumkin:
echo "eHl6enk=" | base64 --decode
xyzzy
Shunday qilib, Kubernetes sizni terminalda yoki jurnal fayllarida maxfiy ma'lumotlarni tasodifan chiqarishdan himoya qilsa-da, agar siz ma'lum bir nom maydonidagi maxfiy ob'ektlarda o'qish ruxsatiga ega bo'lsangiz, bu ma'lumotlar bazaviy 64-sonli dekodlanishi va keyinchalik dekodlanishi mumkin.
Agar siz base64-ni ba'zi matnlarni kodlashingiz kerak bo'lsa (masalan, uni sirga qo'yish uchun), argumentlarsiz base64 buyrug'idan foydalaning:
echo xyzzy | base64
eHl6enkK
Maxfiy ob'ektlarga kirish
Maxfiy ob'ektlarni kim o'qiy oladi va tahrirlay oladi? Bu kirishni boshqarish mexanizmi bo'lgan RBAC tomonidan aniqlanadi (biz buni 258-betdagi "Rolga asoslangan kirishni boshqarishga kirish" kichik bo'limida batafsil muhokama qilamiz). Agar siz RBAC-ga ega bo'lmagan yoki yoqilmagan klasterda ishlayotgan bo'lsangiz, barcha maxfiy ob'ektlaringiz har qanday foydalanuvchilar va konteynerlar uchun mavjud bo'ladi (keyinchalik sizda RBACsiz ishlab chiqarish klasterlari bo'lmasligi kerakligini tushuntiramiz).
Passiv ma'lumotlarni shifrlash
Kubernetes o'zining barcha ma'lumotlarini saqlaydigan etcd ma'lumotlar bazasiga kirish huquqiga ega bo'lganlar haqida nima deyish mumkin? API orqali maxfiy ob'ektlarni o'qishga ruxsatisiz ular nozik ma'lumotlarni o'qiy oladimi?
1.7 versiyasidan boshlab Kubernetes passiv ma'lumotlarni shifrlashni qo'llab-quvvatlaydi. Bu shuni anglatadiki, etcd ichidagi maxfiy ma'lumotlar diskda shifrlangan holda saqlanadi va hatto ma'lumotlar bazasiga to'g'ridan-to'g'ri kirish huquqiga ega bo'lganlar ham o'qib bo'lmaydi. Uning shifrini ochish uchun sizga faqat Kubernetes API serverida bo'lgan kalit kerak bo'ladi. To'g'ri sozlangan klasterda passiv shifrlash yoqilgan bo'lishi kerak.
Klasteringizda passiv shifrlash shu tarzda ishlashini tekshirishingiz mumkin:
kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
--experimental-encryption-provider-config=...
Agar tajriba-shifrlash-provayder-konfiguratsiya bayrog'ini ko'rmasangiz, passiv shifrlash yoqilmagan. Google Kubernetes Engine yoki boshqa Kubernetes boshqaruv xizmatlaridan foydalanganda maʼlumotlaringiz boshqa mexanizm yordamida shifrlanadi, shuning uchun bayroq koʻrinmaydi. etcd kontenti shifrlanganligini bilish uchun Kubernetes sotuvchisi bilan tekshiring.
Maxfiy ma'lumotlarni saqlash
Ba'zi Kubernetes resurslari mavjud, ular hech qachon klasterdan olib tashlanmasligi kerak, masalan, o'ta sezgir Secret ob'ektlari. Helm menejeri tomonidan taqdim etilgan izoh yordamida resursni o'chirishdan himoya qilishingiz mumkin:
kind: Secret
metadata:
annotations:
"helm.sh/resource-policy": keep
Yashirin ob'ektlarni boshqarish strategiyalari
Oldingi bo'limdagi misolda, maxfiy ma'lumotlar klasterda saqlanganidan so'ng darhol ruxsatsiz kirishdan himoyalangan. Lekin manifest fayllarda ular oddiy matn sifatida saqlangan.
Hech qachon maxfiy ma'lumotlarni versiya nazorati ostidagi fayllarga joylashtirmasligingiz kerak. Ushbu ma'lumotni Kubernetes klasteringizga qo'llashdan oldin qanday qilib xavfsiz boshqarishingiz va saqlashingiz mumkin?
Ilovalaringizdagi maxfiy ma'lumotlarni qayta ishlash uchun har qanday vosita yoki strategiyani tanlashingiz mumkin, ammo baribir kamida quyidagi savollarga javob berishingiz kerak bo'ladi.
- Maxfiy ma'lumotlarga kirish imkoni bo'lishi uchun ularni qayerda saqlash kerak?
- Faol ilovalaringiz uchun maxfiy ma'lumotlarni qanday ochish mumkin?
- Maxfiy ma'lumotlarni almashtirganingizda yoki tahrirlaganingizda ilovalaringizga nima bo'lishi kerak?
Mualliflar haqida
Jon Arundel kompyuter sanoatida 30 yillik tajribaga ega maslahatchi. U bir nechta kitoblar yozgan va turli mamlakatlardagi ko'plab kompaniyalar bilan ishlaydi, ularga bulutli mahalliy infratuzilma va Kubernetes bo'yicha maslahat beradi. U bo'sh vaqtlarida serfingni yaxshi ko'radi, to'pponchadan yaxshi otadi va havaskor sifatida pianino chaladi. Angliyaning Kornuoll shahridagi ertakdagi kottejda yashaydi.
Jastin Domingus — Kubernetes va bulutli texnologiyalar bilan DevOps muhitida ishlaydigan tizim boshqaruvi muhandisi. U ochiq havoda vaqt o'tkazishni, qahva ichishni, qisqichbaqa qilishni va kompyuterda o'tirishni yaxshi ko'radi. Vashingtonning Sietl shahrida ajoyib mushuk va undan ham ajoyib xotini va eng yaxshi do'sti Adrienne bilan yashaydi.
» Kitob haqida batafsil ma’lumotni quyidagi manzildan olishingiz mumkin
»
»
Xabrozhiteley uchun kupondan foydalangan holda 25% chegirma - Kubernetes
Kitobning qog'oz versiyasi uchun to'lov amalga oshirilgandan so'ng, elektron kitob elektron pochta orqali yuboriladi.
Manba: www.habr.com