implementasi secret volume dan configmap volume pada kubernetes

0
336

halo sobat sekolahlinux kali ini saya akan membahas tentang implementasi secret volume dan configmap volume pada kubernetes, oh iya untuk volume type kubernetes ini sebenarnya ada banyak, sobat sekolahlinux bisa lihat di link berikut ini

namun pada pembahasan kali ini saya hanya akan membahas 2 volume type, kenapa hanya 2, karena ya artikel ini memang dibuat untuk mendokumentasikan 2 volume type ini, apa saja 2 volume type tersebut hehehe :D, berikut ini listnya:

secret volume

secret volume biasanya digunakan untuk menyimpan file-file yang berisi data sensitiv, misal user dan password ataupun cert ssl, type volume ini akan menyimpan file kedalam momory, kamu bisa baca lebih jelasnya pada link dibawah:

configmap volume

configmap volume digunakan untuk menyimpan file yang sebelumnya sudah di set sebelumnya di configmap, biasanya configmap volume untuk menyimpan file-file konfigurasi suatu aplikasi sehingga jika ada perubahan pada file konfigurasi kita bisa langsung merubahnya disisi configmap nya, kamu bisa baca lebih jelasnya pada link dibawah:

oke kita langsung praktek saja ya, pertama kita akan buat secret untuk digunakan pada volume type secret, pada type secret ini saya memiliki 2 buah file cert ssl yaitu

  • sekolahlinux.crt
  • sekolahlinux.key

saya ingin 2 file tersebut ada didalam pods, misal saya pakai image nginx, maka saya ingin 2 file tersebut ada di folder /etc/nginx/ssl, pertama kita buat 2 file tersebut menjadi sebuah secret di kubernetes, caranya seperti berikut:

kubectl create secret generic sekolahlinux-ssl-file --from-file=./sekolahlinux.crt --from-file=./sekolahlinux.key -n sekolahlinux

selanjutnya kita coba cek apakah secret tersebut sudah berhasil dibuat dengan menjalankan perintah dibawah

kubectl get secret -n sekolahlinux

maka hasilnya akan seperti dibawah

sekolahlinux@sekolahlinux-controlbox:~$ kubectl get secret -n sekolahlinux
NAME                        TYPE         DATA   AGE
sekolahlinux-ssl-file       Opaque       2      2d4h

oke sekarang lanjut untuk membuat config file dengan configmap, disini saya akan membuat 2 file yaitu

  • sekolahlinux-main.conf
  • default.conf

kurang lebih isi manifest configmap k8s nya seperti dibawah ini

sekolahlinux-nginx-conf.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: sekolahlinux-nginx-conf
  namespace: sekolahlinux
data:
  sekolahlinux-main.conf: |
        server {
                listen 443;
                server_name sekolahlinux.com;
                root /var/www/html;
                index index.php index.html index.htm;

                ssl on;
                ssl_certificate /etc/nginx/ssl/sekolahlinux.crt;
                ssl_certificate_key /etc/nginx/ssl/sekolahlinux.key;

                location / {
                    try_files $uri $uri/ /index.php?$args;
                }

                location ~ [^/]\.php(/|$) {
                        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                        if (!-f $document_root$fastcgi_script_name) {
                                return 404;
                        }
                        fastcgi_param HTTP_PROXY "";
                        fastcgi_pass unix:/var/run/php-fpm.sock;
                        fastcgi_index index.php;
                        include fastcgi_params;
                        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
                }
        }
  default.conf: |
		server {
		       listen 80 default_server;
		       server_name _;
		       root /var/www/html;
		       index index.html;
		
		       location / {
		           try_files $uri $uri/ =404;
		       }
		}

jika sudah jalankan perintah dibawah ini

kubectl apply -f sekolahlinux-nginx-conf.yaml

selanjutnya jalankan perintah dibawah untuk melihat apakah configmap berhasil dibuat atau tidak

kubectl get configmap -n sekolahlinux

maka hasilnya akan seperti dibawah

sekolahlinux@sekolahlinux-controlbox:~$ kubectl get configmap -n sekolahlinux
NAME                              DATA   AGE
sekolahlinux-nginx-conf           2      29h

oke kita sudah berhasil membuat configmap dan juga secret pada namespaces sekolahlinux di kubernetes, selanjutnya kita akan mount configmap dan juga secret ke deployment pods yang telah kita buat sebelumnya di tutorial sebelumnya, kamu bisa lihat di link dibawah untuk tutorial sebelumnya

kurang lebih manifest deployment k8s nya akan seperti dibawah ini jika kita mount secret dan juga configmap ke volume

sekolahlinux-wp.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: sekolahlinux-wp-service
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  namespace: sekolahlinux
  labels:
    app: sekolahlinux
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
  selector:
    app: sekolahlinux
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: sekolahlinux-wp
  namespace: sekolahlinux
spec:
  revisionHistoryLimit: 1
  strategy:
    type: RollingUpdate
  replicas: 2
  selector:
    matchLabels:
      app: sekolahlinux
  template:
    metadata:
      labels:
        app: sekolahlinux
    spec:
      containers:
      - name: sekolahlinux-wp
        image: richarvey/nginx-php-fpm
        imagePullPolicy: Always
        ports:
          - containerPort: 80
          - containerPort: 443
        resources:
          requests:
            memory: "64Mi"
            cpu: "64m"
          limits:
            memory: "256Mi"
            cpu: "256m"
        volumeMounts:
        - name: sekolahlinux-ssl-file
          mountPath: "/etc/nginx/ssl"
          readOnly: true
        - name: sekolahlinux-nginx-conf
          mountPath: "/etc/nginx/sites-enabled"
        - name: data-web
          mountPath: "/var/www/html"
        env:
          - name: "CREATED_BY"
            value: "AKBAR"
      volumes:
      - name: sekolahlinux-ssl-file
        secret:
          secretName: sekolahlinux-ssl-file
      - name: sekolahlinux-nginx-conf
        configMap:
          name: sekolahlinux-nginx-conf
      - name: data-web
        persistentVolumeClaim:
          claimName: data-web

lalu jika sudah jalankan perintah dibawah ini

kubectl apply -f sekolahlinux-wp.yaml

lalu bagaimana untuk check apakah sudah benar atau belum konfigurasi diatas, kamu bisa masuk kedalam pods nya dengan command dibawah ini, ganti pod_name dengan nama pod kamu

kubectl exec -it pods_name -n sekolahlinux bash

contoh :

kubectl exec -it sekolahlinux-wp-6d745c4d4-g4sbv -n sekolahlinux bash

jika sudah didalam pods nya kamu bisa cek didalam folder dibawah ini ada file yang kita buat di configmap dan juga secret

  • /etc/nginx/ssl
  • /etc/nginx/site-enabled

sekian tutorial kali ini semoga bermanfaat ya :), jangan sungkan bertanya di kolom komentar ataupun bisa ke linkedin saya