Tampilkan postingan dengan label Kubernetes. Tampilkan semua postingan
Tampilkan postingan dengan label Kubernetes. Tampilkan semua postingan

Kamis, 26 Desember 2024

Example Config Nginx

 Redirect dari server lain

    #nano /etc/nginx/conf.d/example.yoniys.com.conf

server {

    listen 443 ssl;

    server_name example.yoniys.com;

 

    access_log           /var/log/nginx/example.yoniys.com.access.log;

    error_log           /var/log/nginx/example.yoniys.com.error.log;

 

    ssl_certificate    /ssl/example.yoniys.com_ecc/example.yoniys.com.cer; # directory ssl

    ssl_certificate_key    /ssl/example.yoniys.com_ecc/example.yoniys.com.key;

 

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

  ssl_prefer_server_ciphers on;

  ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

  ssl_stapling on;

  ssl_stapling_verify on;

    location / {

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header X-Forwarded-Port $server_port;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_ssl_verify              off;

 

        # config ini mengarah ke ip public suatu server dimana service running di port 9000

        proxy_pass http://192.168.5.234:9000;

        #proxy_pass xxx;

        proxy_http_version 1.1;

    }

}

 

server {

    listen 80;

    server_name example.yoniys.com;

 

    # redirects both www and non-www to https

    return 301 https://$host$request_uri;

}


Config nginx untuk expose service dikubernetes menggunakan Node Port.
    #nano /etc/nginx/conf.d/wildcard.yoniys.com.conf

map $http_upgrade $connection_upgrade {

    default Upgrade;

    ''      close;

}

 

upstream yoniyscom {

    server 172.16.1.12:31733; #diisi dengan ip cluster kubernetes (biasanya ip master), port merupakan config pada NodePort di service kubernetes

    server 172.16.1.13:31733;

    server 172.16.1.14:31733;

}

 

server {

    listen 443 ssl http2;

    server_name ~^(?<subdomain>.+)\.yoniys\.com yoniys.com;


    access_log           /var/log/nginx/yoniys.com.access.log;

    error_log           /var/log/nginx/yoniys.com.error.log;

 

    ssl_certificate /etc/nginx/ssl/star-yoniys.com/yoniys.com.cert;

    ssl_certificate_key /etc/nginx/ssl/star-yoniys.com/yoniys.com.key;

 

    # Temuan pentest

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_prefer_server_ciphers on;

    #ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

 

    # Enable OSCP

    ssl_stapling on;

    ssl_stapling_verify on;

    ssl_trusted_certificate /etc/nginx/ssl/star-yoniys.com/yoniys.com.chain;

 

    # Improvement dari NGINX server development

    # SSL session cache

    ssl_session_cache shared:TLS:2m;

    ssl_buffer_size 4k;

 

    # HSTS

    # instruct browsers to enforce secure connections

    #add_header Strict-Transport-Security "max-age=63072000" always;

 

    # Prevents the webpage from being embedded in frames from other domains.

    #add_header X-Frame-Options SAMEORIGIN;

    # Prevents browsers from interpreting files as a different MIME type than declared by the server.

    #add_header X-Content-Type-Options nosniff;

    # Enables the browser's Cross-Site Scripting (XSS) filter.

    #add_header X-XSS-Protection "1; mode=block";    

 

    location / {

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header X-Forwarded-Port $server_port;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_ssl_verify              off;

 

        proxy_pass http://yoniyscom;

        proxy_http_version 1.1;

        proxy_request_buffering off;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection $connection_upgrade;

        # This allows the ability for the execute shell window to remain open for up to 15 minutes. Without this parameter, the default is 1 minute and will automatically close.

        proxy_read_timeout 900s;

        #client_max_body_size 100M;

        #post_max_size 30M;

        #upload_max_filesize 30M;

        #memory_limit 30M;

        #proxy_cache PROXYCACHE;

        #proxy_cache_valid 200 15m;

        #proxy_cache_valid 404 2m;

    }

 

}

 

