Pesan “Kubernetes untuk DevOps”

Pesan “Kubernetes untuk DevOps” Halo warga Khabro! Kubernetes adalah salah satu elemen kunci ekosistem cloud modern. Teknologi ini memberikan keandalan, skalabilitas, dan ketahanan terhadap virtualisasi kontainer. John Arundel dan Justin Domingus berbicara tentang ekosistem Kubernetes dan memperkenalkan solusi yang telah terbukti untuk permasalahan sehari-hari. Langkah demi langkah, Anda akan membangun aplikasi cloud-native Anda sendiri dan membuat infrastruktur untuk mendukungnya, menyiapkan lingkungan pengembangan, dan alur penerapan berkelanjutan yang akan membantu Anda saat mengerjakan aplikasi berikutnya.

• Memulai container dan Kubernetes dari dasar: tidak diperlukan pengalaman khusus untuk mempelajari topik ini. • Jalankan klaster Anda sendiri atau pilih layanan Kubernetes terkelola dari Amazon, Google, dll. • Gunakan Kubernetes untuk mengelola siklus hidup container dan konsumsi sumber daya. • Mengoptimalkan klaster berdasarkan biaya, kinerja, ketahanan, kekuatan, dan skalabilitas. • Pelajari alat terbaik untuk mengembangkan, menguji, dan menerapkan aplikasi Anda. • Memanfaatkan praktik industri saat ini untuk memastikan keamanan dan pengendalian. • Menerapkan prinsip-prinsip DevOps di seluruh perusahaan Anda sehingga tim pengembangan dapat bertindak lebih fleksibel, cepat, dan efisien.

Untuk siapa buku itu?

Buku ini paling relevan bagi karyawan departemen administrasi yang bertanggung jawab atas server, aplikasi, dan layanan, serta bagi pengembang yang terlibat dalam membangun layanan cloud baru atau memigrasikan aplikasi yang sudah ada ke Kubernetes dan cloud. Jangan khawatir, Anda tidak perlu tahu cara bekerja dengan Kubernetes atau container - kami akan mengajari Anda semuanya.

Pengguna Kubernetes yang berpengalaman juga akan menemukan banyak manfaat, dengan cakupan topik yang mendalam seperti RBAC, penerapan berkelanjutan, pengelolaan data sensitif, dan kemampuan observasi. Kami berharap halaman-halaman buku ini pasti berisi sesuatu yang menarik bagi Anda, terlepas dari keahlian dan pengalaman Anda.

Pertanyaan apa yang dijawab buku ini?

Saat merencanakan dan menulis buku ini, kami mendiskusikan teknologi cloud dan Kubernetes dengan ratusan orang, berbicara dengan para pemimpin dan pakar industri serta para pemula. Di bawah ini adalah pertanyaan-pertanyaan terpilih yang mereka ingin lihat jawabannya dalam publikasi ini.

  • “Saya tertarik pada mengapa Anda harus meluangkan waktu untuk teknologi ini. Masalah apa yang bisa saya dan tim saya selesaikan dengan bantuan ini?”
  • “Kubernetes tampaknya menarik, tetapi memiliki hambatan masuk yang cukup tinggi. Mempersiapkan contoh sederhana tidaklah sulit, namun administrasi dan debugging lebih lanjut merupakan hal yang menakutkan. Kami ingin mendapatkan saran yang dapat diandalkan tentang cara orang mengelola klaster Kubernetes di dunia nyata dan masalah apa yang mungkin kami hadapi."
  • “Saran subjektif akan sangat membantu. Ekosistem Kubernetes memberikan terlalu banyak pilihan kepada tim baru. Jika ada beberapa cara untuk melakukan hal yang sama, bagaimana Anda tahu mana yang terbaik? Bagaimana cara membuat pilihan?

Dan mungkin pertanyaan yang paling penting dari semua pertanyaan:

  • “Bagaimana saya bisa menggunakan Kubernetes tanpa mengganggu perusahaan saya?”

Kutipan. Objek Konfigurasi dan Rahasia

Kemampuan untuk memisahkan logika aplikasi Kubernetes dari konfigurasinya (yaitu, dari nilai atau pengaturan apa pun yang mungkin berubah seiring waktu) sangatlah berguna. Nilai konfigurasi biasanya mencakup pengaturan khusus lingkungan, alamat DNS layanan pihak ketiga, dan kredensial autentikasi.

Tentu saja, semua ini dapat dimasukkan langsung ke dalam kode, namun pendekatan ini tidak cukup fleksibel. Misalnya, mengubah nilai konfigurasi akan mengharuskan Anda membuat dan menerapkan kode lagi. Solusi yang jauh lebih baik adalah dengan memisahkan konfigurasi dari kode dan membacanya dari file atau variabel lingkungan.

Kubernetes menyediakan beberapa cara berbeda untuk mengelola konfigurasi. Pertama, Anda dapat meneruskan nilai ke aplikasi melalui variabel lingkungan yang ditentukan dalam spesifikasi pembungkus pod (lihat “Variabel Lingkungan” di halaman 192). Kedua, data konfigurasi dapat disimpan langsung di Kubernetes menggunakan objek ConfigMap dan Secret.

