สมมติเรามี External Service ชื่อว่า Postgresql Database
โดยมี IP Address เป็นดังนี้
172.xx.xx.xx
ปกติเวลาที่เราจะ Connect ไปยัง Database นี้เราจะ Connect ไปที่
jdbc:postgresql://172.xx.xx.xx:5432/databaseName
วิธีการนี้มีข้อเสียคือ Code เราผูกติดกับ IP Address โดยตรง
ถ้ามีการเปลี่ยน Environment ในการ Deploy หรือเปลี่ยน Database ใหม่
เราก็ต้องมาแก้ Code เรา ให้ชี้ไปที่ IP Address ใหม่
ซึ่งมันก็ไม่ค่อยจะสะดวกเท่าไหร่นัก ที่ต้องมาคอยแก้ Code กลับไปกลับมา
แทนที่เราจะเขียนให้ Code เรา Reference ไปยัง External Service ด้วย IP Address
ตรง ๆ
เราก็เปลี่ยนให้ Code เรา Reference ไปยัง External Service โดยใช้ ชื่อ
แทน
แล้ว Setup ตัว Mapping ระหว่าง ชื่อ
กับ IP Address
นั้นขึ้นมา
เวลามีการเปลี่ยน Envionment ในการ Deploy เราก็แค่ไป Setup ชื่อ
กับ IP Address
ใหม่ใน Environment นั้น ๆ
ส่วนวิธีการทำ ให้ทำดังนี้
สมมติ เราตั้งชื่อแทน IP Address และ Port นี้ 172.xx.xx.xx:5432
ว่า postgresql
จากที่เคยเรียกแบบนี้
jdbc:postgresql://172.xx.xx.xx:5432/databaseName
ให้เปลี่ยนไปเป็น
jdbc:postgresql://postgresql/databaseName
postgresql.service.yml
kind: Service
apiVersion: v1
metadata:
name: postgresql
spec:
type: ClusterIP
ports:
- port: 5432
targetPort: 5432
postgresql.endpoints.yml
kind: Endpoints
apiVersion: v1
metadata:
name: postgresql
subsets:
- addresses:
- ip: 172.xx.xx.xx
ports:
- port: 5432
$ kubectl apply -f ./postgresql.service.yml
$ kubectl apply -f ./postgresql.endpoints.yml
จากนั้น ก็ลองทดสอบผลลัพธ์ดู
จริง ๆ ปัญหาของการเปลี่ยน Environment สำหรับการ Deploy
เราสามารถที่จะแก้ได้ด้วยการเตรียม Configuration File สำหรับ Environment นั้น ๆ
คือ ถ้าต้อง Deploy ไปที่ Environment ไหน เราก็ใช้ Configuration File สำหรับ Environment นั้น
แต่ปัญหาของการใช้ Configuration File
สำหรับ Application บางประเภท เราไม่สามารถที่จะแก้ Configuration File แล้วทำให้มันมีผล (Realtime) ณ เวลานั้นได้ทันที คือ แก้เสร็จ ก็ต้อง Deploy Application ใหม่ ค่า Configuration ต่าง ๆ ใน Application ถึงจะเปลี่ยนตามไปด้วย
การใช้ประโยชน์จากความสามารถเรื่อง Service ของ Kubernetes จึงทำให้เราไม่ต้อง Deploy Application ใหม่ ก็สามารถที่จะแก้ไข IP Address ของ External Service ที่ Application กำลังติดต่ออยู่ได้ทันที
ขอบคุณบทความจากคุณ Apipol Sukgler ครับ https://medium.com/@golfapipol/จัดการกับ-external-service-อย่างไรบน-kubernetes-a2eeec72dc56