ข้ามไปยังเนื้อหาหลัก

เชื่อมต่อ Kubernetes cluster ภายในกับ Operate

LOHA Operate ช่วยให้ workspace เห็น inventory แบบอ่านอย่างเดียวของ workload Kubernetes ที่ผู้ดูแลคลัสเตอร์อนุมัติอย่างชัดเจนเท่านั้น ใน pilot นี้รองรับ profile metadata-minimal: Deployment, ReplicaSet, StatefulSet, Pod, Job และ CronJob ใน namespace ที่ระบุชื่อไว้ ระบบไม่เก็บ logs หรือ Events และไม่แก้ไขคลัสเตอร์

Agent เชื่อมต่อ HTTPS ออกไปที่ LOHA operations gateway เท่านั้น LOHA ไม่เปิดการเชื่อมต่อขาเข้ามายังคลัสเตอร์ และขั้นตอนนี้ไม่ขอ kubeconfig, Kubernetes token, private key หรือรหัสผ่าน proxy ของคุณ

Workspace administrator เป็นผู้สร้างและยืนยัน connection ส่วน cluster administrator เป็นผู้เตรียมคลัสเตอร์ ตรวจ RBAC ที่ render แล้ว และติดตั้ง agent ควรเปิดทั้งสองหน้าต่างไว้ เพราะ enrollment token แสดงครั้งเดียวและเรียกคืนไม่ได้

ข้อกำหนดก่อนเริ่ม​

ใช้คู่มือนี้เมื่อ Settings → Operate แสดงว่าสามารถติดตั้งได้แล้วเท่านั้น สถานะนี้ยืนยันว่า LOHA มี gateway ที่เข้าถึงได้, public CA bundle, chart version/checksum ที่เปลี่ยนแปลงไม่ได้, image repository/digest และ protocol version หากแสดงว่ายังติดตั้งไม่ได้ ให้กด ลองใหม่ ภายหลัง หรือติดต่อ platform administrator ผู้รับผิดชอบการเปิด Operate ห้ามเดา hostname, chart, image, CA bundle หรือใช้ tag latest จาก environment อื่น

Pilot นี้รองรับตาม qualification ที่พบด้านล่าง และไม่ใช่ข้อบังคับให้อัปเกรด Cluster installer จะไม่ตรวจพบ cluster โดยอัตโนมัติ และไม่อัปโหลด kubeconfig หรือ token

