<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kubernetes &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<atom:link href="https://myifew.com/tag/kubernetes/feed/" rel="self" type="application/rss+xml" />
	<link>https://myifew.com</link>
	<description></description>
	<lastBuildDate>Wed, 15 Sep 2021 04:24:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://myifew.com/wp-content/uploads/2018/07/cropped-logo6-ts-32x32.png</url>
	<title>Kubernetes &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<link>https://myifew.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>วิธีเก็บ Sensitive Data บน Kubernetes ด้วย Secrets</title>
		<link>https://myifew.com/6012/sensitive-data-on-kubernetes/</link>
					<comments>https://myifew.com/6012/sensitive-data-on-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Tue, 14 Sep 2021 12:21:12 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[The Twelve Factor]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=6012</guid>

					<description><![CDATA[จากบล็อกที่แล้วได้ลองทำ Kubernetes บน Amazon EKS แบบง่ายๆ ด้วย eksctl แต่ก็ยังมีจุดที่กังวลอยู่ คือเรื่องการระบุ Sensitive Data เช่น Password, Token ต่างๆ ลงใน Environment&#8230;]]></description>
										<content:encoded><![CDATA[
<p>จากบล็อกที่แล้วได้<a rel="noreferrer noopener" href="https://myifew.com/5972/kubernetes-on-amazon-eks/" data-type="URL" data-id="https://myifew.com/5972/kubernetes-on-amazon-eks/" target="_blank">ลองทำ Kubernetes บน Amazon EKS แบบง่ายๆ ด้วย eksctl</a> แต่ก็ยังมีจุดที่กังวลอยู่ คือเรื่องการระบุ Sensitive Data เช่น Password, Token ต่างๆ ลงใน Environment Variable ที่ได้เขียนไว้ในไฟล์ Deployment YML </p>



<p>ซึ่งทาง Kubernetes เอง ได้ทำฟีเจอร์มารองรับการแก้ปัญหานี้แล้ว เป็น Kind ประเภท Secret นั่นเองครับ เลยขอบันทึกวิธีทำไว้สักหน่อย</p>



<span id="more-6012"></span>



<h2 class="wp-block-heading">ทำความเข้าใจก่อน ทำไมต้องแยก Sensitive Data</h2>



<p>ก่อนจะไปถึงวิธีการ มาทำความเข้าใจก่อนว่าทำไมเราต้องแยก Sentitive Data ออกไป (ขอนอกเรื่อง Kubernetes สักหลายย่อหน้า เดี๋ยวโพสต์จะสั้นไป!!)</p>



<p>หากใครทำงานคนเดียว เก็บ Source Code ไว้เป็น Private ในเครื่องตัวเองเท่านั้น (หรือ Git Repository แบบ Private) และไม่ได้ใช้ Clound หรือทำพวก Scaling ด้วยแล้ว อาจไม่จำเป็นต้องใช้ก็ได้</p>



<p>แต่ถ้าเราทำงานเป็นทีมเมื่อไร เรื่องการกำหนดขอบเขตการเข้าถึงข้อมูลเป็นเรื่องสำคัญมาก เราคงไม่ต้องการให้ทีมทุกคนรู้ Password ในการเข้าสู่ระบบ หรือไม่ต้องการให้รู้ Token ในการควบคุม API ของบริการสำคัญๆ ดังนั้นแล้ว เราจะมีวิธีการจัดการพวก Sensitive Data กันมาบ้างอยู่แล้ว ที่นิยมทำกัน เช่น</p>



<ol class="wp-block-list"><li><strong>ง่ายสุดๆ</strong> คือ ฝัง Sensitive Data ลงในโค้ดเลย แล้ว if-else จากเงื่อนไขอะไรบางอย่าง เช่น IP Server, URL Domain, Environment Variable</li><li><strong>ซับซ้อนขึ้นมาหน่อย</strong> คือ ทำไฟล์ Config แยกจากโค้ด และ ignore ไม่ขึ้นไปอยู่บน Repository ดังนั้นเมื่อ Deploy เสร็จ จะมีทีมหลีดหรือผู้มีสิทธิ์เข้าถึง Sensitive Data และ Server เท่านั้น ที่จะไปวางไฟล์ Config (หรือไฟล์ Config อาจจะไปอยู่บน Server แต่ละ Environment รอไว้อยู่แล้ว)</li><li><strong>ซับซ้อนขึ้นไปอีก</strong> คือ ผู้ดูแลระบบสร้าง Environment Variable ไว้ในแต่ละ Server Environment จากนั้น เมื่อ Deploy Code ไปที่ Environment ไหน โค้ดที่เขียนก็จะเรียกใช้ Environment Variable ตามชื่อ Key ที่ตกลงกันไว้</li><li><strong>Advance ไปเลย</strong> คือ ทำ Config File Server แยกไปอีกเครื่อง และ sync มาที่ server ของระบบที่จะใช้งาน จากนั้นโค้ดจะเรียกใช้ Config ตามที่อยู่ของไฟล์ที่ตกลงกันไว้</li></ol>



<p>และวิธีอื่นๆ อีกหลายวิธี ซึ่งแต่ละวิธีมันก็มีความเหมาะสมที่จะใช้งานในแต่ละระบบและกระบวนการทำงานของแต่ละทีม</p>



<p>แต่ถ้าทีมทำงานมีเงื่อนไขอยากทำ Scaling, Automate หรือ DevOps ล่ะ เช่น</p>



<ol class="wp-block-list"><li>Source Code ต้องมาจากแหล่งเดียว และเป็นชุดเดียวกันเสมอในทุก Environment (Single Source of Truth)</li><li>Sensitive Data จะต้องรู้ได้บางคนเท่านั้นที่มีสิทธิ์</li><li>โค้ดจะต้องทำ Continuous Integration และ Continuous Deployment ได้</li><li>โค้ดจะต้อรองรับการทำงานบน Server ที่ Scaling ได้</li><li>มีการควบคุม Version ใน Deployment (Version Control)</li></ol>



<p>เอาแค่ 5 เงื่อนไขนี้ วิธีการข้างต้น 4 ข้อ ก็ดูจะไม่ครอบคลุมทุกเงื่อนไข</p>



<p>ดังนั้น วิธีใช้ Secret ใน <meta charset="utf-8">Kubernetes ที่จะเขียนในโพสต์นี้ จะเป็นวิธีการมาตรฐานที่ Kubernetes ได้ทำฟีเจอร์ออกมาให้ใช้ มีความคล้ายกับการทำ Config File Server เพียงแต่เป็นเหมือน Container ที่ใช้คุณสมบัติของ Kubernetes นั่นเอง</p>



<h2 class="wp-block-heading">โครงสร้างของ Secret ใน Kubernetes</h2>



<p>ตามภาพเลยครับ จะแยก Secret ออกมาจาก Pod (แต่ยังอยู่ใน Node และ Cluster เดียวกัน) ดังนั้น เวลาจะใช้งานใน Pod ไหนก็ต้อง จะต้องระบุ Secret และ Key ที่จะใช้ เพื่ออ้างอิงถึง Sensitive Data ที่เราต้องการ</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1200" height="721" src="https://myifew.com/wp-content/uploads/2021/09/k8s-secret-1200x721.png" alt="" class="wp-image-6022" srcset="https://myifew.com/wp-content/uploads/2021/09/k8s-secret-1200x721.png 1200w, https://myifew.com/wp-content/uploads/2021/09/k8s-secret-1024x615.png 1024w, https://myifew.com/wp-content/uploads/2021/09/k8s-secret-768x461.png 768w, https://myifew.com/wp-content/uploads/2021/09/k8s-secret-1536x923.png 1536w, https://myifew.com/wp-content/uploads/2021/09/k8s-secret-2048x1231.png 2048w, https://myifew.com/wp-content/uploads/2021/09/k8s-secret-700x421.png 700w, https://myifew.com/wp-content/uploads/2021/09/k8s-secret.png 2255w" sizes="(max-width: 1200px) 100vw, 1200px" /><figcaption>รูปจาก <a rel="noreferrer noopener" href="https://livebook.manning.com/book/gitops-and-kubernetes/chapter-7/v-6/57" target="_blank">https://livebook.manning.com/book/gitops-and-kubernetes/chapter-7/v-6/57</a></figcaption></figure></div>



<p class="has-text-align-center has-light-green-cyan-background-color has-background"><strong>ตัวอย่างที่จะใช้ในโพสต์ต่อไปนี้ จะอ้างอิงจากโพสต์เดิมที่ </strong><br><strong><a rel="noreferrer noopener" href="https://myifew.com/5972/kubernetes-on-amazon-eks/" data-type="URL" data-id="https://myifew.com/5972/kubernetes-on-amazon-eks/" target="_blank">ลองทำ Kubernetes บน Amazon EKS แบบง่ายๆ ด้วย eksctl</a></strong></p>



<h2 class="wp-block-heading">เริ่มต้นสร้าง Kubernetes Secret</h2>



<p>สร้างไฟล์ YML ขึ้นมา เพื่อสร้างชุด secret โดยในที่นี้ผมใช้ไฟล์ชื่อ eks-myweb-secret.yml</p>



<pre class="wp-block-code"><code>apiVersion: v1
kind: Secret
metadata:
  name: myweb-secret
  namespace: myweb
  labels:
    app: myweb-secret
data:
  secret_username: aWZldw==
  secret_password: cGFzczEyMzQ=</code></pre>



<p>จากนั้นทำการ apply ด้วยคำสั่งดังนี้</p>



<pre class="wp-block-code"><code>kubectl apply -f <strong>eks-myweb-secret.yml</strong></code></pre>



<p>และลองทำการเช็คดูว่าสร้างสำเร็จไหม ด้วยคำสั่งดังนี้</p>



<pre class="wp-block-code"><code>kubectl get secrets -n <strong>myweb</strong></code></pre>



<p>โดยในที่นี้ผมใช้ namespace ชื่อ myweb นะครับ</p>



<p>เราจะเห็นผลลัพธ์ตามภาพด้านล่าง</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1040" height="122" src="https://myifew.com/wp-content/uploads/2021/09/eks-get-secret.png" alt="" class="wp-image-6014" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-get-secret.png 1040w, https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-1024x120.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-768x90.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-700x82.png 700w" sizes="(max-width: 1040px) 100vw, 1040px" /></figure>



<p>สังเกตว่า Type เป็น Opaque หมายถึง เป็นการกำหนดการเข้าถึงเองโดยผู้ใช้งาน ซึ่ง Type นี้จะเป็น default ให้อัตโนมัติ หากอยากใช้ Type อื่นๆ ก็มีให้เลือก 8 ตัว อยู่ที่รูปแบบที่เราอยากจะทำ สามารถไปหาอ่านได้ที่ <a href="https://kubernetes.io/docs/concepts/configuration/secret/#secret-types" data-type="URL" data-id="https://kubernetes.io/docs/concepts/configuration/secret/#secret-types">Kubernetes Secret</a> </p>



<h2 class="wp-block-heading">มาดูรายละเอียดภายใน Secret กัน</h2>



<p>หากต้องการดูรายละเอียดว่า Secret นี้มีอะไร ให้ใช้คำสั่งนี้</p>



<pre class="wp-block-code"><code>kubectl describe secrets/<strong>myweb-secret</strong> -n <strong>myweb</strong></code></pre>



<p>โดยชื่อ myweb-secret คือชื่อ Secret ของผมนะ (ตามที่ระบุใน YML File )</p>



<p>จะแสดงรายละเอียดของ Secret ขึ้นมา</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1114" height="340" src="https://myifew.com/wp-content/uploads/2021/09/eks-describe-secret.png" alt="" class="wp-image-6015" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-describe-secret.png 1114w, https://myifew.com/wp-content/uploads/2021/09/eks-describe-secret-1024x313.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-describe-secret-768x234.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-describe-secret-700x214.png 700w" sizes="(max-width: 1114px) 100vw, 1114px" /></figure>



<p>คราวนี้เราเห็นแล้วว่า Secret มี Key อะไรบ้าง แต่อยากเห็นเนื้อหาข้างใน ก็สามารถดูได้ด้วยนะครับ ด้วยคำสั่งนี้</p>



<pre class="wp-block-code"><code>kubectl get secret <strong>myweb-secret</strong> -n <strong>myweb</strong> -o jsonpath='{.data}'</code></pre>



<p>เราก็จะเห็นข้อมูลใน Secret ดังนี้</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="108" src="https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-data-1200x108.png" alt="" class="wp-image-6016" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-data-1200x108.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-data-1024x92.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-data-768x69.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-data-700x63.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-get-secret-data.png 1312w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p>และหากใครใช้ Mac หรือ Linux ก็ decode ข้อมูล base64 ออกมาดูได้เลยว่าคืออะไร ตามภาพครับ</p>



<h2 class="wp-block-heading">ทำให้ Pod เรียกใช้งานตัวแปรใน Secret</h2>



<p>เมื่อเราสร้าง Secret รอไว้แล้ว คราวนี้ถึงเวลาเรียกใช้ โดยผมได้แก้ไข Source Code ให้มีการอ่าน Environment จาก Secret ไว้ สองตัว คือ SECRET_USERNAME กับ SECRET_PASSWORD</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="864" height="660" src="https://myifew.com/wp-content/uploads/2021/09/eks-secret-code-test.png" alt="" class="wp-image-6017" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-secret-code-test.png 864w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-code-test-768x587.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-code-test-700x535.png 700w" sizes="auto, (max-width: 864px) 100vw, 864px" /></figure>



<p>จากนั้นทำการ build image, tag และ push image ไปไว้ใน Docker Repo เป็น version 3 (docker.io/ifew/docker-test-php:v3)</p>



<p>ต่อมา เราจะแก้ไขไฟล์ Deployment YML ที่เอาไว้สร้าง Pod, โดยแต่เดิม มีการเรียกใช้ Environment Variable ตรงๆ ในไฟล์เลย ดังนี้</p>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb-deployment
  namespace: myweb
  labels:
    app: myweb
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: phpfpm
        image: docker.io/ifew/docker-test-php:v3
        ports:
        - containerPort: 80
        env:
        - name: MYSQL_DB_HOST
          value: mydb.host.com
        - name: MYSQL_DATABASE
          value: test
        - name: MYSQL_USER
          value: ifew 
        - name: MYSQL_PASSWORD
          value: password1234
        - name: MYSQL_ROOT_PASSWORD
          value: password1234
        - name: TEST
          value: test</code></pre>



<p>โดยวิธีการเรียกใช้ Secret จะมีรูปแบบโค้ดดังนี้</p>



<pre class="wp-block-code"><code>- name: <strong>SECRET_USERNAME</strong>
  valueFrom:
    secretKeyRef:
      name: <strong>myweb-secret</strong>
      key: <strong>secret_username</strong></code></pre>



<p>อธิบายทีละค่า</p>



<ul class="wp-block-list"><li><strong>name: SECRET_USERNAME</strong> คือ กำหนด ชื่อ Key ของ Environment Variable ที่จะถูกนำไปใช้ในโค้ด</li><li><strong>valueFrom.secretKeyRef.name: myweb-secret</strong> คือ ชื่อ Secret ที่เราสร้าง</li><li><strong>valueFrom.secretKeyRef.key: secret_username</strong> คือ ชื่อ Key ที่ใช้อ้างไปหา Value ใน Secret</li></ul>



<p>ซึ่งผมจะเพิ่ม env สองตัว ที่เรียกใช้จาก Secret, ดังนั้นไฟล์ที่แก้ไขของ Deployment YML ผมจะได้รูปแบบนี้</p>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb-deployment
  namespace: myweb
  labels:
    app: myweb
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: phpfpm
        image: docker.io/ifew/docker-test-php:v3
        ports:
        - containerPort: 80
        env:
        - name: MYSQL_DB_HOST
          value: mydb.host.com
        - name: MYSQL_DATABASE
          value: test
        - name: MYSQL_USER
          value: ifew 
        - name: MYSQL_PASSWORD
          value: password1234
        - name: MYSQL_ROOT_PASSWORD
          value: password1234
        - name: TEST
          value: test
<strong>        - name: SECRET_USERNAME
          valueFrom:
            secretKeyRef:
              name: myweb-secret
              key: secret_username
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: myweb-secret
              key: secret_password</strong></code></pre>



<p>หลังจากแก้ไข Deployment YML เรียบร้อย ก็ทำการ Apply อีกครั้ง</p>



<pre class="wp-block-code"><code>kubectl apply -f eks-myweb-deploy.yml</code></pre>



<p>และลองทดสอบดูครับ ว่ามีการเรียกใช้งานถูกต้องไหม</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="307" src="https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-1200x307.png" alt="" class="wp-image-6018" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-1200x307.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-1024x262.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-768x196.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-1536x393.png 1536w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-700x179.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test.png 1878w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<h2 class="wp-block-heading">หากต้องการอัพเดทค่าใน Secret ล่ะ ทำอย่างไร?</h2>



<p>ให้แก้ไข Secret YML ไฟล์ และทำการ Apply ใหม่ จากนั้นขั้นตอนสำคัญคือ จะต้อง Restart Pod ด้วย เพื่อให้อ่าน Environment Variable ใหม่ ด้วยคำสั่ง</p>



<pre class="wp-block-code"><code>kubectl -n <strong>myweb</strong> rollout restart deployment <strong>myweb-deployment</strong></code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="139" src="https://myifew.com/wp-content/uploads/2021/09/eks-update-secret-1200x139.png" alt="" class="wp-image-6019" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-update-secret-1200x139.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-update-secret-1024x119.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-update-secret-768x89.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-update-secret-700x81.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-update-secret.png 1244w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p>โดยที่ myweb คือชื่อ namespace และ <meta charset="utf-8">myweb-deployment คือชื่อของ Deployment ที่ผมตั้งไว้</p>



<p>จากนั้นลองทดสอบใหม่ ก็จะเห็นการเปลี่ยนแปลงทันที</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="289" src="https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-update-1-1200x289.png" alt="" class="wp-image-6034" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-update-1-1200x289.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-update-1-1024x247.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-update-1-768x185.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-update-1-1536x370.png 1536w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-update-1-700x169.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-secret-web-test-update-1.png 1818w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<h2 class="wp-block-heading">สรุป</h2>



<p>Kubernetes ได้ทำฟีเจอร์ Secret ออกมาเพื่อให้เราใช้ เราก็ใช้เถอะ ซึ่งที่ผมเขียนมา เป็นหนึ่งในรูปแบบที่ Kubernetes แนะนำ แต่จริงๆ สามารถทำอีกวิธีหนึ่งได้คือ ทำเป็น Config File จาก Pod โดยการไปสร้าง Volumes และทำการ Mount Path จากนั้นก็เรียกข้อมูลจาก File Path นั้นได้เลย (เหมือนวิธี Config File Server ที่ทำๆ กันมา) ใครสนใจลองไปหาอ่านต่อได้ที่ <a rel="noreferrer noopener" href="https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod" data-type="URL" data-id="https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod" target="_blank">Using Secrets as Files from a Pod</a></p>



<h2 class="wp-block-heading">Reference</h2>



<ul class="wp-block-list"><li><a href="https://kubernetes.io/docs/concepts/configuration/secret/">https://kubernetes.io/docs/concepts/configuration/secret/</a></li><li>Cover Image from <a rel="noreferrer noopener" href="https://www.conjur.org/blog/four-ways-to-keep-kubernetes-secrets-secret/" target="_blank">https://www.conjur.org/blog/four-ways-to-keep-kubernetes-secrets-secret/</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/6012/sensitive-data-on-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ลองทำ Kubernetes บน Amazon EKS แบบง่ายๆ ด้วย eksctl</title>
		<link>https://myifew.com/5972/kubernetes-on-amazon-eks/</link>
					<comments>https://myifew.com/5972/kubernetes-on-amazon-eks/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Wed, 08 Sep 2021 17:41:08 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[AWS EKS]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=5972</guid>

					<description><![CDATA[ไปลองเล่น Kubernetes บน Amazon EKS มา ขอบันทึกไว้หน่อย ใช้งานง่ายดีครับ ด้วยเครื่องมือของทาง Amazone ที่ชื่อว่า eksctl]]></description>
										<content:encoded><![CDATA[
<p>ไปลองเล่น Kubernetes บน Amazon EKS มา ขอบันทึกไว้หน่อย ใช้งานง่ายดีครับ ด้วยเครื่องมือของทาง Amazon ที่ชื่อว่า eksctl (ใช้งานร่วมกับ kubectl)</p>



<span id="more-5972"></span>



<h2 class="wp-block-heading">วิธีจัดการ Kubernetes บน Amazon EKS</h2>



<p>ตัว <meta charset="utf-8"><meta charset="utf-8">Amazon EKS (Amazon Elastic Kubernetes Service) มีวิธีการจัดการสองแบบ คือ</p>



<ul class="wp-block-list"><li>eksctl &#8211; ที่เป็น CLI tool ของ Amazon เอง ในการจัดการ Amazon EKS โดยเฉพาะ</li><li>AWS CLI &#8211; ที่เป็น CLI tool ของ Amazon ที่ไว้จัดการ Service ต่างๆ ของ Amazon รวมถึง Amazon EKS ด้วย</li></ul>



<p>จากที่ลองทดสอบเล่นทั้งสองแบบ eksctl ใช้งานง่ายกว่ามาก เรียกว่าเป็น Automated Tool สำหรับ shortcut คำสั่งในการจัดการ EKS เลย แต่ก่อนจะไปต่อ เราควรต้องมีความรู้ในสามเรื่องนี้ก่อน เพื่อจะได้ไม่ไป งง กลางทาง</p>



<ol class="wp-block-list"><li>AWS Service </li><li>Docker</li><li>Kubernetes</li></ol>



<h2 class="wp-block-heading">เริ่มต้นใช้งาน Amazon EKS</h2>



<p>ไม่ว่าจะเลือกวิธีการใดก็ตาม สิ่งที่ต้องทำ มีดังนี้</p>



<ul class="wp-block-list"><li><a rel="noreferrer noopener" href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html" data-type="URL" data-id="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html" target="_blank">ติดตั้ง AWS CLI</a> , <a rel="noreferrer noopener" href="https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config" data-type="URL" data-id="https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config" target="_blank">สร้าง Access Key ID และ Configure AWS CLI</a> &#8211; เพื่อให้เครื่องเราสามารถเชื่อมต่อและควบคุม Account AWS ของเราได้</li><li><a rel="noreferrer noopener" href="https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html" data-type="URL" data-id="https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html" target="_blank">ติดตั้ง kubectl</a> &#8211; เป็นตัว Core เพื่อใช้ควบคุม Kubernetes Clusters </li><li><a rel="noreferrer noopener" href="https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html" data-type="URL" data-id="https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html" target="_blank">ติดตั้ง eksctl</a> &#8211; เพื่อไปใช้ร่วมกับ kubectl อีกที ในการควบคุม Kubernetes Clusters บน Amazon EKS</li><li><a rel="noreferrer noopener" href="https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html" data-type="URL" data-id="https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html" target="_blank">AWS IAM Permissions</a> &#8211; โดย Account AWS เราจะต้องได้รับสิทธิ์ที่เกี่ยวข้องทั้งหมดสำหรับการควบคุม Amazon EKS ทั้งหมด รวมไปถึง ECR, Network, EC2 ด้วยครับ</li></ul>



<h2 class="wp-block-heading">โครงสร้าง Kubernetes และสิ่งที่จะต้องทำบน EKS </h2>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1200" height="891" src="https://myifew.com/wp-content/uploads/2021/09/k8s-cluster-diagram-1200x891.png" alt="" class="wp-image-5975" srcset="https://myifew.com/wp-content/uploads/2021/09/k8s-cluster-diagram-1200x891.png 1200w, https://myifew.com/wp-content/uploads/2021/09/k8s-cluster-diagram-1024x760.png 1024w, https://myifew.com/wp-content/uploads/2021/09/k8s-cluster-diagram-768x570.png 768w, https://myifew.com/wp-content/uploads/2021/09/k8s-cluster-diagram-1536x1140.png 1536w, https://myifew.com/wp-content/uploads/2021/09/k8s-cluster-diagram-700x519.png 700w, https://myifew.com/wp-content/uploads/2021/09/k8s-cluster-diagram.png 1776w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><figcaption>Kubernetes Cluster Diagram</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1200" height="973" src="https://myifew.com/wp-content/uploads/2021/09/k8s-node-overview-1200x973.png" alt="" class="wp-image-5977" srcset="https://myifew.com/wp-content/uploads/2021/09/k8s-node-overview-1200x973.png 1200w, https://myifew.com/wp-content/uploads/2021/09/k8s-node-overview-1024x830.png 1024w, https://myifew.com/wp-content/uploads/2021/09/k8s-node-overview-768x623.png 768w, https://myifew.com/wp-content/uploads/2021/09/k8s-node-overview-1536x1245.png 1536w, https://myifew.com/wp-content/uploads/2021/09/k8s-node-overview-700x568.png 700w, https://myifew.com/wp-content/uploads/2021/09/k8s-node-overview.png 1628w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><figcaption>Node Overview</figcaption></figure></div>



<p>ในรายละเอียด สามารถอ่านจากบล็อกต่างๆ ได้เลยครับ ผมขอสรุปไวๆ ดังนี้</p>



<ol class="wp-block-list"><li><strong>Kubernetes Cluster </strong>&#8211; จำเป็นต้องสร้างก่อนเลย เพื่อใช้เป็น Cluster ของชุด Server เช่น ควบคุม (Control) กระจาย (Distribution) ตั้งกำหนดการ (Scheduling)</li><li><strong>Control Plane หรือ Master Node</strong> &#8211; ตัวนี้ก็จะเป็นต้องมี แต่ EKS จะสร้างให้อัตโนมัติ โดยอิงจาก Config ที่เรากำหนดในไฟล์ yml หรือใน AWS Console เช่น Min/Max Node, Min/Max Pod ใช้เพื่อควบคุมสิ่งต่างๆ ใน Cluster </li><li><strong>Node</strong> &#8211; ตัวนี้จำเป็นต้องสร้าง เสมือนเครื่อง Server ของเรา สามารถปั๊มเพิ่ม ลด ได้ตามจำนวนที่กำหนด</li><li><strong>Pod</strong> &#8211; ตัวนี้จำเป็นต้องสร้าง คือกลุ่มของ Container ของเรา</li></ol>



<h2 class="wp-block-heading">สร้าง Kubernetes Cluster</h2>



<p>ให้รันคำสั่งตามนี้ครับ</p>



<pre class="wp-block-code"><code><strong>eksctl create cluster --name=test-php-web --region ap-southeast-1 --managed</strong> --nodes=2 --node-type=t2.micro --with-oidc --ssh-access --ssh-public-key ifew_orm_macbook --profile few_orm</code></pre>



<p><meta charset="utf-8">คำอธิบาย</p>



<ul class="wp-block-list"><li><meta charset="utf-8">&#8211;name=test-php-web คือ ชื่อ Cluster</li><li>&#8211;region ap-southeast-1 คือ Zone ทวีป AWS ที่เราจะใช้งาน ในที่นี้คือสิงคโปร์</li><li>&#8211;nodes=2 คือ จำนวน node หรือจำนวนเครื่อง ec2 ที่จะถูกเปิดขึ้นมา (Optional)</li><li>&#8211;node-type=t2.micro คือ type class ของเครื่อง ec2 ที่จะถูกเปิดขึ้นมา (Optional)</li><li>&#8211;managed คือ บอกว่าจะสร้างแบบ Managed nodes ไม่ใช่แบบ Fargate</li><li>&#8211;with-oidc คือ เปิดให้ใช้ OIDC ใน cluster นี้ได้ (Optional)</li><li>&#8211;ssh-access คือ เปิดให้ใช้ SSH Access ใน cluster นี้ได้ (Optional)</li><li>&#8211;ssh-public-key ifew_orm_macbook คือ ระบุ Public Key สำหรับ SSH Access (Optional)</li><li>&#8211;profile few_orm คือ บอกว่าใช้ AWS Profile ไหนในการรันคำสั่งนี้ (Optional)</li></ul>



<h2 class="wp-block-heading">สร้าง Namespace</h2>



<p>ในที่นี้ ผมขอเสริมเรื่องการสร้าง namespace นิดนึง ไว้จำกัดขอบเขตการทำงาน และเพื่อความปลอดภัย กันพลาดพลั้งไปลบอะไรออก</p>



<pre class="wp-block-code"><code><strong>kubectl create namespace myweb</strong></code></pre>



<ul class="wp-block-list"><li>myweb คือ ชื่อของ namespace ที่จะใช้</li></ul>



<p><meta charset="utf-8">จะได้หน้าตาแบบนี้</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="846" height="64" src="https://myifew.com/wp-content/uploads/2021/09/eksctl-create-namespace.png" alt="" class="wp-image-5980" srcset="https://myifew.com/wp-content/uploads/2021/09/eksctl-create-namespace.png 846w, https://myifew.com/wp-content/uploads/2021/09/eksctl-create-namespace-768x58.png 768w, https://myifew.com/wp-content/uploads/2021/09/eksctl-create-namespace-700x53.png 700w" sizes="auto, (max-width: 846px) 100vw, 846px" /></figure>



<h2 class="wp-block-heading">สร้าง YML File สำหรับ Deployment</h2>



<p>สร้างไฟล์ yml ขึ้นมา เพื่อ config pod และการ deployment ในที่นี้ผมใช้ไฟล์ชื่อ <strong>eks-myweb-deploy.yml</strong></p>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb-deployment
  namespace: myweb
  labels:
    app: myweb
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: phpfpm
        image: xxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/test:v1
        ports:
        - containerPort: 80
        env:
        - name: MYSQL_DB_HOST
          value: mydb.host.com
        - name: MYSQL_DATABASE
          value: test
        - name: MYSQL_USER
          value: ifew 
        - name: MYSQL_PASSWORD
          value: password1234
        - name: MYSQL_ROOT_PASSWORD
          value: password1234
        - name: TEST
          value: test</code></pre>



<p>จากนั้นทำการรันคำสั่ง</p>



<pre class="wp-block-code"><code><strong>kubectl apply -f eks-myweb-deploy.yml</strong></code></pre>



<p>จะได้หน้าตาแบบนี้</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="930" height="62" src="https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-deploy-1.png" alt="" class="wp-image-5983" srcset="https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-deploy-1.png 930w, https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-deploy-1-768x51.png 768w, https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-deploy-1-700x47.png 700w" sizes="auto, (max-width: 930px) 100vw, 930px" /></figure>



<p>ถ้าอยากรู้ว่าสร้างจริงไหม มีอะไรใน namespace เราแล้วบ้าง ให้ใช้คำสั่งนี้ครับ</p>



<pre class="wp-block-code"><code><meta charset="utf-8"><strong>kubectl get all -n myweb</strong></code></pre>



<p>myweb คือ ระบุชื่อ namespace</p>



<p>จากนั้นจะได้ข้อมูลดังนี้</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1112" height="308" src="https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace.png" alt="" class="wp-image-5984" srcset="https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace.png 1112w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-1024x284.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-768x213.png 768w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-700x194.png 700w" sizes="auto, (max-width: 1112px) 100vw, 1112px" /></figure>



<p>ใน config ผมสร้างไว้ 2 pod ดังนั้น และถ้าใช้งานได้ ตรง Status จะขึ้นว่า Running</p>



<p>ลองไปดูใน AWS Console โดยเข้าไปที่เมนู EKS &gt; เลือกชื่อ Cluster ที่เราสร้าง &gt; เลือก Node ที่เราสร้าง &gt; Pods จะแสดงรายการสองกลุ่ม คือ กลุ่ม Node Processes กับกลุ่ม Pod ที่เราสร้างขึ้นมา</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1146" height="527" src="https://myifew.com/wp-content/uploads/2021/09/eksctl-aws-console-pods.png" alt="" class="wp-image-5985" srcset="https://myifew.com/wp-content/uploads/2021/09/eksctl-aws-console-pods.png 1146w, https://myifew.com/wp-content/uploads/2021/09/eksctl-aws-console-pods-1024x471.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eksctl-aws-console-pods-768x353.png 768w, https://myifew.com/wp-content/uploads/2021/09/eksctl-aws-console-pods-700x322.png 700w" sizes="auto, (max-width: 1146px) 100vw, 1146px" /></figure>



<p>ตอนนี้แอพเราขึ้นไปรันรอไว้แล้ว แต่ยังไม่มีช่องทางเข้านะครับ เราต้องสร้าง Service ขึ้นมาก่อน<meta charset="utf-8"></p>



<h2 class="wp-block-heading">สร้าง YML File สำหรับ Service</h2>



<p><meta charset="utf-8">สร้างไฟล์ yml ขึ้นมา เพื่อ กำหนด Service และให้มีช่องทางเข้าไป Pod ที่เราสร้าง โดยผมจะสร้างแบบมี Load Balance ด้วย และตั้งไฟล์ชื่อ <strong>eks-<meta charset="utf-8"><strong>myweb</strong>-service.yml</strong></p>



<pre class="wp-block-code"><code>apiVersion: v1
kind: Service
metadata:
  name: myweb-service
  namespace: myweb
  labels:
    app: myweb
spec:
  selector:
    app: myweb
  ports:
  - name: http
    port: 80
    targetPort: 80
  type: LoadBalancer</code></pre>



<p><meta charset="utf-8">จากนั้นทำการรันคำสั่ง</p>



<pre class="wp-block-code"><code><meta charset="utf-8"><strong>kubectl apply -f eks-<meta charset="utf-8"><strong>myweb</strong>-service.yml</strong></code></pre>



<p><meta charset="utf-8">จะได้หน้าตาแบบนี้</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="934" height="60" src="https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-service-1.png" alt="" class="wp-image-5986" srcset="https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-service-1.png 934w, https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-service-1-768x49.png 768w, https://myifew.com/wp-content/uploads/2021/09/eksctl-apply-service-1-700x45.png 700w" sizes="auto, (max-width: 934px) 100vw, 934px" /></figure>



<p>ลองดูสิ่งที่อยู่ใน namespace อีกครั้ง</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="202" src="https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service-1200x202.png" alt="" class="wp-image-5987" srcset="https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service-1200x202.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service-1024x172.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service-768x129.png 768w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service-1536x259.png 1536w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service-2048x345.png 2048w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service-700x118.png 700w, https://myifew.com/wp-content/uploads/2021/09/eksctl-get-all-namespace-with-service.png 2364w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p>จะเห็นว่า มี Service เพิ่มเข้ามาแล้ว โดย Type เป็น LoadBalancer ตามที่ได้ config ใน yml ของเรา <br>ส่วน URL ที่ใช้เข้า App เรา อยู่ตรง External-IP นั้นเอง</p>



<h2 class="wp-block-heading">ลองเข้า App ที่สร้างขึ้นมา</h2>



<p>เปิด Brower และเข้า URL จาก <meta charset="utf-8">External-IP ที่แสดงในขั้นตอนก่อนหน้านี้ ก็สามารถใช้งานได้แล้วครับ</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1200" height="643" src="https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1-1200x643.png" alt="" class="wp-image-5991" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1-1200x643.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1-1024x548.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1-768x411.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1-1536x823.png 1536w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1-2048x1097.png 2048w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1-700x375.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-home-1.png 2868w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><figcaption>หน้าแรกของ Demo ที่รันบน nginx + php</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1200" height="646" src="https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1-1200x646.png" alt="" class="wp-image-5993" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1-1200x646.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1-1024x552.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1-768x414.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1-1536x827.png 1536w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1-2048x1103.png 2048w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1-700x377.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-phpinfo-1.png 2866w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><figcaption>ลองดูว่าเรียกใช้ PHP และ Extension ได้ครบถ้วนไหม</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1200" height="320" src="https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-env-1-1200x320.png" alt="" class="wp-image-5992" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-env-1-1200x320.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-env-1-1024x273.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-env-1-768x205.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-env-1-1536x410.png 1536w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-env-1-700x187.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-web-demo-env-1.png 1964w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><figcaption>ลองดูว่าส่ง Environment Variable มาครบไหม</figcaption></figure></div>



<h2 class="wp-block-heading">Tip: ใช้งาน HTTPS ผ่าน ACM Certificate</h2>



<p>โดยให้สร้าง ACM certificate ขึ้นมา และใน yml ไฟล์ของ service ให้เพิ่มสองส่วนตามภาพด้านล่าง </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="571" src="https://myifew.com/wp-content/uploads/2021/09/eks-ssl-1200x571.png" alt="" class="wp-image-5994" srcset="https://myifew.com/wp-content/uploads/2021/09/eks-ssl-1200x571.png 1200w, https://myifew.com/wp-content/uploads/2021/09/eks-ssl-1024x487.png 1024w, https://myifew.com/wp-content/uploads/2021/09/eks-ssl-768x365.png 768w, https://myifew.com/wp-content/uploads/2021/09/eks-ssl-1536x730.png 1536w, https://myifew.com/wp-content/uploads/2021/09/eks-ssl-700x333.png 700w, https://myifew.com/wp-content/uploads/2021/09/eks-ssl.png 1914w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p>โดยรายละเอียดวิธีติดตั้ง ให้ดูได้ที่ <a rel="noreferrer noopener" href="https://aws.amazon.com/premiumsupport/knowledge-center/terminate-https-traffic-eks-acm/" target="_blank">https://aws.amazon.com/premiumsupport/knowledge-center/terminate-https-traffic-eks-acm/</a></p>



<h2 class="wp-block-heading">สรุป</h2>



<p>สำหรับ Kubernetes ผมเองเรียกว่าเบสิกมากๆ เป็นมือใหม่เลย ได้ลองเรียนรู้ใช้งานมาสักพัก เลยอยากสรุปไว้ให้ผู้อ่าน ที่กำลังริเริ่มอยากทดลองใช้ Kubernetes มาได้ใช้ด้วยกันครับ ผ่านบริการของ Amazon EKS ก็หวังว่าจะช่วยให้การเริ่มต้นได้ง่ายขึ้น และเอาไปต่อยอดเพื่อใช้งานระดับ Advance ต่อไป</p>



<p>หากใครอยากได้สรุปคำสั่งต่างๆ รวมถึงโค้ดตัวอย่าง ทั้งหมดในโพสต์นี้ <br>สามารถไปดูได้ที่ <a rel="noreferrer noopener" href="https://github.com/ifew/eks-test-php" target="_blank">https://github.com/ifew/eks-test-php</a></p>



<h2 class="wp-block-heading">Reference</h2>



<ul class="wp-block-list"><li><a href="https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html">https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/5972/kubernetes-on-amazon-eks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
