Tempah "Kubernetes untuk DevOps"

Tempah "Kubernetes untuk DevOps" Hello, penduduk Khabro! Kubernetes ialah salah satu elemen utama ekosistem awan moden. Teknologi ini menyediakan kebolehpercayaan, skalabiliti dan daya tahan kepada virtualisasi kontena. John Arundel dan Justin Domingus bercakap tentang ekosistem Kubernetes dan memperkenalkan penyelesaian yang terbukti kepada masalah harian. Langkah demi langkah, anda akan membina aplikasi asli awan anda sendiri dan mencipta infrastruktur untuk menyokongnya, menyediakan persekitaran pembangunan dan saluran paip penggunaan berterusan yang akan membantu anda semasa anda bekerja pada aplikasi anda yang seterusnya.

• Bermula dengan bekas dan Kubernetes dari asas: tiada pengalaman khas diperlukan untuk mempelajari topik tersebut. • Jalankan kluster anda sendiri atau pilih perkhidmatan Kubernetes terurus daripada Amazon, Google, dll. • Gunakan Kubernetes untuk mengurus kitaran hayat kontena dan penggunaan sumber. • Optimumkan kelompok berdasarkan kos, prestasi, daya tahan, kuasa dan kebolehskalaan. • Ketahui alatan terbaik untuk membangunkan, menguji dan menggunakan aplikasi anda. • Memanfaatkan amalan industri semasa untuk memastikan keselamatan dan kawalan. • Laksanakan prinsip DevOps di seluruh syarikat anda supaya pasukan pembangunan boleh bertindak dengan lebih fleksibel, cepat dan cekap.

Buku itu untuk siapa?

Buku ini paling relevan untuk pekerja jabatan pentadbiran yang bertanggungjawab untuk pelayan, aplikasi dan perkhidmatan, serta untuk pembangun yang terlibat sama ada dalam membina perkhidmatan awan baharu atau memindahkan aplikasi sedia ada ke Kubernetes dan awan. Jangan risau, anda tidak perlu tahu cara bekerja dengan Kubernetes atau bekas - kami akan mengajar anda segala-galanya.

Pengguna Kubernetes yang berpengalaman juga akan mendapati banyak nilai, dengan liputan mendalam tentang topik seperti RBAC, penggunaan berterusan, pengurusan data sensitif dan kebolehmerhatian. Kami berharap halaman buku itu pasti mengandungi sesuatu yang menarik untuk anda, tanpa mengira kemahiran dan pengalaman anda.

Apakah soalan yang dijawab oleh buku itu?

Semasa merancang dan menulis buku, kami membincangkan teknologi awan dan Kubernetes dengan ratusan orang, bercakap dengan pemimpin industri dan pakar serta orang baru yang lengkap. Di bawah ialah soalan terpilih yang mereka ingin lihat dijawab dalam penerbitan ini.

  • “Saya berminat mengapa anda perlu meluangkan masa pada teknologi ini. Apakah masalah yang akan membantu saya dan pasukan saya selesaikan?”
  • “Kubernetes nampak menarik, tetapi mempunyai halangan yang agak tinggi untuk masuk. Menyediakan contoh mudah tidak sukar, tetapi pentadbiran dan penyahpepijatan selanjutnya adalah menakutkan. Kami ingin mendapatkan nasihat yang boleh dipercayai tentang cara orang mengurus kluster Kubernetes di dunia nyata dan masalah yang mungkin kami hadapi."
  • “Nasihat subjektif akan membantu. Ekosistem Kubernetes memberikan pasukan baharu terlalu banyak pilihan untuk dipilih. Apabila terdapat beberapa cara untuk melakukan perkara yang sama, bagaimana anda tahu yang mana satu yang terbaik? Bagaimana untuk membuat pilihan?

Dan mungkin yang paling penting dari semua soalan:

  • “Bagaimana saya boleh menggunakan Kubernetes tanpa mengganggu syarikat saya?”

Petikan. Konfigurasi dan objek Rahsia