ส่วนประกอบการรองรับที่ยืนยันสำหรับรีลีสนี้
Kubernetes serverรองรับ 1.34.x เท่านั้น (>=1.34.0 <1.35.0) และผ่าน qualification บน UAT v1.34.8+rke2r2 แล้ว Kubernetes 1.25.x และ 1.35+ อยู่นอกช่วงที่ยืนยันสำหรับรีลีสนี้ หยุดติดตั้งเมื่ออยู่นอกช่วง ใช้ pilot cluster ที่รองรับหรือขอ validation ความเข้ากันได้
Helmขั้นต่ำ 3.19.0 สำหรับ Kubernetes 1.34 และแนะนำ 3.19.x upstream Helm version-skew matrix ระบุว่า 3.19.x รองรับ Kubernetes 1.34.x–1.31.x แต่ช่วง upstream นี้ไม่ได้ขยายการรองรับ LOHA agent เกิน Kubernetes 1.34.x Helm 3 รุ่นอื่นต้องระบุชัดว่ารองรับ Kubernetes 1.34 ส่วน Helm 4 ยังไม่ผ่านการรับรองใน flow นี้
kubectlใช้ 1.33.x–1.35.x กับ Kubernetes server 1.34 และแนะนำให้ตรงกับ 1.34.x ขั้นต่ำคือ 1.33.0 โดยขึ้นกับ HA server skew ตาม Kubernetes version-skew policy kubectl 1.35 ไม่ได้หมายความว่า Kubernetes server 1.35 ได้รับการรองรับ
Rancher / RKE2Agent ไม่ต้องใช้ Rancher และ LOHA ไม่มีเวอร์ชัน Rancher ขั้นต่ำที่รับรองแยกต่างหาก ให้ตรวจ Kubernetes downstream จริงและ combination ที่ผู้ขายรองรับ Rancher 2.7.4 ไม่ได้รับรอง Kubernetes 1.25.12
Installer shellBash หรือ Zsh ที่มี helm, kubectl, mktemp และ sha256sum หรือ shasum โดยไม่กำหนดเวอร์ชัน shell เป็นตัวเลข
ต้องมีสิ่งที่ตรวจ
Profile ที่รองรับmetadata-minimal และชื่อ namespace อย่างน้อยหนึ่งชื่อที่ระบุชัด Events, logs, actions, production access, wildcard และ inventory ทั้งคลัสเตอร์อยู่นอก flow นี้
เครื่องมือคลัสเตอร์Cluster administrator มี kubectl และ Helm 3 และเลือก context ของ non-production pilot cluster ได้
ขอบเขต namespaceNamespace ที่อนุมัติมีอยู่แล้วทุกอัน ต้องจด UID ของแต่ละ namespace ก่อนติดตั้ง หากสร้าง namespace ชื่อเดิมใหม่แต่ UID เปลี่ยน ระบบจะ quarantine โดยตั้งใจ
เครือข่ายAgent resolve ชื่อ gateway และออก HTTPS/443 ได้ ถ้าต้องผ่าน CONNECT proxy ให้ cluster administrator สร้าง Secret reference; URL และ credentials ต้องไม่อยู่ใน Helm values หรือคำสั่ง
RegistryNode ดึง agent image ที่ pin digest ได้ ถ้า registry ต้องใช้ credentials ให้ตั้ง image-pull mechanism ที่องค์กรอนุมัติแยกต่างหาก ห้ามใส่ registry credentials ลง values ของ agent
Trust และ storageบันทึก public gateway CA bundle ที่ LOHA ให้ และเตรียม persistent storage ที่เข้ารหัสตามนโยบายผ่าน StorageClass หรือ PVC ที่มีอยู่แล้ว

ก่อนทุกคำสั่งที่แก้คลัสเตอร์ ให้ตรวจ context ปัจจุบันและเวอร์ชัน server ควบคู่กับเวอร์ชัน client คำสั่งต่อไปนี้เป็น read-only:

kubectl config current-context
kubectl version --output=yaml
helm version --short

คำสั่งแรกต้องเป็นชื่อคลัสเตอร์ที่ตั้งใจใช้ ยืนยันว่า Kubernetes server อยู่ในช่วงที่ผ่านการรับรอง จากนั้นตรวจชื่อ namespace ด้วย kubectl get namespace หยุดทันทีหากผลลัพธ์ไม่ตรงกับที่คาดไว้

Operate connection กับ Delivery binding เป็นคนละสิ่งกัน Connection อาจ Active และส่ง inventory ได้ แต่โครงการยัง bind workload ไม่ได้ การ bind ต้องเปิด Delivery/Targets และมี Delivery binding ที่ระบุ managedWorkload.namespace ไว้อย่างชัดเจนด้วย

เตรียม scope และสร้าง connection​

  1. ไปที่ Settings → Operate แล้วเลือก เชื่อมต่อ private cluster
  2. ตั้งชื่อที่จำง่าย เช่น Payments staging และใส่เฉพาะ namespace ที่ agent อ่านได้ หน้าจอจะตัดชื่อซ้ำและปฏิเสธชื่อ Kubernetes namespace ที่ไม่ถูกต้อง
  3. ใช้ profile pilot เป็น metadata-minimal ซึ่งให้ inventory เท่านั้น
  4. คุณสามารถอ่าน UID ของทุก namespace ล่วงหน้าก่อนสร้าง connection ได้ ขั้นตอนนี้เป็น read-only ให้เก็บผลลัพธ์คู่กับชื่อ namespace แทนที่เฉพาะชื่อ namespace ของคุณในคำสั่งต่อไปนี้ทีละชื่อ:
