다음을 통해 공유


Azure Arc 사용 Kubernetes 클러스터에 대한 연결 문제 진단

클러스터를 Azure Arc에 연결하는 데 문제가 있는 경우 여기에 나와 있는 문제 중 하나 때문일 수 있습니다. 두 가지 순서도에 단계별 도움말이 제공됩니다. 하나는 프록시 서버를 사용하지 않는 경우이고 다른 하나는 네트워크 연결에서 프록시 서버를 사용하는 경우 적용됩니다.

이 순서도의 단계는 Azure CLI 또는 Azure PowerShell을 사용하여 클러스터를 연결하는지 여부에 관계없이 적용됩니다. 그러나 일부 단계에서는 Azure CLI를 사용해야 합니다. 아직 Azure CLI를 설치하지 않은 경우 시작하기 전에 설치해야 합니다.

프록시 없이 연결

프록시 서버 없이 클러스터를 Azure Arc에 연결하려고 할 때 문제를 진단하려면 이 순서도를 검토합니다. 각 항목에 대한 자세한 내용은 아래에서 설명합니다.

프록시를 사용하지 않을 때 연결 문제를 확인하는 시각적 표현을 보여 주는 순서도

Azure ID에 충분한 권한이 있나요?

클러스터를 연결하기 위한 필수 구성 요소를 검토하고 클러스터를 연결하는 데 사용하는 ID에 필요한 권한이 있는지 확인합니다.

최신 버전의 Azure CLI를 실행하고 있나요?

설치된 최신 버전이 있는지 확인하세요.

Azure PowerShell을 사용하여 클러스터를 연결한 경우 최신 버전을 실행하고 있는지 확인합니다.

최신 확장 버전이 connectedk8s인가요?

다음 명령을 실행하여 Azure CLI connectedk8s 확장을 최신 버전으로 업데이트합니다.

az extension update --name connectedk8s

확장을 아직 설치하지 않은 경우 다음 명령을 실행하여 확장을 설치할 수 있습니다.

az extension add --name connectedk8s

kubeconfig가 올바른 클러스터를 가리키고 있나요?

kubectl config get-contexts를 실행하여 대상 컨텍스트 이름을 확인합니다. 그런 다음, kubectl config use-context <target-cluster-name>를 실행하여 기본 컨텍스트를 올바른 클러스터로 설정합니다.

모든 필수 리소스 공급자가 등록되어 있나요?

Microsoft.Kubernetes, Microsoft.KubernetesConfiguration, and Microsoft.ExtendedLocation 리소스 공급자가 등록되어 있는지 확인합니다.

모든 네트워크 요구 사항을 충족하나요?

네트워크 요구 사항을 검토하고 필요한 엔드포인트가 차단되지 않았는지 확인합니다.

azure-arc 네임스페이스의 모든 Pod가 실행되고 있나요?

모든 것이 올바르게 작동하는 경우 Pod는 모두 Running 상태에 있어야 합니다. kubectl get pods -n azure-arc를 실행하여 Pod의 상태가 Running이 아닌지 확인합니다.

여전히 문제가 있나요?

위의 단계에서는 많은 일반적인 연결 문제를 해결하지만 여전히 연결할 수 없는 경우 문제 해결 로그 파일을 생성한 다음, 지원 요청을 열어 문제를 추가로 조사할 수 있습니다.

문제 해결 로그 파일을 생성하려면 다음 명령을 실행합니다.

az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>

지원 요청을 만들추가 세부 정보 섹션에서 파일 업로드 옵션을 사용하여 생성된 로그 파일을 업로드합니다.

프록시 서버와 연결

하나 이상의 컴퓨터에서 프록시 서버를 사용하는 경우 기본 문제 해결 단계를 위해 비 프록시 순서도의 처음 5단계(리소스 공급자 등록을 통해)를 완료합니다. 그런 다음, 여전히 문제가 발생하는 경우 다음 순서도에서 추가 문제 해결 단계를 검토합니다. 각 항목에 대한 자세한 내용은 아래에서 설명합니다.

프록시를 사용할 때 연결 문제를 확인하는 시각적 표현을 보여 주는 순서도

컴퓨터가 프록시 서버를 통해 명령을 실행하고 있나요?

컴퓨터가 프록시 서버 뒤에서 명령을 실행하는 경우 필요한 모든 환경 변수를 설정해야 합니다. 자세한 내용은 아웃바운드 프록시 서버를 사용하여 연결을 참조하세요.

예시:

export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"

프록시 서버가 신뢰할 수 있는 인증서만 허용하나요?

az connectedk8s connect 명령을 실행할 때 --proxy-cert <path-to-cert-file>를 포함하여 인증서 파일 경로를 포함해야 합니다.

az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>

프록시 서버가 필요한 네트워크 엔드포인트에 연결할 수 있나요?

네트워크 요구 사항을 검토하고 필요한 엔드포인트가 차단되지 않았는지 확인합니다.

프록시 서버가 HTTP만 사용하나요?

프록시 서버에서 HTTP만 사용하는 경우 두 매개 변수 모두에 proxy-http를 사용할 수 있습니다.

프록시 서버가 HTTP 및 HTTPS 둘 다로 설정된 경우 지정된 --proxy-https--proxy-http 매개 변수를 사용하여 az connectedk8s connect 명령을 실행합니다. --proxy-http(HTTP 프록시의 경우) 및 --proxy-https(HTTPS 프록시의 경우)를 사용하고 있는지 확인합니다.

az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port>  

프록시 서버에 서비스 간 통신을 위해 건너뛰기 범위가 필요한가요?

