Category: OKE


บทความนี้อธิบายวิธีนำ API Signing Public Key ที่ได้จากคำสั่ง oci setup config ไป Upload เข้าสู่ Oracle Cloud Infrastructure หรือ OCI ผ่านหน้า Web Console

ขั้นตอนนี้จำเป็นสำหรับการใช้งาน OCI CLI จากเครื่อง client เช่น Windows, macOS หรือ Linux เพื่อให้ CLI สามารถ authenticate กับ OCI ได้


API Signing Key คืออะไร

API Signing Key คือ key pair ที่ใช้สำหรับยืนยันตัวตนระหว่าง เครื่อง client กับ OCI API โดยแบ่งออกเป็น 2 ส่วน:

  • Private Key เก็บไว้ที่เครื่อง client ห้ามส่งให้ผู้อื่น
  • Public Key ต้องนำไป upload เข้าหน้า OCI Console ของผู้ใช้

เมื่อใช้ oci setup config ระบบจะช่วยสร้าง key pair และไฟล์ config สำหรับใช้งานกับ OCI CLI

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

  • บัญชีผู้ใช้ OCI ที่สามารถ login เข้า OCI Console ได้
  • ติดตั้ง OCI CLI บนเครื่อง client แล้ว
  • รันคำสั่ง oci setup config แล้ว
  • มีไฟล์ Public Key ที่สร้างจาก OCI CLI

1. ตรวจสอบไฟล์ Public Key ที่ได้จาก oci setup config

หลังจากรันคำสั่ง:

oci setup config

โดยทั่วไป OCI CLI จะสร้างไฟล์ key ไว้ที่โฟลเดอร์ .oci ภายใต้ user profile ของเครื่อง client

บน Windows path มักจะเป็น:

C:\Users\<your-user>\.oci\oci_api_key_public.pem

และ private key จะอยู่ที่:

C:\Users\<your-user>\.oci\oci_api_key.pem

ไฟล์ที่ต้อง upload เข้า OCI Console คือไฟล์:

oci_api_key_public.pem
ข้อควรระวัง: ห้าม upload หรือแชร์ไฟล์ oci_api_key.pem เพราะเป็น private key ให้ upload เฉพาะไฟล์ oci_api_key_public.pem เท่านั้น

2. เปิดไฟล์ Public Key เพื่อตรวจสอบ

สามารถเปิดไฟล์ public key ด้วย Notepad หรือใช้ PowerShell:

Get-Content "$HOME\.oci\oci_api_key_public.pem"

ตัวอย่างเนื้อหา public key จะมีลักษณะประมาณนี้:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQE...
-----END PUBLIC KEY-----

ให้ตรวจสอบว่าไฟล์ขึ้นต้นด้วย -----BEGIN PUBLIC KEY----- และลงท้ายด้วย -----END PUBLIC KEY-----

3. Login เข้า OCI Console

เปิด browser แล้ว login เข้า OCI Console ด้วยบัญชีผู้ใช้ที่ต้องการใช้งานกับ OCI CLI

เมื่อ login สำเร็จ ให้คลิกที่ไอคอน Profile หรือรูปผู้ใช้บริเวณมุมขวาบนของหน้าจอ

4. เข้าเมนู User Settings

จากเมนู Profile ให้เลือก:

My Profile

หรือในบางหน้าจออาจแสดงเป็น:

User Settings
ตัวอย่างเมนู Profile และ User Settings ใน OCI Console
ตัวอย่างการเข้าเมนู Profile เพื่อไปยัง User Settings ใน OCI Console

หน้านี้เป็นหน้าสำหรับจัดการข้อมูลของผู้ใช้ เช่น API Keys, Auth Tokens, Customer Secret Keys และ credential อื่น ๆ

5. เปิดเมนู API Keys

ในหน้า User Settings ให้ดูเมนูด้านซ้าย แล้วเลือก:

API Keys

หน้านี้จะแสดงรายการ API Signing Keys ที่ผูกกับผู้ใช้ปัจจุบัน

6. เพิ่ม API Key ใหม่

คลิกปุ่ม:

Add API Key

จากนั้นเลือกวิธีเพิ่ม key เป็น:

Upload Public Key File

แล้วเลือกไฟล์ public key จากเครื่อง client:

C:\Users\<your-user>\.oci\oci_api_key_public.pem

เมื่อเลือกไฟล์แล้ว ให้กด:

Add

หรือ Save ตามที่หน้า Console แสดง