kubectl get namespace 'YOUR_APPROVED_NAMESPACE' -o jsonpath='{.metadata.uid}'
printf '\n'

YOUR_APPROVED_NAMESPACE คือชื่อ namespace ที่คุณอนุมัติเอง ไม่ใช่ release coordinate Wizard จะแสดงช่อง UID หลังจากสร้าง connection แล้วเท่านั้น จึงให้เก็บคู่ชื่อกับ UID ไว้ใช้ในขั้นถัดไป

  1. สร้าง connection จากนั้น LOHA จะแสดง connection ID, installation profile, one-time enrollment token และช่อง UID สำหรับทุก namespace ที่อนุมัติ กรอกและตรวจ UID ที่เก็บไว้ในช่องเหล่านี้ก่อน wizard จะสร้าง values.yaml, คำสั่ง render หรือคำสั่ง Helm install คัดลอก values.yaml ที่ไม่มี secret จาก panel ลงไฟล์ local ไฟล์ประกอบด้วย connection ID, namespace UID, public gateway URL และชื่อ CA ConfigMap รวมถึง image digest ที่เปลี่ยนแปลงไม่ได้ แต่ไม่มี enrollment token

ห้ามใส่ enrollment token ลง ticket, chat, shell history, Helm values, Pod environment variable, Kubernetes Secret, ไฟล์ หรือ support request

เตรียมคลัสเตอร์​

คำสั่งใน installation panel สร้างจาก installation profile ที่พร้อมใช้งาน ใช้คำสั่งที่สร้างจากหน้านั้นสำหรับ chart location, version, checksum, image digest และ gateway URL เอกสารสาธารณะตั้งใจไม่เผยแพร่ release coordinate ที่เดาหรือผูกกับ environment ใด environment หนึ่ง

สร้าง agent namespace และ public gateway CA ConfigMap ก่อน render chart บันทึก CA bundle ที่ LOHA แสดงไว้เป็นไฟล์ local ที่มีการป้องกัน แล้วใช้ path จริงของไฟล์นั้นในคำสั่ง PATH_TO_LOHA_PUBLIC_CA_BUNDLE เป็น placeholder สำหรับไฟล์ local เพียงจุดเดียว และต้องมี public certificate ที่ได้จาก installation panel เท่านั้น ห้ามมี private key

kubectl create namespace loha-operate-system --dry-run=client -o yaml | kubectl apply -f -
kubectl -n loha-operate-system create configmap loha-operate-gateway-ca \
--from-file=ca.crt='PATH_TO_LOHA_PUBLIC_CA_BUNDLE' \
--dry-run=client -o yaml | kubectl apply -f -
kubectl -n loha-operate-system get configmap loha-operate-gateway-ca

คำสั่งสุดท้ายต้องแสดง ConfigMap นี้เป็น public trust bundle เท่านั้น ห้ามแก้เป็น client certificate หรือ Secret

Identity storage และ proxy ที่เลือกใช้ได้​

Agent สร้าง private key และเก็บ quarantine/active certificate ที่ /var/lib/loha/identity ให้เปิด persistent volume ค่าเริ่มต้นไว้ และเลือก StorageClass ที่เข้ารหัสตามนโยบาย หากใช้ customer-managed volume ที่สร้างไว้แล้ว ให้ตั้งเฉพาะ identity.persistence.existingClaim ใน values ที่คัดลอก ห้ามใช้ emptyDir สำหรับการติดตั้งแบบ durable เพราะหาก identity volume สูญหายต้อง revoke และ enroll ใหม่

values.yaml ที่คัดลอกคือ source of truth ให้ตรวจ field ต่อไปนี้ และห้ามแทนค่าที่ Settings สร้างจาก installation profile