건너뛰기 범위가 필요한 경우 az connectedk8s connect 명령에서 --proxy-skip-range <excludedIP>,<excludedCIDR>를 사용합니다.

az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port> --proxy-skip-range <excludedIP>,<excludedCIDR>

azure-arc 네임스페이스의 모든 Pod가 실행되고 있나요?

모든 것이 올바르게 작동하는 경우 Pod는 모두 Running 상태에 있어야 합니다. kubectl get pods -n azure-arc를 실행하여 Pod의 상태가 Running이 아닌지 확인합니다.

엔드포인트에 대한 DNS 확인이 성공했는지 확인

Pod 내에서 엔드포인트에 대한 DNS 조회를 실행할 수 있습니다.

kubectl exec 명령을 실행하여 Pod에 연결하고 DNS Utils 패키지를 설치할 수 없는 경우 어떻게 해야 할까요? 이 경우 문제가 있는 Pod와 동일한 네임스페이스에서 테스트 Pod를 시작한 다음 테스트를 실행할 수 있습니다.

참고 항목

DNS 확인 또는 송신 트래픽으로 필요한 네트워크 패키지를 설치할 수 없는 경우 Docker 이미지를 사용할 rishasi/ubuntu-netutil:1.0 수 있습니다. 이 이미지에서 필요한 패키지가 이미 설치되어 있습니다.

DNS 확인을 확인하는 예제 절차는 다음과 같습니다.

  1. 문제가 있는 Pod와 동일한 네임스페이스에서 테스트 Pod를 시작합니다.

    kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
    

    테스트 Pod가 실행되면 Pod에 액세스할 수 있습니다.

  2. 다음 apt-get 명령을 실행하여 다른 도구 패키지를 설치합니다.

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat -y
    
  3. 패키지가 설치되면 nslookup 명령을 실행하여 엔드포인트에 대한 DNS 확인을 테스트합니다.

    $ nslookup microsoft.com
    Server:         10.0.0.10
    Address:        10.0.0.10#53
    ...
    ...
    Name:   microsoft.com
    Address: 20.53.203.50
    
  4. 업스트림 DNS 서버에서 직접 DNS 확인을 시도합니다. 이 예제에서는 Azure DNS를 사용합니다.

    $ nslookup microsoft.com 168.63.129.16
    Server:         168.63.129.16
    Address:        168.63.129.16#53
    ...
    ...
    Address: 20.81.111.85
    
  5. host 명령을 실행하여 DNS 요청이 업스트림 서버로 라우팅되는지 확인합니다.

    $ host -a microsoft.com
    Trying "microsoft.com.default.svc.cluster.local"
    Trying "microsoft.com.svc.cluster.local"
    Trying "microsoft.com.cluster.local"
    Trying "microsoft.com.00idcnmrrm4edot5s2or1onxsc.bx.internal.cloudapp.net"
    Trying "microsoft.com"
    Trying "microsoft.com"
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62884
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 27, AUTHORITY: 0, ADDITIONAL: 5
    
    ;; QUESTION SECTION:
    ;microsoft.com.                 IN      ANY
    
    ;; ANSWER SECTION:
    microsoft.com.          30      IN      NS      ns1-39.azure-dns.com.
    ...
    ...
    ns4-39.azure-dns.info.  30      IN      A       13.107.206.39
    
    Received 2121 bytes from 10.0.0.10#53 in 232 ms
    
  6. Windows 노드 풀에서 테스트 Pod를 실행합니다.

    # For a Windows environment, use the Resolve-DnsName cmdlet.
    kubectl run dnsutil-win --image='mcr.microsoft.com/windows/servercore:1809' --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "windows"}}}' -- powershell "Start-Sleep -s 3600"
    
  7. kubectl exec 명령을 실행하여 PowerShell을 사용하여 Pod에 연결합니다.

    kubectl exec -it dnsutil-win powershell
    
  8. PowerShell에서 Resolve-DnsName cmdlet을 실행하여 DNS 확인이 엔드포인트에 대해 작동하는지 확인합니다.

    PS C:\> Resolve-DnsName www.microsoft.com 
    
    Name                           Type   TTL   Section    NameHost
    ----                           ----   ---   -------    --------
    www.microsoft.com              CNAME  20    Answer     www.microsoft.com-c-3.edgekey.net
    www.microsoft.com-c-3.edgekey. CNAME  20    Answer     www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net
    net
    www.microsoft.com-c-3.edgekey. CNAME  20    Answer     e13678.dscb.akamaiedge.net
    net.globalredir.akadns.net
    
    Name       : e13678.dscb.akamaiedge.net 
    QueryType  : AAAA
    TTL        : 20
    Section    : Answer
    IP6Address : 2600:1408:c400:484::356e   
    
    
    Name       : e13678.dscb.akamaiedge.net 
    QueryType  : AAAA
    TTL        : 20
    Section    : Answer
    IP6Address : 2600:1408:c400:496::356e 
    
    
    Name       : e13678.dscb.akamaiedge.net
    QueryType  : A
    TTL        : 12
    Section    : Answer
    IP4Address : 23.200.197.152
    

DNS 확인에 성공하지 못한 경우 클러스터에 대한 DNS 구성을 확인합니다.

여전히 문제가 있나요?

위의 단계에서는 많은 일반적인 연결 문제를 해결하지만 여전히 연결할 수 없는 경우 문제 해결 로그 파일을 생성한 다음, 지원 요청을 열어 문제를 추가로 조사할 수 있습니다.

문제 해결 로그 파일을 생성하려면 다음 명령을 실행합니다.

az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>

지원 요청을 만들추가 세부 정보 섹션에서 파일 업로드 옵션을 사용하여 생성된 로그 파일을 업로드합니다.

다음 단계