<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Theerapong</title>
    <description>The latest articles on DEV Community by Theerapong (@theerapong).</description>
    <link>https://dev.to/theerapong</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F556920%2Fa05c6d84-2422-42fa-874a-d2e2c116fa99.jpeg</url>
      <title>DEV Community: Theerapong</title>
      <link>https://dev.to/theerapong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theerapong"/>
    <language>en</language>
    <item>
      <title>Install Kubernetes 1 master (self-hosted kubernetes)</title>
      <dc:creator>Theerapong</dc:creator>
      <pubDate>Mon, 21 Feb 2022 07:59:19 +0000</pubDate>
      <link>https://dev.to/theerapong/install-kubernetes-1-master-5b5l</link>
      <guid>https://dev.to/theerapong/install-kubernetes-1-master-5b5l</guid>
      <description>&lt;p&gt;Ubuntu 18.04  &amp;amp;&amp;amp;&amp;amp;  K8s 1.22.6   &amp;amp;&amp;amp;&amp;amp; Docker 19.03&lt;/p&gt;

&lt;p&gt;จะได้ K8s v1.20.14&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# the following commands for both Master &amp;amp; Workers&lt;/span&gt;

&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;sudo cat&lt;/span&gt; /sys/class/dmi/id/product_uuid
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw disable
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapoff &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;sudo sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'/swap/d'&lt;/span&gt; /etc/fstab
&lt;span class="o"&gt;}&lt;/span&gt;




&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;modprobe br_netfilter
lsmod | &lt;span class="nb"&gt;grep &lt;/span&gt;br_netfilter
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sysctl &lt;span class="nt"&gt;--system&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;







&lt;span class="nb"&gt;sudo &lt;/span&gt;kubeadm reset

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get remove docker-ce docker-ce-cli containerd.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get remove &lt;span class="nt"&gt;--purge&lt;/span&gt; docker-ce docker-ce-cli containerd.io &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;ca-certificates curl gnupg lsb-release &lt;span class="nt"&gt;-y&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/docker-archive-keyring.gpg
&lt;span class="nb"&gt;echo&lt;/span&gt;  &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce&lt;span class="o"&gt;=&lt;/span&gt;5:19.03.15~3-0~ubuntu-bionic docker-ce-cli&lt;span class="o"&gt;=&lt;/span&gt;5:19.03.15~3-0~ubuntu-bionic containerd.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="c"&gt;# sudo apt-get install docker-ce docker-ce-cli containerd.io -y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
newgrp docker
docker ps
&lt;span class="o"&gt;}&lt;/span&gt;



&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; /etc/docker
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl daemon-reload
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker
docker info | &lt;span class="nb"&gt;grep &lt;/span&gt;Cgroup
&lt;span class="o"&gt;}&lt;/span&gt;



&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; apt-transport-https ca-certificates curl
&lt;span class="nb"&gt;sudo &lt;/span&gt;curl &lt;span class="nt"&gt;-fsSLo&lt;/span&gt; /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/kubernetes.list
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="c"&gt;# sudo apt-get install -y kubeadm=1.19.16-00 kubelet=1.19.16-00 kubectl=1.19.16-00&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nv"&gt;kubeadm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.22.7-00 &lt;span class="nv"&gt;kubelet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.22.7-00 &lt;span class="nv"&gt;kubectl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.22.7-00
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-mark hold kubelet kubeadm kubectl
&lt;span class="o"&gt;}&lt;/span&gt;



&lt;span class="c"&gt;# the following commands for only One Master&lt;/span&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;kubeadm init &lt;span class="nt"&gt;--pod-network-cidr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.0.0/16

&lt;span class="c"&gt;# Then, copy the command from the result of the Master node to the Worker nodes. &lt;/span&gt;

kubectl create &lt;span class="nt"&gt;-f&lt;/span&gt; https://docs.projectcalico.org/archive/v3.20/manifests/tigera-operator.yaml
kubectl create &lt;span class="nt"&gt;-f&lt;/span&gt; https://docs.projectcalico.org/archive/v3.20/manifests/custom-resources.yaml

watch kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; calico-system
kubectl get nodes &lt;span class="nt"&gt;-o&lt;/span&gt; wide