Fieldที่มาหรือตัวเลือกที่อนุญาตหมายเหตุ
image.repositorySettings installation profileชื่อ repository อย่างเดียว ห้ามใส่ tag หรือ digest ในช่องนี้
image.digestSettings installation profileimmutable image digest แบบ sha256: ถ้าไม่มี chart จะ render ไม่ผ่าน
gateway.urlSettings installation profileHTTPS gateway URL ที่ไม่มี credentials
gateway.caConfigMaploha-operate-gateway-caConfigMap ที่สร้างจาก public CA bundle
connectionIDSettings connection detailระบุ connection นี้ ไม่ใช่ credential
allowedNamespacesรายชื่อ namespace ที่อนุมัติทุกชื่อต้องระบุชัด ห้าม wildcard หรือ list ว่าง
namespaceUIDsUID ที่อ่านจาก live clusterคู่ namespace=UID คั่นด้วย comma ต้องตรงกับ allowedNamespaces
identity.persistence.enabledtrueต้องเก็บ identity แบบ durable
identity.persistence.storageClassStorageClass local ที่อนุมัติเลือกได้เมื่อ cluster default ไม่เหมาะสม
identity.persistence.existingClaimชื่อ PVC local ที่อนุมัติใช้แทน PVC ที่ chart สร้าง ห้ามตั้ง storage strategy ทั้งสองแบบ
proxy.existingSecretชื่อ Secret local ที่อนุมัติเป็น reference เท่านั้น ห้ามเป็น proxy URL หรือ credential
certificate.renewBefore และ resourcesใช้ chart defaults เว้นแต่มี policy ที่ review แล้วห้ามเปลี่ยนเพื่อหลบปัญหา TLS หรือ resource

หาก traffic ออกต้องผ่าน CONNECT proxy ให้ cluster administrator สร้าง Secret ใน loha-operate-system ที่มี HTTPS_PROXY และอาจมี NO_PROXY values ใส่ได้เฉพาะชื่อ Secret และชื่อ key:

proxy:
existingSecret: your-approved-proxy-reference
httpsProxyKey: HTTPS_PROXY
noProxyKey: NO_PROXY

your-approved-proxy-reference คือชื่อ Secret ที่ cluster administrator สร้างไว้แล้ว ห้ามใส่ proxy URL หรือ plaintext credential ใน values, Helm command, command history หรือ support request

ตรวจและติดตั้ง agent​

ใช้ card Verify chart, Render และ Install ที่ Settings สร้างให้ตามลำดับ Card เหล่านั้นมี immutable values สำหรับ connection ของคุณ ขั้นตอน verified archive เป็นดังนี้:

set -eu
CHART_DIR="$(mktemp -d)"
trap 'rm -rf "$CHART_DIR"' EXIT
# วางคำสั่ง `helm pull ... --version ... --destination "$CHART_DIR"` ที่ Settings สร้างให้ตรงนี้
# วางคำสั่งเปรียบเทียบ expected SHA-256 ที่ Settings สร้างให้ตรงนี้ และต้องไม่มี mismatch
# `ARCHIVE` คือไฟล์ .tgz เพียงไฟล์เดียวที่คำสั่ง verify ยอมรับ

คำสั่งที่ระบบสร้างจะใช้ helm pull กับ OCI location และ version ที่ตรงกับ profile หา .tgz ได้เพียงหนึ่งไฟล์ แล้วเปรียบเทียบ digest sha256: ที่คำนวณได้กับ profile checksum หากไม่ตรงต้องหยุด: ทิ้ง archive และขอ installation profile ที่สร้างใหม่ ห้ามข้ามการตรวจ, retag image หรือแทน digest ด้วย latest

Profile ปัจจุบันตรวจ chart ด้วย SHA-256 checksum และตรวจ agent image ด้วย immutable digest หาก profile ในอนาคตมี release signature และคำสั่งตรวจ ให้ใช้คำสั่งที่ release นั้นให้มาเป็นการตรวจเพิ่ม ห้ามเดา signature URL, public key หรือคำสั่ง verify เอง

หลัง verify ให้ใช้ local archive เดิมสำหรับทั้งสองคำสั่ง:

# Card ที่ Settings สร้าง: helm template loha-operate-agent "$ARCHIVE" \
# --namespace loha-operate-system --values loha-operate-values.yaml
# Card ที่ Settings สร้าง: helm upgrade --install loha-operate-agent "$ARCHIVE" \
# --namespace loha-operate-system --create-namespace --values loha-operate-values.yaml

บรรทัดเหล่านี้เป็น comment โดยตั้งใจ ไม่ใช่ release placeholder ที่ copy ได้ ให้คัดลอก card ที่ตรงกันจาก Settings ซึ่ง $ARCHIVE ผ่านการ verify ใน shell เดียวกันแล้ว Chart ตั้งชื่อ Deployment เป็น loha-operate-agent-loha-operate-agent ใน namespace loha-operate-system เสมอ

ตรวจ manifest ที่ render ก่อนติดตั้ง สิทธิ์ที่ยอมรับมีเพียง get, list, watch แบบ namespaced สำหรับ Deployments, ReplicaSets, StatefulSets, Pods, Jobs และ CronJobs ใน namespace ที่อนุมัติ และ get namespaces แบบ cluster-scoped ที่จำกัดเฉพาะชื่อ namespace เหล่านั้น ต้องเห็น Deployment ที่ non-root, projected service-account token, identity PVC, gateway CA ConfigMap และ optional proxy Secret reference

ปฏิเสธ manifest ที่ให้สิทธิ์ Secrets, ConfigMaps, Nodes, namespace list, Events, logs, exec, attach, port-forward, write verbs, impersonation, wildcard RBAC, cluster-admin, privileged container, host network หรือ host path ห้ามติดตั้งจนกว่าจะเข้าใจความต่าง

รอ Pod และตรวจ Deployment ที่คาดไว้:

kubectl -n loha-operate-system rollout status deployment/loha-operate-agent-loha-operate-agent
kubectl -n loha-operate-system get pvc

Pod Ready หมายถึง Kubernetes เริ่ม process ได้เท่านั้น ไม่ได้ยืนยันว่า LOHA enroll, activate, รับ heartbeat หรือรับ observation แล้ว

Enroll และยืนยัน identity​

เปิดหน้า LOHA confirmation ทิ้งไว้ เมื่อ Deployment พร้อม ให้ป้อน one-time token แบบไม่ echo คำสั่ง Bash และ Zsh นี้รับ token จาก terminal ส่งผ่าน stdin แล้วล้าง shell variable:

read -rs LOHA_ENROLL_TOKEN
printf '%s' "$LOHA_ENROLL_TOKEN" | kubectl -n loha-operate-system exec -i \
deployment/loha-operate-agent-loha-operate-agent -- /operate-agent enroll
unset LOHA_ENROLL_TOKEN

Helper จะแสดง identity ID และ fingerprint แบบ lowercase hexadecimal 64 ตัว จากนั้นรายงานว่า enrollment ถูก quarantine ระหว่างรอ confirmation คัดลอก fingerprint เฉพาะไปยังฟอร์มยืนยันของ LOHA ตรวจ UID ของทุก namespace อีกครั้งจากค่าที่อ่านจากคลัสเตอร์ LOHA ไม่ยืนยัน identity อัตโนมัติ

หลัง confirm ให้ปล่อย helper ทำงานต่อจนรายงาน activation Agent จะเปลี่ยน quarantine certificate เป็น active certificate แล้ว running agent จึง claim session หาก network ขาดหลัง token ถูกใช้แล้วแต่ identity volume ยังอยู่ ให้ resume โดยไม่อ่านหรือสร้าง token ใหม่:

kubectl -n loha-operate-system exec \
deployment/loha-operate-agent-loha-operate-agent -- /operate-agent enroll

คำสั่ง resume ใช้ quarantined identity ที่อยู่บน PVC อยู่แล้ว ห้ามลบ PVC หรือ identity directory เพื่อแก้ network หาก token หมดอายุก่อนใช้, ถูก consume ไปแล้วแต่ไม่มี local identity ใช้ได้ หรือ identity volume สูญหายถาวร ให้ revoke pending connection ใน LOHA แล้วสร้าง connection ใหม่ ห้ามใช้ token ซ้ำ