server {

    listen 80;

    server_name ~^(?<subdomain>.+)\.yoniys\.com yoniys.com;

 

    # redirects both www and non-www to https

    return 301 https://$host$request_uri;

}

Sabtu, 14 Desember 2024

Setup Kubernetes Cluster RKE2 dan Nginx Load Balancer di Rocky Linux 9

https://docs.rke2.io/install/requirements

https://docs.rke2.io/install/requirements

Prerequisites

Kita menggunakan Rocky Linux 9.5, dengan  2 Server (Control plane nodes) dan 1 Agent(Worker) nodes. Secara keseluruhan VM yang digunakan seperti berikut :

  1. Control-Plane-1 => IP: 192.168.10.121 , OS: Rocky linux 9.5 , Hostname: rke-master1
  2. Control-Plane-2 => IP: 192.168.10.122 , OS: Rocky linux 9.5 , Hostname: rke-master2
  3. Worker-1 => IP: 192.168.10.123 , OS: Rocky linux 9.5 , Hostname: rke-node
  4. L4 Load Balancer => ip: 192.168.10.120


Setup VM NGINX (Load Balancer)

Sebelum kita  setup rke2 pada VM master dan node (worker) kita terlebih dahulu setup nginx sebagai load balancer.
  1. Disable selinux, dan lakukan reboot vm untuk memastikan selinux sudah disable.

    sudo vi /etc/selinux/config

    Ubah SELINUX=enforcing menjadi SELINUX=disable

    SELINUX=disable

    Simpan dan reboot VM

    sudo reboot


  2. Install nginx dan nginx-mod-stream kita perlu install sebagai stream load balancer kubernetes cluster nantinya.

    sudo yum instal nginxl nginx-mod-stream -y


  3. Start dan Enable service Nginx

    sudo systemctl enable nginx.service
    sudo systemctl start nginx.service


  4. Reconfig nginx

    sudo vi /etc/nginx/nginx.conf

    Pada baris bawah sendiri tambahkan berikut :

    stream {

            include /etc/nginx/stream-conf.d/*.conf;

    }

    Lakukan pengecekan config pastikan tidak ada error, dengan command berikut : 

    [root@rke-ha ~]# nginx -t

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

    nginx: configuration file /etc/nginx/nginx.conf test is successful

    [root@rke-ha ~]#


  5. Create directory stream untuk nanti menaruh config stream kubernetes cluster.

    sudo mkdir /etc/nginx/stream-conf.d/

  6. Create config nginx stream kubernetes cluster.

    sudo vi /etc/nginx/stream-conf.d/rke2-master.conf

    Isikan config berikut : 

    upstream rke2_master_kubernetes_api {

     server 192.168.10.121:6443;  # merupakan ip master-1

     server 192.168.10.122:6443;  # merupakan ip master-2

    }

     

    server {

     listen 6443;

     proxy_pass rke2_master_kubernetes_api;

     proxy_timeout 10s;

    # proxy_connection_timeout 5s;

    }

     

    upstream rke2_master_supervisor_api {

     server 192.168.10.121:9345;  # merupakan ip master-1

     server 192.168.10.122:9345;  # merupakan ip master-2

    }

     

    server {

     listen 9345;

     proxy_pass rke2_master_supervisor_api;

     proxy_timeout 10s;

    # proxy_connection_timeout 5s;

    }


  7. Cek dan load config

    [root@rke-ha ~]# nginx -t

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

    nginx: configuration file /etc/nginx/nginx.conf test is successful

    [root@rke-ha ~]# nginx -s reload


  8. -------Finish Setup VM Nginx-------

Setup VM Master-1

  1. Kita buka port yang nantinya dibutuhkan oleh RKE2.

    sudo firewall-cmd --add-port=6443/tcp --permanent

    sudo firewall-cmd --add-port=9345/tcp --permanent

    sudo firewall-cmd --add-port=10250/tcp --permanent

    sudo firewall-cmd --add-port=2379/tcp --permanent

    sudo firewall-cmd --add-port=2380/tcp --permanent

    sudo firewall-cmd --add-port=2381/tcp --permanent

    sudo firewall-cmd --add-port=30000-32767/tcp --permanent

    sudo firewall-cmd --add-port=8472/udp --permanent

    sudo firewall-cmd --add-port=9099/tcp --permanent

    sudo firewall-cmd --add-port=51820/udp --permanent

    sudo firewall-cmd --add-port=51821/tcp --permanent

    sudo firewall-cmd --reload


  2. Kita setup NetworkManager dikarenakan kita mengaktifkan firewalld, dimana firewalld conflic dengan cni canal (default dari rke2) jadi diperlukan penambahan config. 
    Important: If your node has NetworkManager installed and enabled, ensure that it is configured to ignore CNI-managed interfaces.

    sudo vi /etc/NetworkManager/conf.d/rke2-canal.conf


    Isikan value berikut :

    [keyfile]

    unmanaged-devices=interface-name:cali*;interface-name:flannel*


    Simpan config dan restart NetworkManager

    sudo systemctl restart NetworkManager


  3. Download script install dan ubah permission agar bisa di eksekusi.

    sudo curl -sfL https://get.rke2.io --output install.sh

    sudo chmod +x install


  4. Install rke2 sebagai master. Service rke2 jangan distart dulu karena akan ada tambahan config setelah dilakukan install rke2.

    INSTALL_RKE2_CHANNEL=v1.30.6+rke2r1 INSTALL_RKE2_TYPE=server ./install.sh

    *Keterangan :
    INSTALL_RKE2_CHANNEL=v1.30.6+rke2r1 : kita mengistall rke2 menggunakan kubernetes versi 
    v1.30.6+rke2r1.
    Jika kita tidak menambahkan perintah INSTALL_RKE2_CHANNEL maka akan diinstall dengan versi latest.
    INSTALL_RKE2_TYPE=server : kita menginstall rke2 sebagai master/server.

  5. Siapkan config untuk rke2-server.

    sudo vi /etc/rancher/rke2/config.yaml

    Tambahkan value berikut :

    write-kubeconfig-mode: "0644"

    tls-san:

     - k8s.test.com

     - 192.168.10.120

    *Keterangan :
    k8s.test.com : digunakan sebagai domain kube config jika kita ingin akses dari luar cluster kubernetes.
    192.168.10.120 merupakan ip server nginx sebagai load balancer.
  6. Start service rke2-server

    sudo systemctl enable rke2-server

    sudo systemctl start rke2-server

  7. Pengecekan kubernetes cluster memastikan rke-master1 sudah join sebagai master kubernetes cluster.

    [root@rke-master1 ~]# /var/lib/rancher/rke2/bin/kubectl get node --kubeconfig=/etc/rancher/rke2/rke2.yaml

    NAME          STATUS   ROLES                       AGE    VERSION

    rke-master1   Ready    control-plane,etcd,master   5d6h   v1.30.7+rke2r1


  8. -------Finish Setup VM Mater1-------

Setup VM Master-2

  1. Kita buka port yang nantinya dibutuhkan oleh RKE2.

    sudo firewall-cmd --add-port=6443/tcp --permanent

    sudo firewall-cmd --add-port=9345/tcp --permanent

    sudo firewall-cmd --add-port=10250/tcp --permanent

    sudo firewall-cmd --add-port=2379/tcp --permanent

    sudo firewall-cmd --add-port=2380/tcp --permanent

    sudo firewall-cmd --add-port=2381/tcp --permanent

    sudo firewall-cmd --add-port=30000-32767/tcp --permanent

    sudo firewall-cmd --add-port=8472/udp --permanent

    sudo firewall-cmd --add-port=9099/tcp --permanent

    sudo firewall-cmd --add-port=51820/udp --permanent

    sudo firewall-cmd --add-port=51821/tcp --permanent

    sudo firewall-cmd --reload


  2. Kita setup NetworkManager dikarenakan kita mengaktifkan firewalld, dimana firewalld conflic dengan cni canal (default dari rke2) jadi diperlukan penambahan config. 
    ImportantIf your node has NetworkManager installed and enabled, ensure that it is configured to ignore CNI-managed interfaces.

    sudo vi /etc/NetworkManager/conf.d/rke2-canal.conf


    Isikan value berikut :

    [keyfile]

    unmanaged-devices=interface-name:cali*;interface-name:flannel*


    Simpan config dan restart NetworkManager

    sudo systemctl restart NetworkManager


  3. Download script install dan ubah permission agar bisa di eksekusi.

    sudo curl -sfL https://get.rke2.io --output install.sh

    sudo chmod +x install


  4. Install rke2 sebagai master. Service rke2 jangan distart dulu karena akan ada tambahan config setelah dilakukan install rke2.

    INSTALL_RKE2_CHANNEL=v1.30.6+rke2r1 INSTALL_RKE2_TYPE=server ./install.sh


  5. Siapkan config untuk rke2-server.

    sudo vi /etc/rancher/rke2/config.yaml

    Tambahkan value berikut :

    server: https://192.168.10.120:9345

    token: K1022fae0095432bfdab8d0b4f0a52f4d6d99b8d1dc03b21e2c8c6cf26e9d93a7bb::server:57f65ad8b45b81f7389b8e55cd300d26

    write-kubeconfig-mode: "0644"

    tls-san:

     - k8s.test.com

     - 192.168.10.120

    *Keterangan :
    token : diambil dari master-1 pada file /var/lib/rancher/rke2/server/agent-token

  6. Start service rke2-server

    sudo systemctl enable rke2-server

    sudo systemctl start rke2-server


  7. Pengecekan kubernetes cluster memastikan rke-master1 sudah join sebagai master kubernetes cluster.

    [root@rke-master2 ~]# /var/lib/rancher/rke2/bin/kubectl get node --kubeconfig=/etc/rancher/rke2/rke2.yaml

    NAME          STATUS   ROLES                       AGE    VERSION

    rke-master1   Ready    control-plane,etcd,master   5d6h   v1.30.7+rke2r1

    rke-master2   Ready    control-plane,etcd,master   5d6h   v1.30.7+rke2r1


  8. -------Finish Setup VM Mater2-------

Setup VM Node

  1. Install rke2 sebagai agent dikarenakan pada vm Node akan kita gunakan sebagai node worker.

    sudo INSTALL_RKE2_CHANNEL=v1.30.6+rke2r1 INSTALL_RKE2_TYPE=agent ./install.sh


  2. Create config /etc/rancher/rke2/config.yaml, dikarenakan digunakan sebagai worker config hanya berisi value server dan token saja.

    sudo vi /etc/rancher/rke2/config.yaml

    Tambahkan value berikut :

    server: https://192.168.10.120:9345

    token: K1022fae0095432bfdab8d0b4f0a52f4d6d99b8d1dc03b21e2c8c6cf26e9d93a7bb::server:57f65ad8b45b81f7389b8e55cd300d26

    * Keterangan : Token yang digunakan sama dengan yang digunakan master-2.

  3. Running service rke2-agent agar joint sebagai worker pada kubernetes cluster.

    sudo systemctl enable rke2-agent

    sudo systemctl start rke2-agent


  4. Pengecekan node kubernetes cluster, pastikan node worker sudah joint. Bisa dilakukan pengecekan dari master-1 maupun master-2.

    [root@rke-master2 ~]# /var/lib/rancher/rke2/bin/kubectl get node --kubeconfig=/etc/rancher/rke2/rke2.yaml

    NAME          STATUS   ROLES                       AGE    VERSION

    rke-master1   Ready    control-plane,etcd,master   5d6h   v1.30.7+rke2r1

    rke-master2   Ready    control-plane,etcd,master   5d6h   v1.30.7+rke2r1

    rke-node        Ready    <none>                      5d6h   v1.30.7+rke2r1


  5. -------Finish Setup VM Node-------

---- Finish Setup Kubernetes Cluster RKE2 dan Nginx Load Balancer di Rocky Linux 9 ----


Catatan

Agar mempermudah melakukan pengecekan cluster kubernetes menggunakan kubectl, kita akan buat shortcut kubectl dan menambahkan kubeconfig.
Berikut step-stepnya bisa dilakukan di master-1 dan master-2 :
  1. Create Shortcut kubectl

    [root@rke-master2 ~]# sudo ln -s /var/lib/rancher/rke2/bin/* /usr/local/bin/


  2. Create config kubernetes

    [root@rke-master2 ~]# mkdir -p $HOME/.kube

    [root@rke-master2 ~]# sudo cp -i /etc/rancher/rke2/rke2.yaml $HOME/.kube/config

    [root@rke-master2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
    [root@rke-master2 ~]# 


  3. Pengecekan kubectl

    [root@rke-master2 ~]# kubectl get nodes          

    NAME          STATUS   ROLES                       AGE    VERSION

    rke-master1   Ready    control-plane,etcd,master   5d2h   v1.30.7+rke2r1

    rke-master2   Ready    control-plane,etcd,master   5d2h   v1.30.7+rke2r1

    rke-node      Ready      <none>                               5d1h   v1.30.7+rke2r1





Senin, 09 Desember 2024

Cheat Linux Administrator

DATABASE POSTGRES

1. Login Postgres
psql -U user_database -h ip_address_database -d nama_database -p port_database

2. Grant CONNECT to the database:
GRANT CONNECT ON DATABASE database_name TO username;

3. Grant USAGE on schema:
GRANT USAGE ON SCHEMA schema_name TO username;

4. Grant on all tables for DML statements: SELECT, INSERT, UPDATE, DELETE:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_name TO username;

5. Grant all privileges on all tables in the schema:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO username;

6. Grant all privileges on all sequences in the schema:
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema_name TO username;

7. Grant all privileges on the database:
GRANT ALL PRIVILEGES ON DATABASE database_name TO username;

8. Grant permission to create database:
ALTER USER username CREATEDB;

9. Make a user superuser:
ALTER USER myuser WITH SUPERUSER;

10. Remove superuser status:
ALTER USER username WITH NOSUPERUSER;

11. Pengecekan jumlah user konek
Select usename, count(1) as jml FROM pg_stat_activity group by usename order by jml desc;

12. Pengecekan user aktif
Select usename, count(1) as jml FROM pg_stat_activity where state not like '%idle%' group by usename order by jml desc;

13. Pengecekan aktivity user postgres
SELECT * FROM pg_stat_activity where usename='postgres' ;

14. Kill user aktif
SELECT pg_terminate_backend(pid) FROM pg_stat_activity where usename='postgres;

15. Pengecekan query lebih dari 7 menit (bisa disesuaikan interval waktunya)
Select * FROM pg_stat_activity WHERE pid <> pg_backend_pid() And state not in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled') and usename != 'replicate' And (now() - pg_stat_activity.query_start) > interval '7 minutes' order by query_start;

16. PENGECEKAN QUERY sedang Menjalankan query apa
SELECT * FROM pg_stat_activity where usename='postgres' ;

17. Pengecekan DEADLOCK dan BLOCK database
select  blocked_locks.pid AS blocked_pid,
blocked_activity.usename AS blocked_user,
blocking_locks.pid AS blocking_pid,
blocking_activity.usename AS blocking_user,
blocked_activity.query AS blocked_statement,
blocking_activity.query AS current_statement_in_blocking_process,
blocked_activity.application_name  AS blocked_application,
blocking_activity.application_name AS blocking_application
FROM    pg_catalog.pg_locks blocked_locks
inner JOIN pg_catalog.pg_stat_activity  blocked_activity on  blocked_activity.pid  =   blocked_locks.pid
inner JOIN pg_catalog.pg_locks blocking_locks      on  blocking_locks.locktype =   blocked_locks.locktype
AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE
AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation
AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page
AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple
AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid
AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid
AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid
AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid
AND blocking_locks.objsubid  IS NOT DISTINCT FROM blocked_locks.objsubid
AND blocking_locks.pid !=  blocked_locks.pid
INNER JOIN pg_catalog.pg_stat_activity  blocking_activity  ON  blocking_activity.pid   =   blocking_locks.pid
WHERE   NOT blocked_locks.GRANTED;

18. 

DATABASE MYSQL

LINUX
---Network---

nmcli connection show -a

nmcli device status

nmcli connection modify enp0s8 IPv4.method manual (make static)

nmcli connection modify ens18 IPv4.address 10.0.2.27/24

nmcli connection modify ens18 IPv4.gateway 10.0.2.11

nmcli connection modify ens18 IPv4.dns 8.8.8.8


---Compres/Ekstrak---

---Compress---

tar -cvf nama_file.tar file1 file2 file3

tar -zcvf nama.tar.gz nama_folder/file

tar -jcf nama.tar.bz2 nama_folder/file

zip nama_file.zip file1 file2 file3

zip -r nama_folder.zip folder_name

gzip nama_file

gzip -9 nama_file  (terrdapat level1-9 | level 1 compress file cepat hasil besar | level 9 proses compress lama hasil compres kecil)

gzip -c nama_file > nama_file.gz  (mempertahankan file asli)

 

 

---Ekstrak--

tar -xvf nama_file.tar

tar -xzvf nama_file.tar.gz

tar -xjvf nama_file.tar.bz2

unzip nama_file.zip

gunzip nama_file.gz


---Find---

find /home/yys  -mtime +20

find /home/yys -type f -iname "*.tar.gz" -mtime +4

grep -i 'panda' nama_file.txt   # mencari string dengan kata kunci panda, -i opsi untuk cari string baik kapital atau kecil

grep -i 'panda' -A3 -B3 nama_file.txt  #A3 menampilkan 3 baris setelahnya, B3 menampilkan 3 baris sebelumnya

grep -i 'panda\|singa\|zebra' nama_file.txt   # mencari string dengan kata kunci panda singa zebra pada file name_file.txt

#find kecuali

find /var/log/ -type f -iname "messages-*" ! -iname "messages*.gz"


#find kecuali dan gzip file dengan  file yang dimodifikasi lebih dari 1hari lalu

find /var/log/ -type f -iname "messages-*" ! -iname "messages*.gz" -mtime +1 -exec gzip -v9 {} \;


find /home/yys -type f -iname "*csv.gz" -mtime +10 -exec rm {} \;

find /home/yys -type f -iname "*csv.gz" -mtime +10 | wc -l

find /home/yys -type f -iname "*csv.gz" -mtime +10 | sort -rh

find Downloads -type f -mtime +30 -printf "%T@\t%Tc %6k MiB %p\n" | sort -n | cut -f 2- | head -n10


#mengambil pid dengan kata kunci jar

pgrep -f .jar


#cari dan kill

kill -9 $(pgrep -f .jar)

#cara search dan edit menggunakan sed, cari 172.27.27.5 dan ganti atau edit dengan 127.0.0.1
sed -i 's|172.27.27.5|127.0.0.1|' /var/lib/pgsql/12/backups/scripts/grant_db_transaction_data.sh


DOCKER/CONTAINER

KUBERNETES