편집

다음을 통해 공유


AKS Arc에서 보안 및 ID 알려진 문제 및 오류 수정

이 항목을 사용하여 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.

재현하려면

  1. AksHci를 설치합니다.
  2. 대상 클러스터를 만듭니다.
  3. 컴퓨터에 다른 관리 사용자(다중 관리자 기능)로 로그인합니다.
  4. 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월 릴리스 이상에서 해결되었습니다.

재현하려면

  1. AksHci를 설치합니다.
  2. 대상 클러스터를 설치합니다. 3. 4일 이상 클러스터(VM)를 끕니다.
  3. 클러스터를 다시 켭니다.

증상 및 완화

대상 클러스터에 연결할 수 없습니다. 대상 클러스터에 대해 실행되는 모든 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

문제를 해결하려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 생성된 인증서를 수동으로 갱신합니다.

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. 새 자격 증명 생성:

    Get-AksHciCredential -name <clustername>
    

몇 분 후에 명령을 다시 시도 kubectl 하여 클러스터를 사용할 수 있는지 확인합니다.

참고

AksHci 버전 1.0.14.x 이하에 알려진 버그가 있습니다. 컨트롤 플레인 VM에 이외의 -control-plane-이름 패턴이 있는 경우 명령이 Update-AksHciClusterCertificates 작동하지 않을 수 있습니다. 컨트롤 플레인 VM에 로그인하여 인증서를 업데이트해야 합니다.

  1. 대상 클러스터 컨트롤 플레인 VM의 IP 주소를 찾습니다.
  2. 다음 명령을 실행합니다. ssh -i (get-mocconfig).sshPrivateKey clouduser@<ip>
  3. 인증서 문신 파일을 나열합니다. sudo ls /etc/kubernetes/pki/cert-tattoo-*
  4. 이전 명령으로 나열된 각 파일을 사용하여 인증서를 생성합니다. sudo /usr/bin/cert-tattoo-provision CreateCertsWithAltNames <absolute-path-of-cert-tattoo-file>

인증 핸드셰이크 실패: x509: 알 수 없는 기관에서 서명한 인증서

새 AKS 클러스터를 배포하거나 기존 클러스터에 노드 풀을 추가할 때 이 오류가 표시 될 수 있습니다.

  1. 명령을 실행한 사용자가 Azure Stack 또는 Windows Server에 AKS를 설치한 사용자와 동일한지 확인합니다. 여러 사용자에게 액세스 권한을 부여하는 방법에 대한 자세한 내용은 여러 관리자 설정을 참조하세요.
  2. 사용자가 동일하고 오류가 지속되는 경우 아래 단계에 따라 문제를 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월 릴리스 이상)의 일부로 수정되었습니다. 이 버전으로 업데이트된 대상 클러스터에 이 문제가 발생하면 안 됩니다.

재현하려면

  1. AksHci를 설치합니다.
  2. 대상 클러스터를 설치합니다.
  3. 클러스터를 60일 동안 업그레이드하지 마세요.
  4. 클러스터를 다시 시작합니다.

증상 및 완화

대상 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

문제를 해결하려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 생성된 인증서를 수동으로 갱신합니다.

    Update-AksHciClusterCertificates  -Name my-workload -fixKubeletCredentials
    
  2. 새 자격 증명 생성:

    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월 릴리스 이상에서 해결되었습니다.

재현하려면

  1. AksHci를 설치합니다.
  2. 대상 클러스터를 설치합니다.
  3. 클러스터(vms)를 4일 이상 끕니다.
  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

문제를 해결하려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 생성된 인증서를 수동으로 갱신합니다.

    Update-AksHciClusterCertificates  -Name my-workload -cluster -fixKubeletCredentials
    
  2. 새 자격 증명 생성:

    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 서버를 다시 시작하려면 다음 단계를 수행합니다.

    1. 클러스터의 각 컨트롤 플레인에 대한 IP 주소를 가져옵니다.

      kubectl get nodes -o wide
      
    2. 다음 명령 실행:

      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