Dalam bab ini, kita mengeksplorasi objek-objek ini secara mendetail dan melihat beberapa pendekatan praktis untuk mengelola konfigurasi dan data sensitif menggunakan aplikasi demo.

Memperbarui shell pod ketika konfigurasi berubah

Bayangkan Anda memiliki penerapan di cluster Anda dan Anda ingin mengubah beberapa nilai di ConfigMap-nya. Jika Anda menggunakan diagram Helm (lihat “Helm: Manajer Paket untuk Kubernetes” di halaman 102), Anda dapat secara otomatis mendeteksi perubahan konfigurasi dan memuat ulang shell pod Anda dalam satu trik yang menarik. Tambahkan anotasi berikut ke spesifikasi penerapan Anda:

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

Templat penerapan sekarang berisi checksum parameter konfigurasi: jika parameter diubah, jumlahnya akan diperbarui. Jika Anda menjalankan helm upgrade, Helm akan mendeteksi bahwa spesifikasi penerapan telah berubah dan akan memulai ulang semua shell pod.

Data sensitif di Kubernetes

Kita telah mengetahui bahwa objek ConfigMap menyediakan mekanisme yang fleksibel untuk menyimpan dan mengakses data konfigurasi dalam sebuah cluster. Namun, sebagian besar aplikasi memiliki informasi yang sensitif dan sensitif, seperti kata sandi atau kunci API. Itu juga dapat disimpan di ConfigMap, tetapi solusi ini tidak ideal.

Sebaliknya, Kubernetes menawarkan tipe objek khusus yang dirancang untuk menyimpan data sensitif: Rahasia. Selanjutnya, mari kita lihat contoh bagaimana objek ini dapat digunakan dalam aplikasi demo kita.

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

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

Dalam contoh ini, kunci pribadi magicWord adalah xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Kata xyzzy secara umum sangat berguna dalam dunia komputer. Mirip dengan ConfigMap, Anda dapat menyimpan beberapa kunci dan nilai dalam objek Rahasia. Di sini, untuk mempermudah, kami hanya menggunakan satu pasangan nilai kunci.

Menggunakan Objek Rahasia sebagai Variabel Lingkungan

Seperti ConfigMap, objek Secret dapat tersedia di container sebagai variabel lingkungan atau sebagai file di disknya. Dalam contoh berikut, kami akan menetapkan variabel lingkungan ke nilai dari Rahasia:

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

Jalankan perintah berikut di repositori demo untuk menerapkan manifes:

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

Seperti sebelumnya, teruskan port lokal ke penerapan untuk melihat hasilnya di browser Anda:

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

Saat membuka alamat localhost:9999/ Anda akan melihat yang berikut:

The magic word is "xyzzy"

Menulis Objek Rahasia ke File

Dalam contoh ini, kita akan melampirkan objek Rahasia ke container sebagai file. Kode ini terletak di folder hello-secret-file di repositori demo.

Untuk menghubungkan Secret sebagai file, kami akan menggunakan penerapan 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 pada subbagian “Membuat file konfigurasi dari objek ConfigMap” di hal. 240, kami membuat volume (dalam hal ini demo-secret-volume) dan memasangnya ke wadah di bagian volumeMounts pada spesifikasi. Field mountPath adalah /secrets, sehingga Kubernetes akan membuat satu file di folder ini untuk setiap pasangan kunci/nilai yang ditentukan dalam objek Secret.

Dalam contoh kita, kita hanya mendefinisikan satu pasangan nilai kunci yang disebut magicWord, sehingga manifes akan membuat satu file read-only /secrets/magicWord dengan data sensitif di dalam container.

Jika Anda menerapkan manifes ini dengan cara yang sama seperti contoh sebelumnya, Anda akan mendapatkan hasil yang sama:

The magic word is "xyzzy"

Membaca Objek Rahasia

Pada bagian sebelumnya, kita menggunakan perintah kubectl deskripsikan untuk menampilkan isi ConfigMap. Bisakah hal yang sama dilakukan dengan Secret?

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

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

Data
====
magicWord: 5   bytes

Harap dicatat bahwa data itu sendiri tidak ditampilkan. Objek rahasia di Kubernetes bertipe Opaque, yang berarti isinya tidak ditampilkan dalam keluaran kubectl deskripsikan, entri log, atau terminal, sehingga informasi sensitif tidak mungkin diungkapkan secara tidak sengaja.

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

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

base64

Apa itu eHl6enk=, yang benar-benar berbeda dari nilai asli kita? Ini sebenarnya adalah objek Rahasia, yang direpresentasikan dalam pengkodean base64. Base64 adalah skema untuk menyandikan data biner arbitrer sebagai serangkaian karakter.

Karena informasi sensitif mungkin biner dan bukan keluaran (seperti halnya kunci enkripsi TLS), objek Rahasia selalu disimpan dalam format base64.

Teks beHl6enk= adalah versi kode base64 dari kata rahasia kami xyzzy. Anda dapat memverifikasi ini dengan menjalankan perintah base64 —decode di terminal:

echo "eHl6enk=" | base64 --decode
xyzzy

Jadi, meskipun Kubernetes melindungi Anda dari mengeluarkan data sensitif secara tidak sengaja di terminal atau file log, jika Anda memiliki izin baca pada objek Rahasia di namespace tertentu, data tersebut dapat di-base64 dan kemudian didekodekan.

Jika Anda perlu mengkodekan beberapa teks base64 (misalnya, untuk memasukkannya ke dalam Rahasia), gunakan perintah base64 tanpa argumen:

echo xyzzy | base64
eHl6enkK

Mengakses Objek Rahasia

Siapa yang dapat membaca dan mengedit objek Rahasia? Hal ini ditentukan oleh RBAC, sebuah mekanisme kontrol akses (kami akan membahasnya secara rinci di sub-bagian “Pengantar Kontrol Akses Berbasis Peran” di halaman 258). Jika Anda menjalankan klaster yang tidak memiliki RBAC atau tidak diaktifkan, semua objek Rahasia Anda tersedia untuk semua pengguna dan kontainer (kami akan menjelaskan nanti bahwa Anda tidak boleh memiliki klaster produksi tanpa RBAC).

Enkripsi data pasif

Bagaimana dengan mereka yang memiliki akses ke database etcd tempat Kubernetes menyimpan semua informasinya? Bisakah mereka membaca data sensitif tanpa izin untuk membaca objek Rahasia melalui API?

Sejak versi 1.7, Kubernetes mendukung enkripsi data pasif. Ini berarti bahwa informasi sensitif di dalam etcd disimpan terenkripsi pada disk dan tidak dapat dibaca bahkan oleh mereka yang memiliki akses langsung ke database. Untuk mendekripsinya, Anda memerlukan kunci yang hanya dimiliki oleh server API Kubernetes. Dalam cluster yang dikonfigurasi dengan benar, enkripsi pasif harus diaktifkan.

Anda dapat memeriksa apakah enkripsi pasif berfungsi di klaster Anda dengan cara ini:

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

Jika Anda tidak melihat tanda konfigurasi-penyedia-enkripsi-eksperimen, berarti enkripsi pasif tidak diaktifkan. Saat menggunakan Google Kubernetes Engine atau layanan pengelolaan Kubernetes lainnya, data Anda dienkripsi menggunakan mekanisme yang berbeda, sehingga tandanya tidak akan ada. Hubungi vendor Kubernetes Anda untuk mengetahui apakah konten dll dienkripsi.

Menyimpan data rahasia

Ada beberapa sumber daya Kubernetes yang tidak boleh dihapus dari cluster, seperti objek Rahasia yang sangat sensitif. Anda dapat melindungi sumber daya agar tidak dihapus menggunakan anotasi yang disediakan oleh manajer Helm:

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

Strategi Pengelolaan Objek Rahasia

Dalam contoh di bagian sebelumnya, data sensitif dilindungi dari akses tidak sah segera setelah disimpan di cluster. Namun dalam file manifes, file tersebut disimpan sebagai teks biasa.

Anda tidak boleh menempatkan informasi rahasia dalam file yang berada dalam kontrol versi. Bagaimana cara Anda mengelola dan menyimpan informasi ini dengan aman sebelum menerapkannya ke cluster Kubernetes Anda?

Anda dapat memilih alat atau strategi apa pun untuk menangani data sensitif di aplikasi Anda, namun Anda tetap harus menjawab setidaknya pertanyaan berikut.

  • Di mana sebaiknya data sensitif disimpan agar mudah diakses?
  • Bagaimana cara membuat data sensitif dapat diakses oleh aplikasi aktif Anda?
  • Apa yang seharusnya terjadi pada aplikasi Anda saat Anda mengganti atau mengedit data sensitif?

Tentang Penulis

John Arundel adalah seorang konsultan dengan pengalaman 30 tahun di industri komputer. Dia telah menulis beberapa buku dan bekerja dengan banyak perusahaan dari berbagai negara, memberi nasihat kepada mereka mengenai infrastruktur cloud-native dan Kubernetes. Di waktu luangnya, dia suka berselancar, jago menembak, dan bermain piano sebagai seorang amatir. Tinggal di sebuah pondok dongeng di Cornwall, Inggris.

Justin Domingus — insinyur administrasi sistem yang bekerja di lingkungan DevOps dengan Kubernetes dan teknologi cloud. Dia menikmati menghabiskan waktu di luar ruangan, minum kopi, bermain kepiting, dan duduk di depan komputer. Tinggal di Seattle, Washington, dengan seekor kucing yang luar biasa dan istri serta sahabat yang lebih luar biasa lagi, Adrienne.

»Detail lebih lanjut tentang buku ini dapat ditemukan di situs web penerbit
» daftar isi
» Kutipan

Untuk Khabrozhiteley diskon 25% menggunakan kupon - Kubernetes

Setelah pembayaran buku versi kertas, buku elektronik akan dikirim melalui email.

Sumber: www.habr.com

Tambah komentar