&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube
&lt;span class="nb"&gt;sudo cp&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; /etc/kubernetes/admin.conf &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>[Thai] เกี่ยวกับ Chaos Engineering</title>
      <dc:creator>Theerapong</dc:creator>
      <pubDate>Wed, 16 Feb 2022 06:55:32 +0000</pubDate>
      <link>https://dev.to/theerapong/chaos-engineering-khuue--1377</link>
      <guid>https://dev.to/theerapong/chaos-engineering-khuue--1377</guid>
      <description>&lt;h3&gt;
  
  
  คร่าวๆก็คือว่า
&lt;/h3&gt;

&lt;p&gt;(จาก &lt;a href="https://www.youtube.com/watch?v=rgfww8tLM0A"&gt;https://www.youtube.com/watch?v=rgfww8tLM0A&lt;/a&gt; )&lt;/p&gt;

&lt;p&gt;Netflix เปลี่ยนจากวัฒนะธรรมที่ว่า  ถ้าระบบ fail จะต้องทำอะไร&lt;br&gt;
ไปเป็น เมื่อไหร่ระบบจะ fail&lt;/p&gt;

&lt;p&gt;ทาง Netflix จึงสร้าง chaos platform ใว้  เพื่อหาว่า traffic เท่าไหร่จะกระทบระบบ  หรือ เมื่อไหร่ระบบจะ fails&lt;/p&gt;

&lt;p&gt;คือจะมีการทดลองบน production ก่อนที่ลูกค้าจะเจอ issues&lt;/p&gt;

&lt;p&gt;โดยใช้เครื่องมือชื่อว่า  ChAP: Chaos Automation Platform   (จะมี Chaos Monkey , และ อื่นๆ)&lt;/p&gt;




&lt;h3&gt;
  
  
  แล้ว chaos engineering ต่างจาก testing อย่างไร
&lt;/h3&gt;

&lt;p&gt;ในหนังสือ Oreilly (มีทฤษฎีเยอะมาก) เขากล่าวว่า testing โดยพวก fault injection ก็จะได้แค่ผลลัพธ์แค่ผลลัพธ์เดียว&lt;/p&gt;

&lt;p&gt;แต่าถ้าอยากที่จะหาว่ามีวิธีอะไรบ้างที่ complex system จะ fail ได้  ก็อาจใช้แนวทาง testing แบบ injecting communication failures  เช่น latency และ errors (งง หาอ่านอีกทีครับ)&lt;/p&gt;

&lt;p&gt;แต่ experiment ที่ทำกับ chaos engineering  เราจะได้ knowledge ใหม่ (หรือความรู้ใหม่), information ใหม่ๆ และแนวทางใหม่ๆ&lt;/p&gt;

&lt;p&gt;ในหนังสือบอกว่า   chaos engineering คือรูปแบบของ experimentation ที่จะ gernerate ความรู้ใหม่ๆของระบบ (infra/cluster) ให้กับเรา   , ซึ่งจะเรียกว่า testing ไม่ได้ !!&lt;/p&gt;




&lt;h3&gt;
  
  
  คอนเซ็ปหลักการทำ  (ยังไม่ชัวร์)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;สร้างสมมติฐาน (hypothesis) และสรุป  เช่น ถ้าเราทำบางสิ่งบางอย่าง   ระบบจะ fail&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vary Real World Events (แก้อีกที)&lt;br&gt;
เพราะการทำ chaos นี้มันจะทำให้เกิดบางเหตุการณ์ real world event  เช่น &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ถ้าตัดการเชื่อมต่อระหว่าง server กับ internet ดังนั้น server ก็จะ down แน่นอน ,  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;เพิ่ม event ที่คาดไม่ถึง  เพื่อให้รบกวน (disturb) ตัว system/application  (Steady State)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;รันบน production&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ทำการ automate บ่อยๆ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ระบุผลกระทบ  และหาวิธีลดผลกระทบที่จะเกิดขึ้น&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เนื่องจาก run บน production , จะไม่ให้กระทบกับ users&lt;/p&gt;




&lt;h1&gt;
  
  
  🛠 เครื่องมือในการทำ Chaos Engineering ดังนี้
&lt;/h1&gt;

&lt;p&gt;บางเครื่องมือเริ่มต้นจาก Netflix , บางอันอาจไม่ใช่&lt;br&gt;
บางเครื่องมืออาจจะไม่ถูก support แล้ว (อาจต้องหาตัวอื่นแทน)&lt;/p&gt;

&lt;h3&gt;
  
  
  Chaos Monkey
&lt;/h3&gt;

&lt;p&gt;จะ random เข้าไป kill ตัว services/micro-services แล้วดูว่าตัว server จะเป็นยังไง&lt;/p&gt;

&lt;p&gt;มีสอง dependencies ที่ใช้ คือ MySQL และ Spinnaker (คือที่ Netflix ใช้)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MySQL ใช้ track ตัว termination, schedule &lt;/li&gt;
&lt;li&gt;Spinnaker คือ continuous delivery platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*** ถ้าใน GitLab ใช้ ChaosKube แทน (มันคือ Chaos Monkey นะครับ)&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠 Chaos Gorilla
&lt;/h3&gt;

&lt;p&gt;จะ kill ทั้ง Availability Zone &lt;/p&gt;




&lt;h3&gt;
  
  
  🛠 Chaos Kong
&lt;/h3&gt;

&lt;p&gt;จะ kill ทั้ง region เลย&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠 Latency Monkey
&lt;/h3&gt;

&lt;p&gt;จะสร้าง delay ให้กับ requests&lt;br&gt;&lt;br&gt;
แล้วเราค่อยมาดูว่าจะเกิดอะไรขึ้นกับ cluster&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠 Janitor Monkey
&lt;/h3&gt;

&lt;p&gt;หาว่า resources อะไรที่ไม่ถูกใช้งาน&lt;br&gt;
ถ้าไม่ใช้ก็ต้องลบทิ้ง&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠 Security Monkey
&lt;/h3&gt;

&lt;p&gt;หาว่ามีการตั้งค่าอะไรที่ไม่ถูกต้องบ้าง เช่น  มีการคอนฟิก security group ที่ผิด ,    คอยดูว่า SSL certificates ยังมีความถูกต้อง (ไม่ใกล้หมดอายุ)&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠 Facebook Storm
&lt;/h3&gt;

&lt;p&gt;เกี่ยวกับปัญหาใดๆใน data center&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠 Litmus Chaos
&lt;/h3&gt;

&lt;p&gt;(จาก &lt;a href="https://github.com/litmuschaos/litmus"&gt;https://github.com/litmuschaos/litmus&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เป็น Chaos Engineering platform&lt;/li&gt;
&lt;li&gt;ทำ chaos บน K8s on-premises ได้
&lt;/li&gt;
&lt;li&gt;ทำบน staging ก่อน  แล้วค่อยไปทำบน production เพื่อหา bug หรือข่องโหว่ได้&lt;/li&gt;
&lt;li&gt;มีหลายๆ experiments ให้ที่ &lt;a href="https://hub.litmuschaos.io/"&gt;https://hub.litmuschaos.io/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  โปรแกรมนี้  ถ้ามองจาก high-level ก็จะประกอบด้วย
&lt;/h5&gt;

&lt;p&gt;(1) Chaos Control Plane : เป็น management tool , ใช้ทำ workflows&lt;br&gt;
(2) Chaos Execution Plane Services : เป็น agent ที่จะ execute &amp;amp; monitor การ experiment ใน K8s&lt;/p&gt;

&lt;h5&gt;
  
  
  Use cases ของ Litmus Chaos
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;สำหรับ Developers  : ให้เป็น extension ของ unit testing หรือเป็นส่วนหนึ่งของ testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;สำหรับคนทำ CI/CD pipeline : ทำ stage ให้กับ Litmus นี้  เพื่อหาว่า pipeline มัน fail เพราะ bug อะไร&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;สำหรับ SREs : ใช้บอกจุดอ่อนของ system/infra  ก็เพิ่มเพิ่มความทนทาน (resilience)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🛠 Gremlin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;เป็น Software-as-a-Service หรือ Chaos-as-a-Service&lt;/li&gt;
&lt;li&gt;จะโจมตี system , network เพื่อทดสอบความทนของ system&lt;/li&gt;
&lt;li&gt;เราต้องกำหนดเองว่าการโจมตีไหนเหมาะกับเรา (เราต้องรับผิดชอบตัวเอง)&lt;/li&gt;
&lt;li&gt;อาจต้องมีการติดตั้ง agent ใน server/container/pods ของเป้าหมาย&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  ตอนติดตั้ง
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;allow port 11371 สำหรับ gpg ด้วย&lt;/li&gt;
&lt;li&gt;ถ้าใช้ port ของ gpg ไม่ได้   ให้เปลี่ยนไปใช้ port 80 แทน ดังนั้น คำสั่งในการติดตั้งคือ
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Gremlin&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb https://deb.gremlin.com/ release non-free"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/gremlin.list

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key adv &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; &lt;span class="nt"&gt;--keyserver&lt;/span&gt; hkp://keyserver.ubuntu.com:80 &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 9CDB294B29A5B1E2E00C24C022E8EF3461A50EF6

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; gremlin gremlind

&lt;span class="c"&gt;# Register Gremlin client to its Control Plane&lt;/span&gt;
gremlin init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://gremlin.com/"&gt;https://gremlin.com/&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  ตัวฟรีทำอะไรได้บ้าง
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;ใช้ได้ 1 team&lt;/li&gt;
&lt;li&gt;ติดตั้งได้ 1 agent&lt;/li&gt;
&lt;li&gt;2 Targets ต่อเดือน (แต่ละ target โจมตีได้ไม่จำกัด)&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  ตย scenario
&lt;/h5&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Blackhole]
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Unavailable Dependency: ถ้า dependency มัน unavailable จากนั้น users จะเจออะไร&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Database Secondary Failover Time: เมื่อมีการ failover ที่ database  ทดสอบว่าจะเร็วเท่าไหร่ที่ app จะเปลี่ยน connection จาก primary database ไปยัง secondary database&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kubernetes - Availability - Blackhole a Kubernetes node : จะเกิดอะไรขึ้นถ้า 1 node ของ K8s ไม่สามารถใช้งานได้&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ CPU]
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Find Anomalous CPU Consumption : ทดสอบ CPU consumption บน host หรือ บน containers แบบ random  จากนั้นเราก็จะเห็นว่าตัว monitor ของเราตรวจจับการใช้งาน CPU ได้อย่างถูกต้องหรือไม่&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Monitoring &amp;amp; Alerting Verification : โปรแกรม Gremlin จะรัน CPU attack ให้กับ VM  แล้วเราก็จะสามารถเห็น CPU มัน spike ขึ้นสูง&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Disk]
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Testing Kubernetes Storage Volume Limits : ทดสอบว่าขนาดพื้นที่ space ที่ pod ใช้   ยังไม่ถึง limit ที่กำหนดไว้ตรงคอนฟิก Deployment, นอกจากนี้เราก็จะเห็นว่าจะเป็นอย่างไรถ้ามี disk เต็ม (ตัว workload จะ handle อย่างไร , จะ crash หรือ data loss หรือไม่)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ DNS]
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes - Availability - DNS outage : จะทดสอบให้ DNS ใช้งานไม่ได้,    แล้วมาดูว่าตัว app ยังสามารถรับส่ง traffic ระหว่าง users ได้หรือไม่ , (K8s จะ handle อย่างไร ซึ่งถ้ามีการตั้งค่า DNS failover อย่างถูกต้อง ทาง users ก็ไม่ควรที่จะได้รับผลกระทบ) &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ IO]
&lt;/h5&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Latency]
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Unreliable Networks : เนื่องจาก microservice ต้องมีการเรียกใช้ API , จะกระทบกับ users อย่างไร ถ้าเรียก API ใช้เวลา 100 วินาที หรือ 1,000 วินาที &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Memory]
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes - Validate Container Resilience Mechanism: OOMKiller -  ปกติตัว Linux จะมีเครื่องมือจัดการ Memory ที่ชื่อว่า OOMKiller , การทดสอบนี้จะดูว่าจะเกิดอะไรขึ้นถ้ามีการใช้งาน Memory สูง , ตัว OOMKiller ของ Linux จะ work หรือไม่&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;ที่เห็น : Lens หลุด&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Test Monitoring and Alerting for the Basics : จะทดสอบใช้งาน memory ให้สูงๆ แล้วเราก็ดูว่า เครื่องมือ monitoring ของเราสามารถตรวจจับการใช้งาน memory ได้อย่างถูกต้องหรือไม่&lt;/li&gt;
&lt;/ul&gt;