7. ตรวจสอบ Fingerprint หลัง Upload

หลังจาก upload สำเร็จ OCI Console จะแสดงค่า Fingerprint ของ API Key ที่เพิ่มเข้ามา

ตัวอย่าง Fingerprint:

12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef

ให้นำค่า Fingerprint นี้ไปตรวจสอบกับไฟล์ config ของ OCI CLI

บน Windows ไฟล์ config มักจะอยู่ที่:

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

ตัวอย่าง config:

[DEFAULT]
user=ocid1.user.oc1..aaaa...
fingerprint=12:34:56:78:90:ab:cd:ef:12:34:56:78:90:ab:cd:ef
tenancy=ocid1.tenancy.oc1..aaaa...
region=ap-singapore-1
key_file=C:\Users\<your-user>\.oci\oci_api_key.pem

ค่า fingerprint ในไฟล์ config ต้องตรงกับ Fingerprint ที่แสดงในหน้า OCI Console

8. ทดสอบ OCI CLI หลัง Upload Public Key

เปิด PowerShell แล้วรันคำสั่งทดสอบ:

oci iam region list

หาก config และ key ถูกต้อง จะเห็นรายการ region ของ OCI

หรือทดสอบดูข้อมูล user ปัจจุบัน:

oci iam user get --user-id <user_ocid>

หากใช้งานกับ OKE ต่อ สามารถทดสอบเรียก cluster ได้ เช่น:

oci ce cluster get `
  --cluster-id <cluster_ocid> `
  --region ap-singapore-1

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

ปัญหา: NotAuthenticated

ตัวอย่าง error:

ServiceError:
{
  "code": "NotAuthenticated",
  "message": "The required information to complete authentication was not provided or was incorrect."
}

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

  • ยังไม่ได้ upload public key เข้า OCI Console
  • Upload public key ผิด user
  • ค่า fingerprint ในไฟล์ config ไม่ตรงกับ key ที่ upload
  • ไฟล์ private key path ใน key_file ไม่ถูกต้อง
  • Private key ไม่ตรงกับ public key ที่ upload

ปัญหา: Permission Denied หรือ Authorization failed

หาก authenticate ผ่านแล้ว แต่ไม่มีสิทธิ์เรียก resource บางอย่าง อาจเกิดจาก IAM Policy ยังไม่อนุญาต

ตัวอย่าง:

Authorization failed or requested resource not found.

กรณีนี้ต้องให้ผู้ดูแลระบบตรวจสอบ IAM Policy ของ user หรือ group ที่ user อยู่

ปัญหา: ใช้ key ผิดไฟล์

ไฟล์ public key และ private key มีชื่อคล้ายกัน ควรตรวจสอบให้แน่ใจว่า:

  • ไฟล์ที่ upload คือ oci_api_key_public.pem
  • ไฟล์ที่ระบุใน key_file คือ oci_api_key.pem
หมายเหตุ: Public key ใช้สำหรับ upload เข้า OCI Console ส่วน private key ใช้สำหรับ sign request จากเครื่อง client และต้องเก็บไว้อย่างปลอดภัย

คำสั่งสรุปสำหรับตรวจสอบบน Windows

ดู public key:

Get-Content "$HOME\.oci\oci_api_key_public.pem"

ดู OCI CLI config:

Get-Content "$HOME\.oci\config"

ทดสอบ OCI CLI:

oci iam region list

ทดสอบเรียก OKE cluster:

oci ce cluster get `
  --cluster-id <cluster_ocid> `
  --region ap-singapore-1

สรุป

การ upload API Signing Public Key เข้า OCI Console เป็นขั้นตอนสำคัญหลังจากรัน oci setup config เพื่อให้ OCI CLI สามารถ authenticate กับ OCI API ได้

ผู้ใช้งานต้อง upload เฉพาะไฟล์ oci_api_key_public.pem เข้าไปที่เมนู My Profile → API Keys → Add API Key และตรวจสอบให้แน่ใจว่า Fingerprint ใน OCI Console ตรงกับค่า fingerprint ในไฟล์ ~/.oci/config

หลังจากตั้งค่าถูกต้องแล้ว สามารถใช้ OCI CLI เพื่อจัดการ resource บน OCI เช่น OKE Cluster, Compute, Networking และบริการอื่น ๆ ได้จากเครื่อง client

บทความนี้อธิบายวิธีเชื่อมต่อจากเครื่อง 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