이 항목을 사용하여 AKS Arc에서 보안 및 ID 관련 문제를 해결하고 resolve 수 있습니다.
"지정된 경로를 찾을 수 없음" 오류로 인해 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. 4일 이상 클러스터(VM)를 끕니다.
- 클러스터를 다시 켭니다.
증상 및 완화
대상 클러스터에 연결할 수 없습니다. 대상 클러스터에 대해 실행되는 모든 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 이하에 알려진 버그가 있습니다. 컨트롤 플레인 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를 설치한 사용자와 동일한지 확인합니다. 여러 사용자에게 액세스 권한을 부여하는 방법에 대한 자세한 내용은 여러 관리자 설정을 참조하세요.
- 사용자가 동일하고 오류가 지속되는 경우 아래 단계에 따라 문제를 resolve.
- 를 제거하여 이전 관리 어플라이언스 인증서를 삭제합니다
$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
명령줄 도구를 사용하여 Moc 관련 작업을 수행하기 위해 MocStack과 통신합니다. 명령이 mocclt
cloudagent와 통신하는 데 사용하는 인증서는 60일 후에 만료됩니다. 이 mocctl
명령은 만료가 가까워지면 인증서를 자동으로 갱신합니다(~42일 후). 명령이 자주 사용되지 않으면 인증서가 만료됩니다.
동작을 재현하려면 AKS Arc를 설치하고 명령과 관련된 mocctl
작업은 60일 동안 수행되지 않습니다.
이 문제를 해결하려면 인증서가 만료되면 다시 로그인합니다. 다음 PowerShell 명령을 실행하여 로그인합니다.
Repair-MocLogin
60일 후에 만료된 경우 KVA 인증서 삭제
업그레이드가 수행되지 않으면 KVA 인증서는 60일 후에 만료됩니다.
Update-AksHci
와 관련된 kvactl
모든 명령은 다음 오류를 throw합니다.
Error: failed to get new provider: failed to create azurestackhci session: Certificate has expired: Expired
이 오류를 resolve 위해 에서 만료된 인증서 파일을 \kvactl\cloudconfig
삭제하고 인증서 만료 문제가 표시되는 노드에서 다시 시도 Update-AksHci
합니다. 다음 명령을 사용할 수 있습니다.
$env:UserProfile.wssd\kvactl\cloudconfig
KVA 인증서가 60일 후에 만료된 경우 KVA 인증서를 삭제해야 하는 경우 KVA 인증서에서 문제에 대한 논의를 찾을 수 있습니다.
도메인에 가입된 Azure Stack HCI 노드에 대한 특별한 Active Directory 권한이 필요합니다.
Azure Stack HCI에서 Azure Kubernetes Service 배포하고 구성하는 사용자는 서버 및 서비스 개체가 만들어지는 Active Directory 컨테이너에 AD 개체를 만들 수 있는 모든 권한이 있어야 합니다.
사용자의 권한을 상승합니다.
'[서버에서 오류(NotFound): 비밀 "keytab-akshci-scale-reliability"를 찾을 수 없음] 오류로 인해 Uninstall-AksHciAdAuth 실패합니다.
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)'
필요에 따라 프로덕션 워크로드에는 권장되지 않지만 kubelet의 서버 인증서를 확인하지 않도록 요청할
kube-apiserver
수 있습니다.kubectl logs <POD_NAME> --insecure-skip-tls-verify-backend=true