設定頭燈附加元件
Headlamp 是 Kubernetes 的儀表板,提供圖形化使用者介面來管理和監控您的群集資源。 適用於 IBM Cloud® Kubernetes Service 的 Headlamp 附加元件可無縫安裝 Headlamp,並提供自動生命週期管理,以及與 IBM Cloud Identity and Access Management (IAM) 整合以進行驗證。
瞭解頭燈附加元件
建議使用 Headlamp 附加元件取代已歸檔的 kubernetes-dashboard 專案。 Headlamp 提供現代化、友善的使用者介面,可檢視和管理群集中的 Kubernetes 資源。
頭燈附加元件的主要功能包括
- IAM OIDC 身份驗證:使用 IAM OIDC 無縫驗證您的 IBM Cloud 帳戶。
- 獨立的生命週期管理:附加元件版本與群集主 BOM 版本解耦,允許獨立更新。
- 可隨時存取:該附加元件會透過一個 Ingress 資源自動曝露在您集群的預設公共 ingress 主機名稱上,並附有
headlamp子網域。 - 安全存取:每個群集都會收到唯一的 OIDC 用戶端 ID,以防止認證詐騙攻擊。
必要條件
安裝頭燈附加元件之前,請確保您的群組符合下列要求:
- 您必須擁有 IBM Cloud Kubernetes Service 的 Writer 或 Manager IBM Cloud IAM 服務存取角色。
- 您的群集必須執行 支援的 Kubernetes 版本。
- 對於 Classic 群集,您必須 啟用 VRF 和服務端點。
- 您的瀏覽器必須能夠存取:
- 群集的預設入口主機名稱。
- IBM Cloud IAM 授權端點
https://iam.cloud.ibm.com。
安裝頭燈附加元件
Headlamp 附加元件目前只能透過 CLI 使用。 您無法從 IBM Cloud 主控台安裝或管理附加元件。
使用 CLI 安裝 Headlamp 附加元件
- 將「
container-service」外掛程式更新至最新版本。ibmcloud update && ibmcloud plugin update container-service - 針對您的群集。
ibmcloud ks cluster config --cluster CLUSTER_NAME_OR_ID - 啟用「
headlamp」附加元件。ibmcloud ks cluster addon enable headlamp --cluster CLUSTER_NAME_OR_ID - 確認 Headlamp 附加元件的狀態為
Addon Ready。
輸出範例:ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_IDNAME Version Health State Health Status headlamp 0.1.0 normal Addon Ready - 請確認頭燈模組是否正常運作。
kubectl get pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp
存取頭燈儀表板
安裝 Headlamp 附加元件後,您可以透過群集的預設入口主機名稱存取儀表板。
-
取得群集的預設入口主機名稱。
ibmcloud ks cluster get --cluster <cluster_name_or_ID> | grep "Ingress Subdomain" -
開啟瀏覽器並導航至
https://headlamp.<ingress_subdomain>,其中<ingress_subdomain>是您群集的預設入口主機名稱。範例:
https://headlamp.mycluster-abc123-0000.us-south.containers.appdomain.cloud -
按一下登入,以 IBM Cloud IAM 進行驗證。
-
如果您尚未登入 IBM Cloud,您會被重定向到 IAM 登入頁面。 驗證完成後,您會重新回到 Headlamp 面板。
-
經過認證後,您就可以透過 Headlamp 介面檢視和管理群集資源。
從 kubernetes-dashboard 遷移
Kubernetes 社群已將 kubernetes-dashboard 專案歸檔。 安裝 Headlamp 附加元件後,如果 kubernetes-dashboard 部署正在群集中執行,您可以縮小其規模。
要在安裝 Headlamp 後縮小 kubernetes-dashboard 部署的規模:
kubectl scale deployment -n kube-system kubernetes-dashboard --replicas=0
kubectl scale deployment -n kube-system dashboard-metrics-scraper --replicas=0
瞭解頭燈認證
Headlamp 附加元件使用 IBM Cloud IAM OIDC 身份驗證,以確保叢集資源的存取安全。
啟用 Headlamp 附加元件時,會自動設定下列驗證元件:
- 唯一的用戶端 ID:會為您的群集建立唯一的 OIDC 用戶端 ID,並儲存在
ibm-system命名空間中的 Kubernetes secret 中。 - 混合式私有-公有 OIDC:Headlamp 使用私有 IAM 端點處理後端通道請求,而前端通道(在瀏覽器中登入)則透過公有 IAM 端點進行。
- 令牌管理:驗證標記儲存於瀏覽器 cookie 中,並自動包含在對 Kubernetes API 伺服器的要求中。
驗證流程如下:
- 當您存取 Headlamp 面板時,您會看到登入頁面。
- 按一下登入會將您重定向至公開 IBM Cloud IAM 授權端點。
- 驗證成功後,IAM 會將您重新導向回 Headlamp,並提供授權碼。
- Headlamp 透過私人網路將授權代碼交換成存取標記。
- 存取權限用於驗證對 Kubernetes API 伺服器的要求。
您對群集資源的存取權限由您的 IBM Cloud IAM 角色和 Kubernetes API 伺服器強制執行的 Kubernetes RBAC 權限決定。
更新頭燈附加元件
Headlamp 附加元件會在新版本發行時自動更新。 您可以隨時檢查附加元件的目前版本和健康狀態。
要檢查附加元件版本:
ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
停用頭燈附加元件
如果您不再需要 Headlamp 面板,可以停用此附加元件。
停用 Headlamp 附加元件時,會移除下列資源:
- 頭燈部署和吊艙
- 頭燈維修與進氣資源
- OIDC 用戶端 ID 和相關機密
使用 CLI 停用 Headlamp 附加元件
- 停用 Headlamp 附加元件。
ibmcloud ks cluster addon disable headlamp --cluster <cluster_name_or_ID> - 請確認該附加元件已移除。
ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
透過 VPC 群組上的私有入口存取 Headlamp
設定您的 VPC 群集,透過專用入口而非公開入口存取 Headlamp,以加強安全性。
當您選擇從私人網路存取 Headlamp,例如透過 VPC VPN,您可以透過下列步驟重新設定群集:
-
停用群集的公用 ALB。
ibmcloud ks ingress alb disable --cluster <cluster_name_or_ID> --alb <public_ALB_ID> -
啟用私人入口。
ibmcloud ks ingress alb enable vpc-gen2 --cluster <cluster_name_or_ID> --alb <private_ALB_ID> -
將網域註冊至私人 ALB。
ibmcloud ks ingress domain create --cluster <cluster_name_or_ID> --hostname $<private_ALB_ID_hostname> -
將新網域設定為預設值。
ibmcloud ks ingress domain default replace --cluster <cluster_name_or_ID> --domain <new_domain>
IBM Cloud 後端會在大約 5 分鐘內更新頭燈。 更新完成後,儀表板可在新的預設入口主機名稱上使用,子網域為 headlamp.。
透過 Istio 入侵閘道器公開頭燈
如果您的叢集是透過 Istio 入口閘道來路由外部流量,您可以停用 Headlamp 附加元件所建立的預設 Ingress 資源,並改以 Istio Gateway 和 VirtualService 來公開 Headlamp。
您必須透過 IBM 提供的子網域,在 *.containers.appdomain.cloud 網域中公開 Headlamp。 您叢集的 OIDC 客戶端 ID 已搭配一個與該網域相符的重定向 URI 進行註冊。 原始的 istio-ingressgateway 負載平衡器主機名稱並不在該網域中,若直接使用該主機名稱,驗證將會失敗。
開始之前
- 啟用受管理的 Istio add-on。
- 將
kubectl設定為以該叢集為目標。
-
開啟
headlamp-valuesConfigMap 進行編輯,以停用 Headlamp 附加元件所建立的預設 Ingress 資源。kubectl edit cm -n ibm-system headlamp-values請在
data區段中加入以下內容,以防止此附加元件建立預設的NGINX及 Traefik Ingress 資源。data: values.yaml: |- createDefaultPublicIngressNginx: false createDefaultPrivateIngressNginx: false createDefaultPublicIngressTraefik: false createDefaultPrivateIngressTraefik: false -
請等待最多 5 分鐘,讓更新後的數值傳播至叢集。
-
請確認已移除預設的 Ingress 資源。
kubectl get ingress -n ibm-system -
取得
istio-ingressgateway負載平衡器的 IP 位址(傳統叢集)或主機名稱(VPC 叢集)。- 標準叢集:
kubectl get service istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}' ``` * VPC 叢集: ```sh {: pre} kubectl get service istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' ``` 若該指令傳回空值,表示負載平衡器尚未完成配置。 請確認該服務是否具有外部 IP,並檢查服務事件中是否存在錯誤,例如負載平衡器的配額限制。 {: note} ```sh {: pre} kubectl describe service istio-ingressgateway -n istio-system -
透過建立由 IBM 提供的子網域,來註冊負載平衡器的 IP 位址(傳統模式)或主機名稱(VPC)。 請為
TLS機密指定istio-system命名空間,以便TLS憑證可供istio-ingressgateway`` 使用。- 標準叢集:
ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_ID> --ip <istio_ingressgateway_IP> --secret-namespace istio-system ``` * VPC 叢集: ```sh {: pre} ibmcloud ks nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <istio_ingressgateway_hostname> --secret-namespace istio-system ``` -
請確認子網域已建立,並記錄下該子網域以及 SSL 憑證的機密名稱。
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_ID>標準叢集的輸出範例:
Subdomain IP(s) SSL Cert Status SSL Cert Secret Name Secret Namespace mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] created mycluster-a1b2cdef345678g9hi012j3kl4567890-0001 istio-systemVPC 叢集的輸出範例:
Subdomain Target(s) SSL Cert Status SSL Cert Secret Name Secret Namespace mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud 1234abcd-us-south.lb.appdomain.cloud created mycluster-a1b2cdef345678g9hi012j3kl4567890-0001 istio-system如果叢集中有多個 NLB-DNS 項目,請透過將「
Target(s)」或「IP(s)」欄位與「istio-ingressgateway」負載平衡器位址進行比對,並確認「Secret Namespace」欄位顯示為「istio-system」,來辨識您在上一步驟中建立的子網域。 -
建立一個名為
headlamp-istio.yaml的檔案,用以定義Headlamp的Gateway與VirtualService。 請將<subdomain>替換為上一步驟中的子網域,並將<ssl_cert_secret_name>替換為 SSL 的憑證機密名稱。TLS 的憑證機密是建立在
istio-system命名空間中的。istio-ingressgateway會從該命名空間中讀取credentialName欄位中所指定的密鑰。 請勿將憑證值複製到「Gateway」資源中。apiVersion: networking.istio.io/v1 kind: Gateway metadata: name: headlamp-gateway namespace: ibm-system spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS tls: mode: SIMPLE credentialName: <ssl_cert_secret_name> hosts: - <subdomain> --- apiVersion: networking.istio.io/v1 kind: VirtualService metadata: name: headlamp namespace: ibm-system spec: hosts: - <subdomain> gateways: - headlamp-gateway http: - route: - destination: host: headlamp.ibm-system.svc.cluster.local port: number: 80 -
請運用「
Gateway」及「VirtualService」這兩項資源。kubectl apply -f headlamp-istio.yaml -
請使用您在第 6 步驟中記錄的子網域,在網頁瀏覽器中開啟 Headlamp 儀表板。
https://<subdomain>若要從命令列驗證連線狀態,請執行以下指令。 請使用
-k選項,僅在測試期間跳過憑證驗證 — 請勿在生產環境中使用-k。curl -k -s -o /dev/null -w "%{http_code}\n" https://<subdomain>
Kubernetes 由附加元件建立的資源
Headlamp 附加元件會在您的群集中建立數個 Kubernetes 資源,這些資源需要適當的網路設定。
如果您有自訂的防火牆或網路設定,您需要將其設定為允許下列資源之間的通訊:
- 4 項 Ingress 資源
- 私人 private-iks-k8s-nginx ingressClass
- 公用 public-iks-k8s-nginx ingressClass
- private 搭配 private-iks-traefik ingressClass
- public 搭配 public-iks-traefik ingressClass
- 1 服務 ( ClusterIP on 連接埠 80 → 4466)
- 1 部署
- 頭燈容器 (port 4466)
- nginx sidecar 容器
透過公共端點為 Headlamp 附加元件啟用 OIDC
如果您的叢集無法連線至私有 IAM 端點,請覆寫 OIDC 端點設定,改為使用公開端點。
這些步驟假設叢集能夠存取 IAM 公開端點。
開始之前,請確保已為該叢集設定 kubectl。
-
開啟
headlamp-valuesConfigMap 進行編輯:kubectl edit cm -n ibm-system headlamp-values在編輯器中,請在
data區段中加入以下內容。 請將<account_id>替換為部署該叢集之帳戶的 ID。data: values.yaml: |- oidc: overrides: tokenEndpointUrl: "https://iam.cloud.ibm.com/identity/token?account=<account_id>" jwksUri: "https://iam.cloud.ibm.com/identity/keys" -
請等待最多 5 分鐘,讓更新後的數值傳播至叢集。
-
重新啟動頭燈的部署:
kubectl rollout restart deployment/headlamp -n ibm-system
排除頭燈附加元件的故障
使用下列資訊排除頭燈附加元件的常見問題。
無法存取頭燈儀表板
如果無法存取 Headlamp 面板,請確認下列事項:
- 檢查附加元件是否已安裝且健康。
ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID> - 請確認頭燈模組是否正常運作。
kubectl get pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp - 檢查入口資源的設定是否正確。
kubectl get ingress -n ibm-system - 對於僅限公開存取的叢集,請確認網路安全規則允許向外建立 HTTPS 連線至公開的 IAM 端點。 如有需要,請參閱《 透過公共端點為 Headlamp 附加元件啟用 OIDC 》,以更新 OIDC 設定。
驗證失敗
如果存取 Headlamp 面板時驗證失敗:
-
確認您擁有存取群集所需的 IAM 權限。
-
檢查您的瀏覽器是否可以存取
https://iam.cloud.ibm.com。 -
清除瀏覽器 cookie 並重試。
-
驗證 OIDC 用戶端 ID 秘密是否存在於群集中。
kubectl get secret clientid-secrets -n ibm-system
Pods 未執行
如果頭燈吊艙未啟動:
- 檢查 pod 狀態和事件。
kubectl describe pods -n ibm-system -l app.kubernetes.io/name=addon-headlamp - 請檢查 Pod 日誌是否有錯誤。
kubectl logs -n ibm-system -l app.kubernetes.io/name=addon-headlamp