Keupayaan untuk memisahkan logik aplikasi Kubernetes daripada konfigurasinya (iaitu, daripada sebarang nilai atau tetapan yang mungkin berubah dari semasa ke semasa) sangat berguna. Nilai konfigurasi biasanya termasuk tetapan khusus persekitaran, alamat DNS perkhidmatan pihak ketiga dan bukti kelayakan pengesahan.

Sudah tentu, semua ini boleh dimasukkan terus ke dalam kod, tetapi pendekatan ini tidak cukup fleksibel. Sebagai contoh, menukar nilai konfigurasi akan memerlukan anda membina dan menggunakan kod anda sekali lagi. Penyelesaian yang lebih baik ialah memisahkan konfigurasi daripada kod dan membacanya daripada fail atau pembolehubah persekitaran.

Kubernetes menyediakan beberapa cara berbeza untuk mengurus konfigurasi. Mula-mula, anda boleh menghantar nilai kepada aplikasi melalui pembolehubah persekitaran yang dinyatakan dalam spesifikasi pembungkus pod (lihat “Pembolehubah Persekitaran” pada halaman 192). Kedua, data konfigurasi boleh disimpan terus dalam Kubernetes menggunakan ConfigMap dan objek Rahsia.

Dalam bab ini, kami meneroka objek ini secara terperinci dan melihat beberapa pendekatan praktikal untuk mengurus konfigurasi dan data sensitif menggunakan aplikasi demo.

Mengemas kini cangkerang pod apabila konfigurasi berubah

Bayangkan anda mempunyai penempatan dalam kluster anda dan anda ingin menukar beberapa nilai dalam ConfigMapnya. Jika anda menggunakan carta Helm (lihat “Helm: Pengurus Pakej untuk Kubernetes” pada halaman 102), anda boleh mengesan perubahan konfigurasi secara automatik dan memuatkan semula cangkerang pod anda dalam satu helah yang kemas. Tambahkan anotasi berikut pada spesifikasi penggunaan anda:

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

Templat penggunaan kini mengandungi jumlah semak parameter konfigurasi: jika parameter diubah, jumlah akan dikemas kini. Jika anda menjalankan peningkatan helm, Helm akan mengesan bahawa spesifikasi penggunaan telah berubah dan akan memulakan semula semua shell pod.

Data sensitif dalam Kubernetes

Kita sudah tahu bahawa objek ConfigMap menyediakan mekanisme yang fleksibel untuk menyimpan dan mengakses data konfigurasi dalam kelompok. Walau bagaimanapun, kebanyakan aplikasi mempunyai maklumat yang sensitif dan sensitif, seperti kata laluan atau kunci API. Ia juga boleh disimpan dalam ConfigMap, tetapi penyelesaian ini tidak sesuai.

Sebaliknya, Kubernetes menawarkan jenis objek khas yang direka untuk menyimpan data sensitif: Rahsia. Seterusnya, mari kita lihat contoh bagaimana objek ini boleh digunakan dalam aplikasi demo kami.

Untuk bermula, lihat manifes Kubernetes untuk objek Rahsia (lihat hello-secret-env/k8s/secret.yaml):

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

Dalam contoh ini, kunci persendirian magicWord ialah xyzzy (en.wikipedia.org/wiki/Xyzzy_(komputer)). Perkataan xyzzy umumnya sangat berguna dalam dunia komputer. Sama seperti ConfigMap, anda boleh menyimpan berbilang kunci dan nilai dalam objek Rahsia. Di sini, untuk kesederhanaan, kami hanya menggunakan satu pasangan nilai kunci.

Menggunakan Objek Rahsia sebagai Pembolehubah Persekitaran

Seperti ConfigMap, objek Rahsia boleh disediakan dalam bekas sebagai pembolehubah persekitaran atau sebagai fail pada cakeranya. Dalam contoh berikut, kami akan menetapkan pembolehubah persekitaran kepada nilai daripada Rahsia:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

Jalankan arahan berikut dalam repositori demo untuk menggunakan manifes:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

