GNU/Linux >> Belajar Linux >  >> Ubuntu

Rahasia Kubernetes – Cara Membuat, Menggunakan, dan Mengakses Rahasia

Pendahuluan

Sebagian besar aplikasi yang di-deploy melalui Kubernetes memerlukan akses ke database, layanan, dan sumber daya lain yang terletak di luar. Cara termudah untuk mengelola informasi login yang diperlukan untuk mengakses sumber daya tersebut adalah menggunakan rahasia Kubernetes. Rahasia membantu mengatur dan mendistribusikan informasi sensitif di seluruh cluster.

Dalam tutorial ini, Anda akan mempelajari apa itu rahasia Kubernetes dan cara membuat serta menggunakannya di cluster Anda.

Prasyarat

  • Cluster Kubernetes (untuk tujuan pengujian, Anda dapat membuatnya dengan minikube)
  • Alat baris perintah Kubernetes kubectl

Apa Rahasia Kubernetes?

Rahasia Kubernetes adalah objek yang menyimpan bagian data sensitif seperti nama pengguna, kata sandi, token, dan kunci. Rahasia dibuat oleh sistem selama penginstalan aplikasi atau oleh pengguna kapan pun mereka perlu menyimpan informasi sensitif dan membuatnya tersedia untuk pod.

Jika kata sandi, token, atau kunci hanyalah bagian dari definisi pod atau gambar kontainer, kata sandi tersebut dapat terekspos secara tidak sengaja selama operasi Kubernetes. Oleh karena itu, fungsi rahasia yang paling penting adalah untuk mencegah pemaparan informasi yang tersimpan di dalamnya secara tidak sengaja sekaligus membuatnya tersedia di mana pun pengguna membutuhkannya.

Jenis Rahasia Kubernetes

Kubernetes menampilkan dua kategori rahasia:

  • Akun layanan sistem secara otomatis membuat rahasia bawaan dan kaitkan dengan container bersama dengan kredensial API.
  • Anda juga dapat membuat rahasia khusus untuk kredensial, Anda perlu menyediakannya untuk pod.

Rahasia bawaan datang dalam beberapa jenis, sesuai dengan skenario penggunaan populer:

Jenis Bawaan Deskripsi
Opaque Ini adalah jenis rahasia default. Rahasia yang file konfigurasinya tidak berisi pernyataan tipe semuanya dianggap bertipe ini. Rahasia buram dirancang untuk menyimpan data pengguna yang berubah-ubah.
kubernetes.io/service-account-token Rahasia token akun layanan menyimpan token yang mengidentifikasi akun layanan. Setelah membuat pod, Kubernetes secara otomatis membuat rahasia ini dan mengaitkannya dengan pod, memungkinkan akses aman ke API. Perilaku ini dapat dinonaktifkan.
kubernetes.io/dockercfg Mengakses registri Docker untuk gambar memerlukan kredensial Docker yang valid. Jenis rahasia ini digunakan untuk menyimpan serial ~/.dockercfg format lama untuk konfigurasi baris perintah Docker. Ini berisi .dockercfg yang disandikan base64 kunci.
kubernetes.io/dockerconfigjson Jenis rahasia ini menampilkan .dockerconfigjson key, yang merupakan versi encode base64 dari ~/.docker/config.json file, versi baru dari .dockercfg . yang sudah tidak digunakan lagi .
kubernetes.io/basic-auth Rahasia untuk menyimpan data otentikasi dasar. Itu harus berisi dua kunci – username dan password .
kubernetes.io/ssh-auth Untuk menyimpan data yang diperlukan untuk membuat koneksi SSH, gunakan ssh-auth Tipe. Bidang data jenis ini harus berisi ssh-privatekey pasangan nilai kunci.
kubernetes.io/tls Jenis ini digunakan untuk menyimpan sertifikat dan kunci TLS. Skenario penggunaan yang paling umum adalah penghentian sumber daya Ingress, tetapi tls type terkadang juga digunakan dengan resource lain.
bootstrap.kubernetes.io/token Token yang digunakan selama proses bootstrap node disimpan menggunakan tipe token secret. Tipe ini biasanya dibuat di kube-system ruang nama.

Untuk menentukan jenis rahasia yang disesuaikan, tetapkan string yang tidak kosong sebagai nilai dalam type bidang file rahasia. Membiarkan bidang kosong memberi tahu Kubernetes untuk mengasumsikan Opaque Tipe. Jenis yang disesuaikan membebaskan rahasia kendala yang ditimbulkan oleh jenis bawaan.

Menggunakan Rahasia Kubernetes

Saat Anda membuat rahasia, itu perlu direferensikan oleh pod yang akan menggunakannya. Untuk membuat rahasia tersedia untuk pod:

1. Pasang rahasia sebagai file dalam volume yang tersedia untuk sejumlah kontainer dalam sebuah pod.

2. Impor rahasia sebagai variabel lingkungan ke wadah.

3. Gunakan kubelet, dan imagePullSecrets lapangan.

