使用本主題可協助您針對 AKS Arc 中的安全性和身分識別相關問題進行疑難解答和解決。
Get-AksHciCredential 失敗,並出現「找不到指定的路徑」錯誤
Get-AksHciCredential
當與安裝 AksHci 所使用的系統管理員用戶執行時,PowerShell Cmdlet 會失敗。 命令會 建立 .kube 目錄,並將組態檔放在其中。 不過,命令失敗,並出現下列錯誤:
Error: open C:\Users\<user>\.kube\config: The system cannot find the path specified.
若要重現
- 安裝 AksHci。
- 建立目標叢集。
- 以不同的系統管理員使用者身分登入計算機(多重系統管理員功能)。
- 執行
Get-AksHciCredential -Name $clusterName
。
預期的行為
Get-AksHciCredential
應該能夠在使用者的主目錄中建立 .kube 目錄,並將配置檔放在該目錄中。
若要解決此問題,請在使用者的主目錄中建立 .kube 目錄。 使用下列命令來建立目錄:
mkdir "$HOME/.kube"
在此步驟之後, Get-AksHciCredential
不應該失敗。
錯誤「憑證已過期 - 無法連線到伺服器:x509」
當控制平面憑證無法更新時,無法存取目標叢集。 嘗試連線到叢集時, kubectl
命令會顯示下列錯誤:
certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z
注意
此問題已在 2022 年 9 月版本和更新版本中修正。
若要重現
- 安裝 AksHci。
- 安裝目標叢集。 3. 關閉叢集 (VM) 超過 4 天。
- 再次開啟叢集。
徵兆和緩和措施
無法連線到目標叢集。 針對目標叢集執行的任何 kubectl
命令,會傳回類似下列錯誤訊息:
certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z
若要修正此問題:
執行下列命令以手動更新產生的憑證:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
產生新的認證:
Get-AksHciCredential -name <clustername>
幾分鐘后,請再試 kubectl
一次命令,以查看叢集現在是否可供使用。
注意
AksHci 1.0.14.x 版和更早版本中有已知的 Bug。 如果控制平面 VM 的名稱模式不是 -control-plane-
,命令 Update-AksHciClusterCertificates
可能無法運作。 您必須登入控制平面 VM 來更新憑證:
- 尋找目標叢集控制平面 VM 的IP位址。
- 執行下列命令:
ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
- 列出憑證紋身檔案:
sudo ls /etc/kubernetes/pki/cert-tattoo-*
- 使用上一個命令所列的每個檔案產生憑證:
sudo /usr/bin/cert-tattoo-provision CreateCertsWithAltNames <absolute-path-of-cert-tattoo-file>
驗證交握失敗:x509:由未知授權單位簽署的憑證
部署新的 AKS 叢集或將節點集區新增至現有叢集時,您可能會看到此錯誤。
- 檢查執行 命令的使用者是否與在 Azure Stack 或 Windows Server 上安裝 AKS 的使用者相同。 如需授與多個使用者存取權的詳細資訊,請參閱 設定多個系統管理員。
- 如果使用者相同且錯誤持續發生,請遵循下列步驟來解決問題:
- 拿掉 以刪除
$env:UserProfile.wssd\kvactl\cloudconfig
舊的管理設備憑證。 - 執行
Repair-AksHciCerts
。 - 執行
Get-AksHciCluster
以檢查是否已修正。
無法存取目標叢集 Pod 記錄 - 遠端錯誤:tls:內部錯誤
無法存取目標叢集記錄。 當您試著存取目標叢集中的 Pod 記錄時,會顯示下列 TLS 錯誤:
Error from server: Get "[https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver":](https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver%22:) remote error: tls: internal error
注意
這是 AksHci 1.0.14.x 版和更早版本中的已知問題。 它已修正為 1.0.14.x 版本的一部分(9 月版本和更新版本)。 更新至此版本的目標叢集不應該遇到此問題。
若要重現
- 安裝 AksHci。
- 安裝目標叢集。
- 請勿升級叢集 60 天。
- 重新啟動叢集。
徵兆和緩和措施
不應存取目標 Pod 記錄。 針對目標叢集執行的任何 kubectl
記錄命令都應該傳回錯誤訊息,如下所示:
Error from server: Get "[https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver":](https://10.0.0.0:10250/containerLogs/kube-system/kube-apiserver-moc-l9iv8xjn3av/kube-apiserver%22:) remote error: tls: internal error
若要修正此問題:
執行下列命令以手動更新產生的憑證:
Update-AksHciClusterCertificates -Name my-workload -fixKubeletCredentials
產生新的認證:
Get-AksHciCredential -name <clustername>
叢集控制平面 - 憑證已過期 - 無法連線到伺服器:x509
當控制平面憑證無法更新時,無法存取目標叢集。 嘗試連線到叢集時, kubectl
命令會產生下列錯誤:
certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z
注意
此問題已在 2022 年 9 月版本和更新版本中修正。
若要重現
- 安裝 AksHci。
- 安裝目標叢集。
- 關閉叢集(vms)超過 4 天。
- 再次開啟叢集。
徵兆和緩和措施
目標叢集應該無法連線。 針對目標叢集執行的任何 kubectl
命令都應該傳回,並出現類似下列的錯誤訊息:
certificate expired - Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-07-26T12:24:15-04:00 is after 2022-07-15T15:01:07Z
若要修正此問題:
執行下列命令以手動更新產生的憑證:
Update-AksHciClusterCertificates -Name my-workload -cluster -fixKubeletCredentials
產生新的認證:
Get-AksHciCredential -name <clustername>
幾分鐘后,請再試 kubectl
一次命令,以查看叢集現在是否可供使用。
KMS Pod 失敗,KMS Pod 記錄包含錯誤
此問題的一些可能徵兆如下:
kubectl get secrets
失敗並出現內部錯誤。kubectl logs <kmspod-name> -n kube-system
包含錯誤。- 當您嘗試建立 Pod 時,掛接秘密會在磁碟區中失敗。
- apiserver 無法啟動。
執行下列命令來檢視 KMS Pod 記錄中是否有錯誤:
kubectl logs <kmspod-name> -n kube-system
如果記錄傳回管理叢集 KMS Pod 中無效令牌的錯誤,請執行下列命令:
Update-AksHciCertificates
如果目標叢集 KMS Pod 中有無效令牌的錯誤,請執行下列命令:
UpdateAksHciClusterCertificates -name <cluster-name> -fixcloudcredential
錯誤 'System.Collections.Hashtable.generic_non_zero 1 [錯誤: 憑證已過期: 已過期]'
如果mocctl憑證未使用超過60天,則會過期。 AKS Arc 會 mocctl
使用命令行工具來與 MocStack 通訊,以執行 Moc 相關作業。 命令用來與 cloudagent 通訊的憑證 mocclt
會在 60 天內到期。 mocctl
當憑證接近到期日時,命令會自動更新憑證(在 ~42 天后)。 如果命令未經常使用,憑證就會過期。
若要重現行為,請安裝 AKS Arc,且不會執行任何涉及 mocctl
命令的作業 60 天。
若要修正此問題,請再次登入憑證到期。 執行下列 PowerShell 命令來登入:
Repair-MocLogin
如果在 60 天后過期,請刪除 KVA 憑證
如果未執行升級,KVA 憑證會在 60 天后到期。
Update-AksHci
和任何涉及的 kvactl
命令都會擲回下列錯誤。
Error: failed to get new provider: failed to create azurestackhci session: Certificate has expired: Expired
若要解決此錯誤,請刪除的 \kvactl\cloudconfig
過期憑證檔案,然後在看到憑證到期問題的節點上再試 Update-AksHci
一次。 您可以使用下列命令:
$env:UserProfile.wssd\kvactl\cloudconfig
如果 KVA 憑證在 60 天后過期,您可以在 KVA 憑證中找到有關此問題 的討論
已加入網域的 Azure 本機節點需要特殊 Active Directory 許可權
在 Azure 本機上部署和設定 Azure Kubernetes Service 的用戶必須具有 在建立伺服器和服務物件之 Active Directory 容器中建立 AD 物件的完全控制 許可權。
提高用戶的許可權。
Uninstall-AksHciAdAuth 失敗,錯誤為 '[Error from server (NotFound): secrets “keytab-akshci-scale-reliability” 找不到]'
如果 Uninstall-AksHciAdAuth 顯示此錯誤,您現在應該忽略它,因為此問題將會修正。
This issue will be fixed.
kubectl 記錄會傳回「錯誤:您必須登入伺服器(伺服器已要求用戶端提供認證)」
AKS Arc 發生問題,叢集可以停止傳回記錄。 發生這種情況時,執行 kubectl logs <pod_name>
會傳回「錯誤:您必須登入伺服器(伺服器已要求用戶端提供認證)」。 AKS Arc 每隔 4 天輪替核心 Kubernetes 憑證,但有時候 Kubernetes API 伺服器不會立即重載其用戶端憑證,以在憑證更新時與 kubelet 通訊。
若要減輕此問題,有數個選項:
重新執行
kubectl logs
。 例如,執行下列 PowerShell 命令:while (1) {kubectl logs <POD_NAME>; sleep 1}
kube-apiserver
在叢集的每個控制平面上重新啟動容器。 重新啟動 API 伺服器不會影響執行中的工作負載。 若要重新啟動 API 伺服器,請遵循下列步驟:取得叢集中每個控制平面的IP位址:
kubectl get nodes -o wide
執行以下命令:
ssh -i (get-akshciconfig).Moc.sshPrivateKey clouduser@<CONTROL_PLANE_IP> 'sudo crictl stop $(sudo crictl ps --name kube-apiserver -o json | jq -r .containers[0].id)'
您可以選擇性地要求
kube-apiserver
不要驗證 kubelet 的伺服器證書,但不建議用於生產工作負載:kubectl logs <POD_NAME> --insecure-skip-tls-verify-backend=true