Seperti sebelum ini, majukan port tempatan ke penempatan untuk melihat hasilnya dalam penyemak imbas anda:

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

Apabila membuka alamat localhost:9999/ anda sepatutnya melihat perkara berikut:

The magic word is "xyzzy"

Menulis Objek Rahsia ke Fail

Dalam contoh ini, kami akan melampirkan objek Rahsia pada bekas sebagai fail. Kod tersebut terletak dalam folder hello-secret-file repositori demo.

Untuk menyambungkan Rahsia sebagai fail, kami akan menggunakan penempatan berikut:

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

Seperti dalam subseksyen "Mencipta fail konfigurasi daripada objek ConfigMap" pada ms. 240, kami mencipta volum (dalam kes ini demo-secret-volume) dan lekapkannya pada bekas dalam bahagian volumeMounts spesifikasi. Medan mountPath ialah /secrets, jadi Kubernetes akan mencipta satu fail dalam folder ini untuk setiap pasangan kunci/nilai yang ditakrifkan dalam objek Rahsia.

Dalam contoh kami, kami menentukan hanya satu pasangan nilai kunci yang dipanggil magicWord, jadi manifes akan mencipta satu fail baca sahaja /rahsia/magicWord dengan data sensitif dalam bekas.

Jika anda menggunakan manifes ini dengan cara yang sama seperti contoh sebelumnya, anda seharusnya mendapat hasil yang sama:

The magic word is "xyzzy"

Membaca Objek Rahsia

Dalam bahagian sebelumnya, kami menggunakan perintah kubectl describe untuk memaparkan kandungan ConfigMap. Bolehkah perkara yang sama dilakukan dengan Rahsia?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

Sila ambil perhatian bahawa data itu sendiri tidak dipaparkan. Objek rahsia dalam Kubernetes adalah jenis Legap, yang bermaksud kandungannya tidak ditunjukkan dalam kubectl menerangkan output, entri log atau terminal, menjadikannya mustahil untuk mendedahkan maklumat sensitif secara tidak sengaja.

Untuk melihat versi YAML yang dikodkan bagi data sensitif, gunakan perintah kubectl get:

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

Apakah eHl6enk=, berbeza sama sekali daripada nilai asal kami? Ini sebenarnya objek Rahsia, diwakili dalam pengekodan base64. Base64 ialah skema untuk mengekodkan data binari sewenang-wenangnya sebagai rentetan aksara.

Oleh kerana maklumat sensitif mungkin binari dan bukan output (seperti halnya dengan kunci penyulitan TLS), objek Rahsia sentiasa disimpan dalam format base64.

Teks beHl6enk= ialah versi dikodkan base64 bagi perkataan rahsia xyzzy kami. Anda boleh mengesahkan ini dengan menjalankan perintah base64 —decode dalam terminal:

echo "eHl6enk=" | base64 --decode
xyzzy

Jadi, sementara Kubernetes melindungi anda daripada mengeluarkan data sensitif secara tidak sengaja dalam terminal atau fail log, jika anda telah membaca kebenaran pada objek Rahsia dalam ruang nama tertentu, data tersebut boleh dijadikan asas64 dan kemudiannya dinyahkodkan.

Jika anda perlu mengekod base64 beberapa teks (contohnya, untuk meletakkannya dalam Rahsia), gunakan arahan base64 tanpa hujah:

echo xyzzy | base64
eHl6enkK

Mengakses Objek Rahsia

Siapa yang boleh membaca dan mengedit objek Rahsia? Ini ditentukan oleh RBAC, mekanisme kawalan akses (kami akan membincangkannya secara terperinci dalam subseksyen "Pengenalan kepada Kawalan Akses Berasaskan Peranan" di halaman 258). Jika anda menjalankan kluster yang tidak mempunyai RBAC atau tidak didayakan, semua objek Rahsia anda tersedia kepada mana-mana pengguna dan bekas (kami akan menerangkan kemudian bahawa anda tidak sepatutnya mempunyai sebarang kluster pengeluaran tanpa RBAC).

