บทความนี้อธิบายวิธีเชื่อมต่อจากเครื่อง Windows Client ไปยัง Oracle Cloud Infrastructure Container Engine for Kubernetes หรือ OCI OKE ผ่าน Public Kubernetes API Endpoint โดยใช้ OCI CLI และ kubectl


สิ่งที่ต้องเตรียมก่อนเริ่ม

ก่อนเชื่อมต่อ OKE ควรมีข้อมูลและเครื่องมือต่อไปนี้:

  • Windows client ที่สามารถออกอินเทอร์เน็ตได้
  • สิทธิ์เข้าใช้งาน OCI Tenancy
  • สิทธิ์เข้าถึง OKE Cluster
  • Cluster OCID ของ OKE
  • Region ของ Cluster เช่น ap-singapore-1
  • Public Endpoint ของ Kubernetes API เปิดใช้งานแล้ว
  • ติดตั้ง OCI CLI
  • ติดตั้ง kubectl

1. ติดตั้ง OCI CLI และ kubectl บน Windows

เปิด PowerShell แล้วติดตั้งเครื่องมือที่จำเป็นด้วยคำสั่งนี้:

winget install Oracle.OCI-CLI
winget install Kubernetes.kubectl

หลังจากติดตั้งเสร็จ ให้ปิดและเปิด PowerShell ใหม่ แล้วตรวจสอบเวอร์ชัน:

oci --version
kubectl version --client

2. ตั้งค่า OCI CLI

รันคำสั่งต่อไปนี้เพื่อเริ่มตั้งค่า OCI CLI:

oci setup config

โดยปกติไฟล์ config จะถูกสร้างไว้ที่:

C:\Users\<your-user>\.oci\config

ระหว่างการตั้งค่า OCI CLI จะต้องใช้ข้อมูลต่อไปนี้:

Tenancy OCID
User OCID
Region
API Signing Key
Fingerprint

ตัวอย่าง Region สำหรับ Singapore:

ap-singapore-1

3. ค้นหา OKE Cluster OCID

เข้าไปที่ OCI Console แล้วไปที่:

Developer Services
→ Kubernetes Clusters
→ เลือก Cluster ที่ต้องการ
→ Cluster Details
→ OCID

คัดลอกค่า Cluster OCID เก็บไว้สำหรับใช้ในขั้นตอนถัดไป

ตัวอย่างรูปแบบ Cluster OCID:

ocid1.cluster.oc1.ap-singapore-1.aaaa...

4. สร้าง kubeconfig สำหรับเชื่อมต่อ OKE ผ่าน Public Endpoint

สร้างโฟลเดอร์ .kube ก่อน:

mkdir $HOME\.kube -Force

จากนั้นรันคำสั่งนี้เพื่อสร้าง kubeconfig:

oci ce cluster create-kubeconfig `
  --cluster-id <cluster_ocid> `
  --file "$HOME\.kube\config" `
  --region ap-singapore-1 `
  --token-version 2.0.0 `
  --kube-endpoint PUBLIC_ENDPOINT

ตัวอย่าง:

oci ce cluster create-kubeconfig `
  --cluster-id ocid1.cluster.oc1.ap-singapore-1.aaaa... `
  --file "$HOME\.kube\config" `
  --region ap-singapore-1 `
  --token-version 2.0.0 `
  --kube-endpoint PUBLIC_ENDPOINT

ค่าที่สำคัญคือ:

--region ap-singapore-1
--kube-endpoint PUBLIC_ENDPOINT

โดย PUBLIC_ENDPOINT หมายถึงการเชื่อมต่อไปยัง Kubernetes API Server ผ่าน Public Endpoint ของ OKE Cluster

5. ทดสอบการเชื่อมต่อด้วย kubectl

หลังจากสร้าง kubeconfig แล้ว ให้ทดสอบด้วยคำสั่ง:

kubectl get nodes

หากเชื่อมต่อสำเร็จ จะเห็นรายการ Worker Nodes ของ OKE Cluster

สามารถตรวจสอบ namespace ได้ด้วยคำสั่ง:

kubectl get namespaces

หรือตรวจสอบ pod ทั้งหมดใน cluster:

kubectl get pods -A

6. กรณีมีหลาย OCI Profile