&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Package Loss]
&lt;/h5&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Process Killer]
&lt;/h5&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Shutdown]
&lt;/h5&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Thread Bomb]
&lt;/h5&gt;

&lt;h5&gt;
  
  
  💻 [เกี่ยวกับ Time Travel]
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;DynamoDB Timeout Testing : ตรวจสอบว่า DynamoDB Java client ถูกคอนฟิกด้วย 500ms connection timeout&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  เพิ่มเติม
&lt;/h5&gt;

&lt;p&gt;ถ้าใช้ scenarios ประเภท attack CPU   แล้วถ้าใช้คำสั่ง ps -ef | grep gremlin   จะเห็นว่า จริงๆแล้ว ตัว agent ก็รันโดยการส่ง parameter เข้าไปดังรูป&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5_kQM-kU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxrztc221ib62kbn8hu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5_kQM-kU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxrztc221ib62kbn8hu9.png" alt="Image description" width="880" height="272"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  วิธีที่มีคนทำ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;อาจเอาขั้นตอนของ chaos ไปอยู่ใน CD pipeline&lt;/li&gt;
&lt;li&gt;ส่วนเครื่องมืออย่าง Gremlin ไม่จำเป็นต้องเอากระบวนการ chaos นี้ไว้ใน CD pipeline คือ  ถ้าอยากจะทดสอบ VM หรือ cluster ก็เริ่มทดสอบเมื่อไหร่ก็ได้&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;รายละเอียดยังมีเพิ่มครับ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;...&lt;br&gt;
อ้างอิง&lt;br&gt;
&lt;a href="https://principlesofchaos.org/"&gt;https://principlesofchaos.org/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://learning.oreilly.com/library/view/chaos-engineering/"&gt;https://learning.oreilly.com/library/view/chaos-engineering/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=3CNNhK9JTDk"&gt;https://www.youtube.com/watch?v=3CNNhK9JTDk&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>CVSS หรือการระบุความรุนแรงของช่องโหว่</title>
      <dc:creator>Theerapong</dc:creator>
      <pubDate>Sat, 06 Feb 2021 09:10:21 +0000</pubDate>
      <link>https://dev.to/theerapong/hi-pc6</link>
      <guid>https://dev.to/theerapong/hi-pc6</guid>
      <description>&lt;p&gt;CVSS หรือ The Common Vulnerability Scoring System คือระบบการบอกระดับความรุนแรงของช่องโหว่ (ในระบบไอทีต่างๆ) ซึ่งการมี CVSS นี้ก็จะช่วยให้ software developers, testers, security engineer หรือเจ้าหน้าที่ทางด้านไอทีอื่นๆ สามารถประเมินได้ว่า ช่องโหว่ที่มีอยู่นั้นสามารถถูกคุกคามได้มากน้อยเพียงใด และสามารถบรรเทาหรือรับมือได้อย่างไร&lt;/p&gt;