Penyulitan data pasif

Bagaimana pula dengan mereka yang mempunyai akses kepada pangkalan data etcd di mana Kubernetes menyimpan semua maklumatnya? Bolehkah mereka membaca data sensitif tanpa kebenaran untuk membaca objek Rahsia melalui API?

Sejak versi 1.7, Kubernetes menyokong penyulitan data pasif. Ini bermakna bahawa maklumat sensitif di dalam etcd disimpan disulitkan pada cakera dan tidak boleh dibaca walaupun oleh mereka yang mempunyai akses terus ke pangkalan data. Untuk menyahsulitnya, anda memerlukan kunci yang hanya dimiliki oleh pelayan API Kubernetes. Dalam kelompok yang dikonfigurasikan dengan betul, penyulitan pasif harus didayakan.

Anda boleh menyemak sama ada penyulitan pasif berfungsi dalam kluster anda dengan cara ini:

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

Jika anda tidak melihat bendera eksperimen-penyulitan-penyedia-config, penyulitan pasif tidak didayakan. Apabila menggunakan Enjin Google Kubernetes atau perkhidmatan pengurusan Kubernetes lain, data anda disulitkan menggunakan mekanisme yang berbeza, jadi bendera tidak akan hadir. Semak dengan vendor Kubernetes anda untuk melihat sama ada kandungan etcd disulitkan.

Menyimpan data sulit

Terdapat beberapa sumber Kubernetes yang tidak boleh dialih keluar daripada kluster, seperti objek Rahsia yang sangat sensitif. Anda boleh melindungi sumber daripada dipadamkan menggunakan anotasi yang disediakan oleh pengurus Helm:

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

Strategi Pengurusan Objek Rahsia

Dalam contoh daripada bahagian sebelumnya, data sensitif dilindungi daripada akses tanpa kebenaran serta-merta selepas disimpan dalam kelompok. Tetapi dalam fail manifes mereka disimpan sebagai teks biasa.

Anda tidak boleh meletakkan maklumat sulit dalam fail yang berada dalam kawalan versi. Bagaimanakah anda boleh mengurus dan menyimpan maklumat ini dengan selamat sebelum menggunakannya pada kelompok Kubernetes anda?

Anda boleh memilih sebarang alat atau strategi untuk mengendalikan data sensitif dalam aplikasi anda, tetapi anda masih perlu menjawab sekurang-kurangnya soalan berikut.

  • Di manakah data sensitif harus disimpan supaya ia sangat boleh diakses?
  • Bagaimana untuk menjadikan data sensitif boleh diakses oleh aplikasi aktif anda?
  • Apakah yang sepatutnya berlaku kepada aplikasi anda apabila anda menggantikan atau mengedit data sensitif?

Mengenai pengarang

John Arundel adalah perunding yang berpengalaman selama 30 tahun dalam industri komputer. Beliau telah menulis beberapa buku dan bekerja dengan banyak syarikat dari negara yang berbeza, menasihati mereka tentang infrastruktur asli awan dan Kubernetes. Pada masa lapang, dia gemar melayari, seorang penembak pistol yang baik, dan bermain piano sebagai seorang amatur. Tinggal di kotej dongeng di Cornwall, England.

Justin Dominus — jurutera pentadbiran sistem yang bekerja dalam persekitaran DevOps dengan Kubernetes dan teknologi awan. Dia suka menghabiskan masa di luar rumah, minum kopi, ketam, dan duduk di depan komputer. Tinggal di Seattle, Washington, dengan seekor kucing yang cantik dan seorang isteri dan kawan baik yang lebih hebat, Adrienne.

» Butiran lanjut tentang buku boleh didapati di laman web penerbit
» jadual kandungan
» Petikan

Untuk Khabrozhiteley diskaun 25% menggunakan kupon - Kubernetes

Selepas pembayaran versi kertas buku itu, buku elektronik akan dihantar melalui e-mel.

Sumber: www.habr.com

Tambah komen