หากในเครื่องมี OCI CLI หลาย profile สามารถระบุ profile ได้ตอนสร้าง kubeconfig:

oci ce cluster create-kubeconfig `
  --cluster-id <cluster_ocid> `
  --file "$HOME\.kube\config" `
  --region ap-singapore-1 `
  --token-version 2.0.0 `
  --kube-endpoint PUBLIC_ENDPOINT `
  --profile <profile_name>

หรือกำหนด environment variable ก่อนใช้งาน kubectl:

$env:OCI_CLI_PROFILE="<profile_name>"
kubectl get nodes

7. ตรวจสอบ Context ของ Kubernetes

ดู context ที่มีอยู่ใน kubeconfig:

kubectl config get-contexts

ดู context ที่กำลังใช้งานอยู่:

kubectl config current-context

หากต้องการเปลี่ยน context:

kubectl config use-context <context_name>

8. ปัญหาที่พบบ่อย

ปัญหา: Unauthorized

ตัวอย่าง error:

error: You must be logged in to the server

สาเหตุที่เป็นไปได้:

  • OCI CLI config ไม่ถูกต้อง
  • API Key หรือ Fingerprint ไม่ถูกต้อง
  • ใช้ OCI Profile ผิด
  • ผู้ใช้ไม่มี IAM Policy สำหรับเข้าถึง OKE
  • Kubernetes RBAC ยังไม่อนุญาตให้ผู้ใช้นี้เข้าถึง resource ใน cluster

ปัญหา: Connection Timeout

ตัวอย่าง error:

Unable to connect to the server: i/o timeout

สาเหตุที่เป็นไปได้:

  • OKE Cluster ไม่ได้เปิด Public Endpoint
  • เครื่อง Windows Client ถูก firewall หรือ proxy block
  • ระบุ region ผิด
  • ระบุ cluster OCID ผิด
  • Security List หรือ Network Security Group ของ Public Endpoint ไม่อนุญาต IP ของเครื่อง client

ปัญหา: kubectl ไม่เจอ kubeconfig

สามารถกำหนด path ของ kubeconfig ได้โดยตรง:

$env:KUBECONFIG="$HOME\.kube\config"
kubectl get nodes

ปัญหา: kubectl พยายามเชื่อมต่อไปที่ localhost:8080

หากพบ error ลักษณะนี้:

couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s":
dial tcp 127.0.0.1:8080: connectex: No connection could be made because the target machine actively refused it.

หมายความว่า kubectl ยังไม่ได้ใช้ kubeconfig ของ OKE หรือ kubeconfig ไม่ถูกโหลดอย่างถูกต้อง

ให้ลองระบุ kubeconfig โดยตรง:

kubectl --kubeconfig "$HOME\.kube\config" get nodes

หรือกำหนด environment variable:

$env:KUBECONFIG="$HOME\.kube\config"
kubectl config get-contexts
kubectl get nodes

ตรวจสอบว่า kubeconfig ชี้ไปที่ OKE endpoint ไม่ใช่ localhost:

kubectl config view --minify

ค่า server: ควรเป็น endpoint ของ OKE เช่น https://...:6443 ไม่ใช่ http://localhost:8080

คำสั่งสรุปแบบสั้น

ใช้ชุดคำสั่งนี้เมื่อต้องการเชื่อมต่อจาก Windows Client ไปยัง OCI OKE ผ่าน Public Endpoint:

mkdir $HOME\.kube -Force

oci ce cluster create-kubeconfig `
  --cluster-id <cluster_ocid> `
  --file "$HOME\.kube\config" `
  --region ap-singapore-1 `
  --token-version 2.0.0 `
  --kube-endpoint PUBLIC_ENDPOINT

kubectl get nodes

สรุป

การเชื่อมต่อ OCI OKE จาก Windows Client ผ่าน Public Endpoint มีขั้นตอนหลักคือ ติดตั้ง OCI CLI และ kubectl, ตั้งค่า OCI CLI, สร้าง kubeconfig ด้วยคำสั่ง oci ce cluster create-kubeconfig และทดสอบการเชื่อมต่อด้วย kubectl

เมื่อเชื่อมต่อสำเร็จ ผู้ใช้งานสามารถบริหารจัดการ Kubernetes resource บน OKE ได้จากเครื่อง Windows Client โดยตรงผ่านคำสั่ง kubectl