&lt;h1&gt;
  
  
  ช่องโหว่ในทางซอฟแวร์คือ ?
&lt;/h1&gt;

&lt;p&gt;ช่องโหวของซอฟแวร์ หรือ a software vulnerability คือข้อบกพร่องใด้ๆก็ตามในโค๊ด (sorce code) ซึ่งอาจจะถูกเจาะได้ หรือผู้โจมตีสามารถใช้ประโยชน์จากข้อบกพร่องที่มีอยู่นี้ ซึ่งสาเหตุของช่องโหว่ อาจมาจากตรรกะการเขียนที่ผิดพลาด (faulty logic), มีกระบวนการตรวจสอบต่างๆที่ไม่เพียงพอ (inadequate validation mechanisms), ไม่มีการป้องกันเวลาโปรแกรมใช้หน่วยความจำเกิน (buffer overflows), APIs ไม่มีการป้องกัน หรือเพราะใช้ libraries ของคนอื่น ซึ่งสิ่งเหล่านี้มักเป็นปัญหาที่ทำให้เกิดช่องโหว่&lt;/p&gt;

&lt;p&gt;ช่องโหว่ที่มีอยู่ก็จะเป็นความเสี่ยงของผู้ใช้และองค์กร ซึ่งผู้โจมตีก็อาจจะสามารถเจาะเข้าสู่ระบบ, ทำลายระบบ, ทำให้ระบบมีการหยุดทำงาน, ขโมยข้อมูล หรือติดตั้งโปรแกรมอันตรายต่างๆ (malware) เข้าสู่ระบบ เว้นแต่ว่า เมื่อช่องโหว่นั้นๆถูกพบและถูกแก้ไข (ถูก patch) โดยการอัพเดท ก็จะทำให้ระบบมีความปลอดภัย&lt;/p&gt;