ตรวจ health, inventory และ runtime binding​

ใน LOHA ให้รอตาม onboarding stage: รอ enroll, รอยืนยัน, รอ heartbeat แรก, รอ observations, แล้วจึง active พร้อม observations ตรวจทั้ง Last seen และ freshness ของ observation เพราะ Active ที่ยังไม่มี observation ไม่ได้พิสูจน์ว่า workload พร้อมใช้งาน

Cluster administrator ตรวจ least-privilege boundary ได้ แทนที่ YOUR_APPROVED_NAMESPACE ด้วย namespace ที่เลือกไว้เท่านั้น:

kubectl auth can-i --as=system:serviceaccount:loha-operate-system:loha-operate-agent-loha-operate-agent \
list secrets -n 'YOUR_APPROVED_NAMESPACE'
kubectl auth can-i --as=system:serviceaccount:loha-operate-system:loha-operate-agent-loha-operate-agent \
list deployments -n 'YOUR_APPROVED_NAMESPACE'
kubectl auth can-i --as=system:serviceaccount:loha-operate-system:loha-operate-agent-loha-operate-agent \
get namespace/'YOUR_APPROVED_NAMESPACE'

ผลที่คาดคือ no, yes, yes ตามลำดับ และ namespace list ต้องเป็น no เสมอ

การ bind Delivery target ต้องเปิด Delivery/Targets สำหรับ workspace ก่อน และสร้าง Delivery binding ที่มี managedWorkload.namespace ชัดเจน ไปที่ Operate ของโครงการแล้วเลือก exact observed workload UID ชื่ออย่างเดียวไม่เพียงพอ เพราะ UID ป้องกันการนำ binding เดิมไปใช้กับ workload ที่ถูกสร้างใหม่ หากไม่มี observed workload ให้แก้ heartbeat, RBAC, namespace UID หรือ freshness ก่อน

ดูแล, revoke, upgrade และ offboard​

Agent ต่ออายุ active client certificate ก่อนหมดอายุโดยใช้ identity บน PVC หากต่ออายุไม่สำเร็จจนหมดอายุ agent จะ fail closed ห้ามปิด certificate verification หรือคัดลอก identity files ไปที่อื่น

สำหรับ upgrade ให้ขอ available installation profile ใหม่ ตรวจ archive และ image digest ใหม่ render อีกครั้ง แล้วใช้ card helm upgrade --install ที่ระบบสร้างพร้อม values และ PVC เดิม เริ่มจาก connection แบบ non-production หนึ่งชุด Rollback ต้องคง identity PVC ไว้ และใช้ chart/application version ที่ additive-compatible ห้าม rollback ด้วยการลบ identity state

หากต้อง revoke access ให้ revoke connection ใน LOHA ก่อน จากนั้นถอน namespaced RoleBindings และ namespace-identity grant ด้วยการ uninstall Helm release ปิด egress ของ agent แล้วลบ identity PVC เฉพาะเมื่อ retention policy อนุญาต สุดท้ายรัน kubectl auth can-i ซ้ำและบันทึกว่า ServiceAccount เดิมไม่มีสิทธิ์อ่าน namespace ที่เคยอนุมัติอีกต่อไป PVC ที่หายหรือ certificate ที่ถูก revoke ต้อง enroll ใหม่และยืนยันใหม่

แก้ปัญหา​