Bagian berikut menjelaskan cara membuat rahasia Kubernetes, serta cara mendekode dan mengaksesnya.

Buat Rahasia Kubernetes

Untuk membuat rahasia Kubernetes, terapkan salah satu metode berikut:

  • Gunakan kubectl untuk pendekatan berbasis baris perintah.
  • Buat file konfigurasi untuk rahasia tersebut.
  • Gunakan generator, seperti Kustomize untuk menghasilkan rahasia.

Membuat Rahasia Menggunakan kubectl

1. Untuk mulai membuat rahasia dengan kubectl , pertama buat file untuk menyimpan informasi sensitif:

echo -n '[username]' > [file1]
echo -n '[password]' > [file2]

-n opsi memberitahu echo untuk tidak menambahkan baris baru di akhir string. Baris baru juga diperlakukan sebagai karakter, sehingga akan dikodekan bersama dengan karakter lainnya, menghasilkan nilai pengkodean yang berbeda.

2. Sekarang, gunakan kubectl untuk membuat rahasia menggunakan file dari langkah sebelumnya. Gunakan subperintah umum untuk membuat Opaque rahasia. Juga, tambahkan --from-file opsi untuk setiap file yang ingin Anda sertakan:

kubectl create secret generic [secret-name] \  
--from-file=[file1] \
--from-file=[file2]

Output mengkonfirmasi pembuatan rahasia:

3. Untuk menyediakan kunci untuk nilai yang disimpan dalam rahasia, gunakan sintaks berikut:

kubectl create secret generic [secret-name] \  
--from-file=[key1]=[file1] \  
--from-file=[key2]=[file2]

4. Periksa apakah rahasia telah berhasil dibuat dengan mengetik:

kubectl get secrets

Perintah menunjukkan daftar rahasia yang tersedia – nama, jenis, jumlah nilai data yang dikandungnya, dan usianya:

Buat Rahasia di File Konfigurasi

1. Untuk membuat rahasia dengan menentukan informasi yang diperlukan dalam file konfigurasi, mulailah dengan menyandikan nilai yang ingin Anda simpan:

echo -n '[value1]' | base64
echo -n '[value2]' | base64

2. Sekarang buat file yaml menggunakan editor teks. Filenya akan terlihat seperti ini:

apiVersion: v1
kind: Secret
metadata:  
  name: newsecret
type: Opaque
data:
  username: dXNlcg==
  password: NTRmNDFkMTJlOGZh

3. Simpan file dan gunakan kubectl apply perintah untuk membuat rahasia:

kubectl apply -f [file]

Buat Rahasia Kubernetes dengan Generator

Generator seperti Kustomize membantu menghasilkan rahasia dengan cepat.

1. Untuk membuat rahasia dengan Kustomize, buat file bernama kustomization.yaml dan format sebagai berikut:

secretGenerator:
- name: db-credentials 
  files:
  - username.txt
  - password.txt

Contoh di atas menyatakan db-credentials sebagai nama rahasia dan menggunakan dua file yang dibuat sebelumnya, username.txt , dan password.txt , sebagai nilai data.

2. Sebagai alternatif, untuk memberikan versi literal nilai data yang tidak terenkripsi, sertakan literals bagian dengan pasangan nilai kunci yang ingin Anda simpan:

secretGenerator:
- name: db-credentials
  literals:
  - username=user
  - password=54f41d12e8fa

3. Simpan file dan gunakan perintah berikut di folder tempat kustomization.yaml terletak:

kubectl apply -k .

Output mengkonfirmasi pembuatan rahasia:

Gunakan kubectl mendeskripsikan untuk Melihat Rahasia yang Dibuat

kubectl describe perintah menunjukkan informasi dasar tentang objek Kubernetes. Gunakan untuk melihat deskripsi rahasia.

kubectl describe secrets/[secret]

Contoh pertama menunjukkan rahasia yang dibuat dengan menyediakan file sebagai nilai data:

Contoh kedua menjelaskan rahasia yang dibuat menggunakan literal string. Perhatikan perubahan pada Data bagian, yang sekarang menampilkan nama kunci alih-alih nama file:

Menguraikan Kode Rahasia

1. Untuk memecahkan kode nilai dalam sebuah rahasia, akseslah dengan mengetikkan perintah berikut:

kubectl get secret [secret] -o jsonpath='{.data}'

Keluaran menunjukkan pasangan nilai kunci yang disandikan yang disimpan di bagian data:

2. Gunakan perintah echo untuk mengetik string yang disandikan dan menyalurkan output ke base64 perintah:

echo '[encoded-value]' | base64 --decode

String yang didekodekan muncul sebagai output:

Rahasia Akses Dimuat dalam Volume

1. Untuk mengakses rahasia yang dipasang ke pod dalam volume terpisah, ubah definisi pod untuk menyertakan volume baru. Pilih nama volume yang Anda inginkan, tetapi pastikan itu sama dengan nama objek rahasia.

