AWS Thai Blog
กำหนดหมายเลขไอพีสาธารณะแบบคงที่ให้กับเครื่อง worker ของ Amazon EKS ใน Local Zones ด้วย KubeIP v2
ลูกค้า AWS ใช้งาน Amazon EKS ใน AWS Local Zones เพื่อให้ลูกค้าของตนเข้าถึงบริการด้วยความหน่วงที่ต่ำ และปฏิบัติตามนโยบายด้านการประมวลผลข้อมูลในประเทศ รวมถึงในบางกรณีมีความจำเป็นต้องใช้งานหมายเลขไอพีสาธารณะแบบคงที่ เพื่อสื่อสารกับระบบของคู่ค้าที่มีข้อกำหนดดังกล่าว อย่างไรก็ตาม ทรัพยากร Kubernetes (k8s) เช่น เครื่อง worker อาจมีการปิดเปิดเครื่องตามสถานการณ์ต่างๆ ทำให้เกิดการเปลี่ยนแปลงที่อยู่ไอพีของเครื่องได้ ยกตัวอย่างเช่น การอัปเกรดเวอร์ชันของ EKS คลัสเตอร์ โดยเราสามารถนำ KubeIP v2 มาช่วยในการกำหนดหมายเลขไอพีสาธารณะแบบคงที่ได้ โดยใช้ประโยชน์จากความสามารถของคลาวด์ เพื่อให้แน่ใจว่าการกำหนดที่อยู่ไอพีจะเป็นหมายเลขเดิม แม้ว่าเครื่อง worker จะถูกปิดและสร้างขึ้นใหม่ก็ตาม
โซลูชันโดยรวม
บทความนี้แสดงวิธีการติดตั้ง Amazon EKS cluster ที่ประกอบด้วย managed node group ที่อยู่ใน AWS region และ self-managed node group ที่อยู่ใน Local Zone รวมทั้งสาธิตการกำหนด Elastic IP Address ของ AWS ให้กับ EKS worker ใน Local Zone โดยใช้ KubeIP v2
แผนภาพสถาปัตยกรรมด้านล่างแสดงถึงแอปพลิเคชัน edge ทำงานอยู่บนเครื่อง EC2 ที่มีหมายเลขไอพีสาธารณะแบบคงที่กำหนดอยู่ใน Local Zone และรับทราฟฟิคจากผู้ใช้งาน จากนั้นส่งต่อทราฟฟิคไปยังแอปพลิเคชัน backend ที่อยู่ใน AWS region
ข้อกำหนดเบื้องต้น
- เปิดใช้งาน Local Zones บน AWS region ที่รันแอปพลิเคชัน
- กำหนดสิทธิ์ในบัญชี AWS ที่จำเป็นสำหรับใช้งาน AWS CLI
- ติดตั้งเครื่องมือ CLI ที่ใช้ในการสร้างทรัพยากรตามตัวอย่างดังนี้ AWS CLI, Terraform และ kubectl
มาลงมือสร้างกัน
1) ในบทความนี้ เราจะทำการดีพอยตามตัวอย่างซอร์สโค๊ด ซึ่งประกอบไปด้วย 4 ไดเรกทอรี ได้แก่ 01-vpc 02-eks 03-kubeip และ 04-app โดยจะเริ่มดีพอยจาก 01-vpc ไป 04-app
เริ่มแรก ให้ทำการคัดลอกตัวอย่างจากบน github มายังไดเรกทอรีปัจจุบัน
2) เราจะทำการสร้าง VPC และ subnet ใน AWS region และ Local Zone ตามในไฟล์ main.tf โดยใช้โมดูล vpc เพื่อสร้าง subnet ใน AWS region และใช้ aws_subnet resources ในการสร้าง subnet ใน Local Zone
กำหนดค่าตัวแปรอินพุต จากตัวอย่าง name (VPC) เป็นค่า `kubeip-lz-eks-vpc` ส่วน region (AWS region) เป็น ‘ap-southeast-1’ และ lzs (Local Zone) คือ ‘ap-southeast-1-bkk-1a’
ทำการดีพอย VPC subnet และ route table ด้วย terraform
โน๊ตผลลัพธ์ไว้ใช้งานในขั้นตอนถัดไป
3) ถัดมา ให้เราทำการสร้าง EKS คลัสเตอร์ที่มี managed node group ใน AWS region และสร้าง self-managed node group ใน Local Zone สำหรับ self-managed node group นั้น จะมีแท็ก ‘eks.amazonaws.com/nodegroup=public-lz-ng’ และ ‘kubeip=use’ กำหนดอยู่ด้วย นอกจากนี้เรายังใช้โมดูล kubeip_role เพื่อสร้าง IRSA (IAM Role for Service Accounts) สำหรับ KubeIP daemonSet
กำหนดตัวแปรอินพุต สำหรับ vpc_id private_subnets และ public_subnets_local_zone โดยให้ใช้ค่าที่คัดลอกจากผลลัพธ์ก่อนหน้า
ติดตั้งทรัพยากรต่างๆ ด้วย terraform
บันทึกผลลัพธ์ ไว้สำหรับขั้นตอนถัดไป
4) จากนั้น สร้าง Elastic IP Address และทรัพยากร k8s เช่น DaemonSet และ service account โดย Elastic IP Address ถูกสร้างตามที่กำหนดไว้ใน aws_eip resource ซึ่งแยกตามโซนผ่าน network_border_group argument สำหรับ KubeIP DaemonSet นั้น จะรันบนเครื่อง worker ใน Local Zone ซึ่งถูกกำหนดโดย node_selector field ของ k8s ส่วน KubeIP เองก็สามารถเลือก EIP โดยใช้แท็กของ AWS ได้ ที่สำคัญคือเราต้องทำการสร้าง IRSA และกำหนด RBAC ให้กับ service account สำหรับ KubeIP DaemonSet
กำหนดตัวแปรอินพุต สำหรับ kubeip_role_arn ให้ใช้ค่าจากผลลัพธ์ก่อนหน้า
ติดตั้ง Elastic IP Address (EIP) และทรัพยากร Kubernetes (k8s) โดยใช้ Terraform
บันทึกค่า IP ไว้เพื่อใช้ในการทดสอบ หลังจากดีพอยแอปพลิเคชันเสร็จ
5) ท้ายสุด เราจะทำการทดสอบระบบโดยดีพอยแอปพลิเคขันบน EKS คลัสเตอร์
ไฟล์ที่มีชื่อว่า app_a.yaml และ app_b.yaml นั้นไว้สำหรับสร้างแอปพลิเคชัน backend ที่ทำงานใน AWS region
ไฟล์ที่มีชื่อว่า edge_svc.yaml นั้น ไว้สร้างแอปพลิเคชัน edge ที่รันใน Local Zone
ย้ายไดเรกทอรีปัจจุบันไปที่ 04-app และรันคำสั่ง aws cli ตามด้วย AWS region ที่ใช้งาน เพื่ออัปเดตไฟล์ kubeconfig สำหรับใช้ยืนยันตัวตนกับ EKS คลัสเตอร์
รันคำสั่ง kubectl เพื่อทดสอบว่าติดต่อกลับคลัสเตอร์ได้
ติดตั้งแอปพลิเคชันและตรวจสอบว่าทำงานได้หรือไม่
ตรวจสอบผลลัพธ์ว่าแอปพลิเคชันทำงานได้ โดยใช้ที่อยู่ไอพีสาธารณะจากผลลัพธ์ก่อนหน้า
ทำการทดสอบผ่าน curl
หรือ ทำการทดสอบผ่านเว็บเบราว์เซอร์
บทสรุป
AWS Local Zones มีข้อจำกัดจากการใช้งานได้แค่ Application Load Balancer (ALB) จากบริการของ Elastic Load Balancing (ELB) เท่านั้น นอกจากนี้หมายเลขไอพีสาธารณะที่กำหนดให้กับ ALB นั้น สามารถเปลี่ยนแปลงได้ตลอดเวลา สำหรับผู้ดูแล EKS คลัสเตอร์ที่ใช้งานใน Local Zone และจำเป็นต้องมั่นใจว่าค่าไอพีเดิมจะถูกกำหนดให้แก่ระบบอยู่ตลอดเวลา ไม่ว่าเครื่อง worker จะถูกปิดและเปิดขึ้นมาใหม่ก็ตาม ทำให้ต้องสร้างและดูแลโซลูชันเอง ซึ่งในกรณนี้ KubeIP v2 เป็นตัวเลือกที่เหมาะสม ที่สามารถนำมาใช้ตอบโจทย์ดังกล่าวได้
บทความนี้เขียนโดยคุณ Wiriyang Pipatsakulroj, Senior Cloud Architect DoiT
Review โดยคุณ Chatcharoen Chivakanit, Senior Solutions Architect AWS
เกี่ยวกับ DoiT
DoiT จัดหาเทคโนโลยีอัจฉริยะและความเชี่ยวชาญด้านคลาวด์ เพื่อช่วยให้องค์กรเข้าใจและใช้ประโยชน์จาก Public Cloud อย่าง Amazon Web Services (AWS) ในการขับเคลื่อนการเติบโตทางธุรกิจ คุณสามารถดูข้อเสนอและสอบถามได้ที่ doit.com