อาการตรวจและแก้ไขผลที่คาด
ติดตั้งไม่ได้หรือไม่เห็น Operate featureกด ลองใหม่ ขอให้ platform administrator ตรวจ installation profile และ feature enablement ห้ามเดา gateway หรือ release valueSettings แสดง profile ที่พร้อม หรือผู้รับผิดชอบแจ้งขั้นตอนถัดไป
ดึง chart หรือ checksum ไม่ผ่านใช้คำสั่ง helm pull ที่ Settings สร้างใหม่ แล้วเทียบ archive กับ sha256: checksum ที่ระบบสร้าง ตรวจ approved registry accessมี archive เดียวที่ตรงกันทุกตัวก่อน render/install
ดึง image ไม่ได้ตรวจ approved registry access ของ node และ digest ใน values ที่คัดลอก ตั้ง image-pull reference ที่องค์กรอนุมัตินอก agent valuesPod ดึง digest ที่ระบุได้
PVC เป็น Pendingดู PVC และ StorageClass ด้วย kubectl -n loha-operate-system describe pvc แก้ capacity, access mode หรือ StorageClass ที่อนุมัติIdentity PVC เป็น Bound ก่อนเชื่อถือความทนทานของ enrollment
ไม่มี Gateway CA ConfigMapรัน kubectl -n loha-operate-system get configmap loha-operate-gateway-ca แล้วสร้างใหม่จาก public bundle ที่ Settings แสดงDeployment mount ca.crt และ TLS verification ยังเปิดอยู่
DNS, egress, proxy หรือ TLS ล้มเหลวตรวจ DNS และ route HTTPS/443 ที่อนุมัติจากคลัสเตอร์ ตรวจเฉพาะ Secret reference/key ของ proxy แล้วตรวจ CA bundle ว่าเป็น public bundle ล่าสุดจาก LOHAAgent ถึง gateway โดยตรวจ certificate ตามปกติ ห้ามใช้ TLS skip-verify
Forbidden หรือไม่เห็น workloadsRender chart ด้วย values เดิม เปรียบเทียบ Roles/RoleBindings กับ namespace ที่อนุมัติ ใช้ kubectl auth can-i กับ resource/namespace ที่แน่นอนอนุญาตเฉพาะ inventory reads ใน namespace ที่ตั้งชื่อ ห้ามขยาย RBAC, ใช้ wildcard หรือให้ cluster-admin
Namespace UID ไม่ตรงอ่าน live UID ซ้ำ namespace ที่สร้างใหม่ต้อง review และ confirm เป็น scope ใหม่ ห้ามแก้ pairing เดิมแบบเดาConnection ได้รับการยืนยันใหม่ด้วย namespace identity ที่ตั้งใจ
Token หมดอายุหรือถูกใช้แล้วห้ามลองซ้ำ หากไม่มี quarantined identity ที่ใช้ได้บน PVC ให้ revoke pending connection และสร้างใหม่ใช้ one-time token ใหม่ครั้งเดียวกับ connection ใหม่
Quarantine ค้างรอเปรียบเทียบ fingerprint และ UID ทุกตัวใน LOHA แล้วให้ workspace administrator confirm หากถูก interrupt หลังใช้ token ให้ run resume commandHelper รายงาน activation และ UI เปลี่ยนเป็นรอ heartbeat
Certificate ถูก revoke/หมดอายุ หรือ activation abortตรวจสถานะ connection ใน LOHA รักษา PVC ไว้หากเป็น outage ชั่วคราว; หาก revoke, expire หรือสูญหายถาวรให้สร้าง confirmed enrollment ใหม่Identity เก่าถูก fence และ identity ใหม่เป็นชุดใหม่
Active แต่ไม่มี heartbeat/observation/fresh dataตรวจ Last seen, gateway reachability, namespace UID และ inventory RBAC รอ full observation แรกหลัง reconnectLOHA แสดง heartbeat ล่าสุดและ observations ที่มี freshness ปัจจุบัน
Delivery binding ว่างยืนยันว่าเปิด Delivery/Targets และ binding มี managed workload namespace ที่ชัดเจน แล้วรอ observed workload UIDโครงการเลือก exact observed workload UID ได้

ห้ามส่ง kubeconfig, enrollment token, proxy credentials, private key, เนื้อหา identity volume หรือ plaintext Secret value ให้ support ส่งได้เฉพาะข้อมูล diagnostic ที่องค์กรอนุญาตและ redacted เช่น เวลา, public connection ID, stage ที่ LOHA แสดง และผลว่าคำสั่งที่ปลอดภัยได้ผลตามคาดหรือไม่