2. Pastikan untuk menentukan readOnly sebagai benar. Misalnya, definisi pod mungkin terlihat seperti ini:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  spec:
    containers:
      - name: test-pod
        image: redis
        volumeMounts:
        - name: newsecret
          mountPath: “/etc/newsecret”
          readOnly: true
    volumes:
    - name: newsecret
      secret:
        secretName: newsecret

2. Buka instance terminal lain dan gunakan kubectl exec perintah untuk mengakses bash shell pod:

kubectl exec -it [pod] -- /bin/bash


3. cd ke /etc/newsecret , dan temukan file yang terdapat dalam rahasia:

cd /etc/newsecret

Rahasia Proyek ke dalam Wadah Menggunakan Variabel Lingkungan

1. Cara lain untuk mengakses rahasia dalam pod Kubernetes adalah dengan mengimpornya sebagai variabel lingkungan dengan memodifikasi definisi pod untuk menyertakan referensi ke dalamnya. Misalnya:

apiVersion: v1 
kind: Pod 
metadata: 
  name: secret-env-pod 
spec: 
  containers: 
  - name: secret-env-pod
    image: redis 
    env: 
      - name: SECRET_USERNAME 
        valueFrom: 
          secretKeyRef: 
            name: newsecret 
            key: username 
      - name: SECRET_PASSWORD 
        valueFrom: 
          secretKeyRef: 
            name: newsecret 
            key: password 
  restartPolicy: Never

2. Gunakan kubectl exec lagi untuk melakukan bash ke dalam pod.

3. Uji variabel lingkungan menggunakan echo perintah:

echo $[VARIABLE]

Output perintah menunjukkan nilai yang dipetakan ke variabel:

Gunakan Rahasia untuk Menarik Gambar Docker dari Registri Docker Pribadi

1. Untuk menggunakan registri Docker pribadi, pertama-tama, Anda harus masuk ke Docker:

docker login

2. Saat diminta, berikan kredensial login Anda:

3. Jika login berhasil, Docker memperbarui config.json file dengan data Anda. Gunakan perintah cat untuk melihat file:

cat ~/.docker/config.json

auths bagian berisi auth key, yang merupakan versi enkode dari kredensial Docker.

4. Gunakan kubectl untuk membuat rahasia, memberikan lokasi config.json file dan jenis rahasianya:

kubectl create secret generic [secret] \
--from-file=.dockerconfigjson=./.docker/config.json \
--type=kubernetes.io/dockerconfigjson

Atau, lakukan semua langkah di atas, termasuk masuk ke Docker, di baris yang sama:

kubectl create secret docker-registry [secret] --docker-server:[address] --docker-username=[username] --docker-password=[password] --docker-email=[email]

5. Untuk membuat pod yang memiliki akses ke rahasia ini, buat yaml file yang mendefinisikannya. Filenya akan terlihat seperti ini:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec: 
  containers:
  - name: private-reg-container
    image:   
  imagePullSecrets:  
  - name: regcred

6. Selesaikan pembuatan pod dengan mengaktifkannya dengan kubectl apply :

kubectl apply -f [file]

Pertimbangan Rahasia Kubernetes

Rahasia Kubernetes adalah cara aman untuk menyimpan informasi sensitif. Namun, sebelum Anda memutuskan metode terbaik untuk skenario penggunaan Anda, Anda harus mempertimbangkan poin-poin berikut:

  • Nama pengguna dan sandi di Rahasia dikodekan dengan basis-64. Teknik pengkodean teks ini mengaburkan data dan mencegah paparan yang tidak disengaja, tetapi tidak aman dari serangan cyber berbahaya.
  • Rahasia hanya tersedia di cluster tempat mereka berada.
  • Rahasia biasanya bergantung pada kunci utama yang digunakan untuk membuka semuanya. Meskipun ada metode untuk mengamankan kunci master, menggunakannya hanya akan membuat skenario kunci master lainnya.

Untuk mengurangi masalah ini, terapkan beberapa solusi di bawah ini:

  • Mengintegrasikan alat manajemen rahasia yang menggunakan akun Layanan Kubernetes untuk mengautentikasi pengguna yang membutuhkan akses ke brankas rahasia.
  • Mengintegrasikan alat IAM (Identity and Access Management) untuk memungkinkan sistem menggunakan token dari Layanan Token Aman.
  • Mengintegrasikan pengelola rahasia pihak ketiga ke dalam pod.

Ubuntu
  1. Cara Memasang dan Menggunakan TensorFlow di CentOS 7

  2. Cara Membuat dan Menggunakan Subdomain

  3. Cara Membuat Alias ​​​​dan Menggunakan Perintah Alias ​​​​di Linux

  1. Apa itu Umask dan Bagaimana Cara Menggunakannya

  2. Volume Docker NFS:Cara Membuat dan Menggunakan

  3. Pustaka Bersama Jenkins:Cara Membuat, Mengonfigurasi, dan Menggunakan

  1. Apa itu Kubernetes DaemonSet dan Bagaimana Cara Menggunakannya?

  2. Cara Menginstal dan Menggunakan Anggur di Ubuntu 20.04

  3. Cara Menginstal dan Menggunakan FFmpeg di Ubuntu 18.04