&lt;h1&gt;
  
  
  ช่องโหว่ถูกรายงานอย่างไร ?
&lt;/h1&gt;

&lt;p&gt;วิธีการรายงานช่องโหว่ก็จะขึ้นอยู่กับประเภทของซอฟแวร์ซึ่งถูกพบ ชนิดของช่องโหว่ และปัจจัยต่างๆ โดยปกติแล้วช่องโหว่จะถูกพบและรายงานโดยนักวิจัย หรือนักทดสอบระบบ ไม่ว่าจะเป็นคนที่ทำหน้าที่นี้แบบ full-time หรือ คนที่เป็น freelance แบบนักล่าเงินรางวัล (bug bounty)&lt;/p&gt;

&lt;p&gt;ช่องโหว่เล็กๆน้อยๆที่ไม่เป็นอันตรายมาก ที่สามารถแก้ไขโดยผู้ใช้งานทั่วไปได้ ก็อาจะไม่ถูกรายงาน แต่ถ้ามีช่องโหว่ระดับอันตรายแล้วถูกพบโดยเหล่าอาชยากรทางไซเบอร์ ก็พวกเขาอาจจะไม่รายงานช่องโหว่ดังกล่าวให้กับเจ้าของซอฟแวร์ ซึ่งตามหลักแล้วเมื่อพบช่องโหว่ก็ควรรายงานให้กับบริษัทผู้พัฒนาซอฟแวร์นั้นๆ&lt;/p&gt;

&lt;p&gt;ช่องโหว่ที่พบในซอฟต์แวร์ที่มีลิขสิทธิ์อาจจะถูกรายงานไปยังบริษัทต้นทาง หรือองค์กร MITRE แต่ถ้าเป็นช่องโหว่ที่พบในพวก open source ก็อาจจะรายงานไปยังกลุ่ม community ของ open source นั้น&lt;/p&gt;

&lt;p&gt;เมื่อช่องโหว่ถูกรายงานไปยังหน่วยงานเช่น MITRE จากนั้นทางหน่วยงานก็จะระบุหมายเลขของช่องโหว่ดังกล่าว แล้วทาง MITRE ก็จะแจ้งไปยังหน่วยที่เกี่ยวข้องต่อไป (vendor หรือ project manager) ซึ่งผู้รับผิดชอบต่างๆก็จะมีเวลาให้ 30 ถึง 90 วันในการแก้ไขช่องโหว่ดังกล่าวก่อนที่รายละเอียดของช่องโหว่จะถูกเปิดเผยต่อสาธาราณะ ซึ่งนี่ก็จะเป็นการลดความเป็นไปได้ที่ผู้โจมตี (attackers) อาจจะเจาะช่องโหว่ก่อนที่จะถูกแก้ไข&lt;/p&gt;

&lt;h1&gt;
  
  
  CVSS คือ?
&lt;/h1&gt;

&lt;p&gt;CVSS หรือ The Common Vulnerability Scoring System คือระบบ (มาตรฐาน, standard) การกำหนดระดับความรุนแรงของช่องโหว่ ซึ่งระบบหรือมาตรฐานนี้ผู้ภายใต้การกำกับดูแลของหน่วยงาน FIRST (the Forum of Incident Response and Security Teams) ซึ่งเป็นองค์กรไม่แสวงผลกำไร ซึ่งระบบหรือมาตรฐานดังกล่าวได้นิยามความรุนแรงของช่องโหล่ตั้งแต่ 0.0 จนถึง 10.0 (ซึ่งระดับ 10.0 ถือว่ามีความรุนแรงสูงสุด) ซึ่งระบบหรือมาตรฐานล่าสุด (เมื่อ June 2019) คือเวอร์ชั่น CVSS 3.1&lt;/p&gt;

&lt;p&gt;ระบบหรือมาตรฐานดังกล่าวก็จะช่วยให้นักวิจัยทางด้าน security, ผู้ใช้ หรือองค์กรต่างๆได้มีมาตรฐานในการวัด การรายงานและติดตามความรุนแรงของช่องโหว่ได้เข้าใจได้ตรงกัน และ CVSS ก็จะช่วยให้ทีม security และนักพัฒนาสามารถเรียงลำดับความสำคัญในการรับมือกับภัยคุกคามและพร้อมจัดการกับทรัพยากร (hardware, software) ได้อย่างมีประสิทธิภาพ&lt;/p&gt;

&lt;h1&gt;
  
  
  CVSS ระบุระดับความรุนแรงได้อย่างไร?
&lt;/h1&gt;

&lt;p&gt;ระดับความรุนแรงของช่องโหว่แต่ละตัว หรือแต่ละ CVSS นั้น เป็นการนับคะแนน (scoring) จากหลายๆปัจจัยหรือองค์ประกอบหรือ Base score รวมกัน ซึ่งแต่ละปัจจัยหรือแต่ละองค์ประกอบก็จะมีเกณฑ์การนับคะแนนเฉพาะของตัวเอง ซึ่งแรกๆนั้น ผู้รายงานช่องโหว่อาจจะกำหนดระดับความรุนแรงชั่วคราวได้&lt;/p&gt;

&lt;h2&gt;
  
  
  Base score ของCVSS ถูกวัดโดย
&lt;/h2&gt;

&lt;p&gt;– คะแนน subscore ความสำเร็จของการถูกเจาะ&lt;br&gt;
– คะแนน subscore ผลกระทบ&lt;br&gt;
– คะแนน subscore ขอบเขต&lt;br&gt;
แต่ละ subscore ก็จะมีตัวชี้วัดที่จะใช้ประเมินขอบเขตของการโจมตี, ความสำคัญของข้อมูลและระบบที่ได้รับผลกระทบ&lt;/p&gt;

&lt;h2&gt;
  
  
  Base score
&lt;/h2&gt;

&lt;p&gt;ตัว Base score จะแสดงให้เห็นลักษณะหรือพฤติกรรมเฉพาะของช่องโหว่ได้ และลักษระดังกล่าวไม่ควรที่จะเปลี่ยนไปเปลี่ยนมา สำหรับการคำนวณหรือนับคะแนนของ base score นั้น ทางผู้รายงานช่องโหว่ต้องคำนวณจากทั้งสาม subscore (ที่กล่าวมาก่อนหน้า)&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploitability subscore
&lt;/h2&gt;

&lt;p&gt;Exploitability subscore หรือคะแนน subscore ความสำเร็จของการถูกเจาะ จะวัดจากองค์ประกอบต่างที่ทำให้เกิดช่องโหว่ ซึ่งองค์ประกอบเหล่านี้ก็จะช่วยให้นักวิจัยรู้ว่าช่องโหว่นี้จะสามารถถูกเจาะโดยผู้โจมตีได้อย่างไร ซึ่ง subscore นี้ประกอบด้วยตัวชี้วัดดังต่อไป&lt;/p&gt;

&lt;h1&gt;
  
  
  Reference:
&lt;/h1&gt;

&lt;p&gt;Eddie Segal,&lt;br&gt;
&lt;a href="https://blog.malwarebytes.com/malwarebytes-news/2020/05/how-cvss-works-characterizing-and-scoring-vulnerabilities/"&gt;https://blog.malwarebytes.com/malwarebytes-news/2020/05/how-cvss-works-characterizing-and-scoring-vulnerabilities/&lt;/a&gt;&lt;br&gt;
[1] &lt;a href="https://www.first.org/cvss/specification-document"&gt;https://www.first.org/cvss/specification-document&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
